什么是保存Android GC的意思?

时间:2014-02-22 05:57:10

标签: java android jvm

我找到一张表格,显示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

1 个答案:

答案 0 :(得分:0)

嗯,“保留”标题旁边有一个星号,表格下面的相应注释表示

  

保留可轻松到达的对象

指的是SoftReferences是否被清除。 Java VM尝试将SoftReferences引用的对象保留在内存中,但如果垃圾收集器需要其他对象的空间,它可能会收集它们(当然,如果它们不是很容易访问的话)。有关SoftReferences的更多信息,请阅读[soft-references]标记wiki或尝试搜索[java][soft-references]

在这种情况下,前三种集合类型是“正常”,JVM不会清除SoftReferences。最后一种情况是最后一次尝试回收内存以避免抛出OutOfMemoryError,并且JVM将清除SoftReferences以便它可以收集更多对象。 (在按规范抛出OOME之前,SoftReferences是 required 要清除。)请注意,SoftReference策略因JVM和GC算法而异,因此其他VM可能会清除“旧”SoftReferences(对于某些“旧”的含义) )在正常收藏期间。