HotSpot 垃圾收集算法的实现

2019-07-31  本文已影响0人  来醉一场

根据对象存活判定算法和垃圾收集算法,HotSpot 虚拟机上实现这些算法时,对算法的执行效率有严格的考量。

一、枚举根节点

因为分析工作必须在一个能确保一致性的快照中进行,这里“一致性”指的是在整个分析期间整个执行系统看起来就像被冻结在某个时间点上,不可以出现分析过程中对象引用关系不在不断变化的情况,该点不满足的话分析结果准确性就无法得到保证。这是 GC 停顿的其中一个重要原因。

二、安全点

三、安全区域

   使用 Safepoint 似乎已经完美地解决了如何进入 GC 的问题,但实际情况却并不一定。Safepoint 机制保证了程序执行时,在不太长的时间内就会遇到可进入 GC 的 Safepoint。但是,程序“不执行”的情况呢?所谓的程序不执行就是没有分配 CPU 时间,典型的例子就是线程处于 Sleep 状态或者 Blocked 状态,这时候线程无法响应 JVM 的中断请求,“走”到完全的地方去中断挂起,JVM 也显然不太可能等待线程重新被分配 CPU 时间。对于这种情况,就需要安全区域(Safe Region)来解决。

上一篇 下一篇

猜你喜欢

热点阅读