相关文章
首先,我们要了解一下这个主题的背景,为什么会出现这一系列名词。这些名词都是在如何提高GC效率的问题上提出的,具体讲,是如何提高GC Roots扫描效率的问题。
可达性分析
我们知道要判断一个对象是否可以被回收,是通过判断这个对象与GC Roots之间是否存在引用链,这个过程叫做可达性分析。而这个过程中,业务线程是需要停止的,不然在遍历时,引用发生变化,那么分析到的结果就是不准确的。也就是说这个过程需要“Stop the world”。为了提高效率,我们需要这个过程尽可能地快,以减少系统停顿时间。
怎么提高这部分的效率呢?首先在遍历GC Roots的速度能否提高?
保守式GC
在JDK1.0时,Sun公司发布JVM,称为Sun Classic VM,这款虚拟机只支持纯解释器方式来执行java代码,如果想使用JIT编译期就必须进行外挂,但是外挂后解释器就不工作了,总之两者不兼容。不止于此这款JVM,遍历GC Roots时,扫描内存中全局变量和栈