面试官:什么是三色标记


程序员的公众号:源1024获取更多资料,无加密无套路!

最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上


三色标记法:垃圾收集器依据可达性分析算法判断对象是否存活时,将遍历GC Roots过程中遇到的对象,按照“是否访问过”这个条件,把对象标记成白色(white)、灰色(gray)、黑色(black)三种颜色。

优点:

可以异步执行,从而可以以中断时间极少的代价或者完全没有中断来进行整个 GC

缺点:

 可能存在标记漏标和标记误标的情况,需要额外的处理来解决这些问题。

 漏标处理方案有:

        CMS:采用的是写屏障 + 增量更新

        G1: 采用的是写屏障 + 原汁快照(SATB)

        ZGC:采用的是读屏障

白色表示对象尚未被扫描,即未被标记为存活对象。

灰色表示对象已经被扫描,但其引用的其他对象尚未被扫描。

黑色表示对象已经被扫描,并且其引用的其他对象也已经被扫描。

 标记过程:

  1. 垃圾收集器在开始垃圾回收时,将所有对象标记为白色。
  2. 然后从根对象开始,递归地遍历对象图,将遇到的对象标记为灰色,并将其引用的对象添加到待扫描队列中。
  3. 接着,垃圾收集器从待扫描队列中取出对象,将其标记为黑色,并将其引用的对象添加到待扫描队列中。这个过程会一直进行,直到待扫描队列为空。
  4. 最后,所有未被标记为黑色的对象即为垃圾对象,可以被回收。

 系列文章索引

MyBatis的插件能在哪些地方进行拦截?

了解MyBatis的缓存机制吗

面试官:谈谈对volatile的理解

Spring中用到了哪些设计模式

面试官:说一下SQL的执行过程

线程池的工作原理


 

你可能感兴趣的:(#,jvm,jvm,算法)