前面介绍了对象存活判定算法和垃圾收集算法,而在HotSpot虚拟机上实现这些算法时,必须对算法的执行效率有严格的考量,才能保证高效运行。
1.枚举根节点
从可达分析中从GC Roots节点找引用链这个操作为例,可作为GC Roots的节点主要在全局性引用于执行上下文,现在很多应用仅仅方法区就有数百M,如果要逐个检查必定会消耗很多时间。
另外,可达性分析对执行时间的敏感还体现在GC停顿上,这个分析工作必须停止掉所有的Java的线程进行分析,否则无法确保收集的正确性,因为如果不停止掉所有线程的话,极可能出现对象引用关系不断变化的情况。