算法分为标记和清除两个阶段,首先标记出全部须要回收的对象,而后回收全部已标记的对象。java
这个算法主要有两个缺点:算法
GC链逐个检查引用,会消耗比较多时间数组
GC停顿,为了保持“一致性”,须要“Stop the world”安全
目前主流的Java虚拟机使用的都是准确式GC,当执行系统停顿下来后并不须要一个不漏的检查完全部执行上下文和全局的引用变量,虚拟机应当有办法直接得知哪些地方存着对象的引用数据结构
HotSpot使用一组称为OopMap的数据结构来记录哪些地方存着对象的引用多线程
在类加载过程当中,HotSpot就把对象内什么偏移量上是什么类型的数据计算出来,在JIT编译过程当中会在特定的位置记录下栈和寄存器中哪些位置是引用并发