iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Mobile Development

[Android] 在 activity 與 fragment 身上的 lifecycle系列 第 21

[Day 21] Activity 的 lifecycle - 甜點應用程式 - 垃圾回收機制涉及的堆棧(Heap)概念是什麼?

  • 分享至 

  • xImage
  •  

在 Day 20 介紹了垃圾回收(garbage collected)機制。當中,提到了堆棧 / 堆(Heap)這個關鍵字。考量到它的重要性,故用這個篇幅來予以介紹。

Android 的記憶體堆棧有區分不同世代(generational),這代表不同的配置桶會根據被回收物件的預期生命、大小來追蹤這些物件。例如,最近被回收物件屬於新生代(young generation)。當一個物件保持夠長的活動時間,它會被提升至老生代(older generation)。最後則是永生代(permanent generation)。

https://ithelp.ithome.com.tw/upload/images/20220927/20151956QKxV0GUBZF.jpg
[圖1] Java 概念下的堆棧區分

每個堆棧世代都有專用的記憶體容量佔用上限。每當某個世代被佔滿,系統會執行垃圾回收來試圖釋放記憶體。垃圾回收所需時間取決於它正在回收哪一個世代的物件,以及每個世代有多少活動中的物件。

儘管垃圾回收被非常快地執行,它仍舊會影響到應用程式的表現。通常你無法控制程序中何時要發生垃圾回收事件,系統有自己的一套標準來確認何時執行垃圾回收。當條件成就,系統停止執行程序並開始垃圾回收。

如果垃圾回收發生在敏感性程序迴圈(intensive processing loop),像是動畫、音樂播放,則可能會增加垃圾回收的處理時間。這樣增加的處理時間,可能會使應用程式的程序執行時間超過為了效能、平滑幀(影格)渲染效果而設的 16 毫秒建議閥值。


參考資料


上一篇
[Day 20] Activity 的 lifecycle - 甜點應用程式 - onDestroy() - 垃圾回收(garbage collected)
下一篇
[Day 22] Activity 的 lifecycle - 甜點應用程式 - 分享選單(Share dialog)
系列文
[Android] 在 activity 與 fragment 身上的 lifecycle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言