|
|
1
0
垃圾收集器处理对对象的引用,它的分析将定位代码维护对其引用的所有对象。 回答你的三个问题:
提供更多的背景来帮助你理解这一点。当公共GCS(有些可能不这样做)启动时,它们会创建一个称为根集的对象。这是从代码中直接访问的所有对象的列表。这是通过扫描所有初始化的类(对于静态引用)以及寄存器和堆栈来创建的。对于CMS和G1,此根集用于执行初始标记阶段(与应用程序线程同时执行)。收集器将获取根集中的每个对象引用,并遍历根集中的所有对象引用,以建立可从代码访问的对象的完整列表。如果无法访问某个对象,则不会标记该对象。一旦标记完成(对于CMS和G1,这也需要一个停止世界标记阶段),收集器就有一个可访问对象的精确列表。 对于年轻一代集合,有效对象被复制到幸存者空间或提升到旧一代。旧的gen集合要么更新活动对象之间的可用空间列表,要么执行完全压缩集合,重新定位对象以使它们在内存中都是连续的,从而消除碎片。 还有其他一些算法做的事情略有不同(比如我为之工作的阿祖尔的C4),但总体效果是相同的。 |
|
codeforester · 测量GC暂停时间的最佳方法是什么? 8 年前 |
|
|
Venki WAR · 需要解释G1的并行完整GC 8 年前 |
|
|
Stephan_Berlin · 为什么CMS系列中的初始标记阶段 8 年前 |
|
|
Bonsaisteak · 为什么年轻一代需要三个区域来收集垃圾? 8 年前 |
|
|
goks · 如何清除熊猫的数据帧内存? 8 年前 |