簡體   English   中英

Android GC的Preserving是什么意思?

[英]What does Preserving mean of Android GC?

我找到一張表,該表顯示了Android OS中各種GC的功能。 我想知道表中的保存是什么意思。 下表如下:

GC_FOR_ [M] ALLOC

部分:Y並發:N保留:Y

何時觸發:沒有足夠的空間分配“普通”對象。

GC_CONCURRENT

部分:Y並發:Y保留:Y

何時觸發:通過超過堆占用量閾值觸發自動GC。

GC_EXPLICT

部分:N並發:Y保留:Y

何時觸發:通過Runtime.gc(),VMRuntime.gc()或SIGUSR1進行顯式GC

GC_BEFORE_OOM

部分:N並發:N保留:N

何時觸發:在引發OOM之前最終嘗試回收內存。

該表來自此網站: http : //www.kandroid.org/board/data/board/conference/file_in_body/1/511th_kandroidconf_memory_and_performance.pdf

好吧,“ preserving”標題旁邊有一個星號,表格下方的相應注釋顯示

是否保留柔軟可觸及的物體

引用是否清除SoftReferences。 Java VM嘗試將SoftReferences引用的對象保留在內存中,但是,如果垃圾收集器需要其他對象的空間,它可能會收集它們(當然,如果它們不能很強地到達它們)。 有關SoftReferences的更多信息,請閱讀[soft-references]標簽wiki或嘗試搜索[java][soft-references]

在這種情況下,前三個集合類型為“正常”,並且JVM不會清除SoftReferences。 最后一種情況是最后一次嘗試回收內存以避免拋出OutOfMemoryError的嘗試,JVM將清除SoftReferences以便收集更多對象。 必須先清除SoftReferences,然后才能按規范拋出OOME。)請注意,SoftReference策略因JVM和GC算法而異,因此其他VM可能會在正常收集期間清除“舊的” SoftReferences(對於“ old”而言有些含義)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM