程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》,《Java并发编程实战》等等
获取方式: 关注公众号并回复 电子书 领取,更多内容持续奉上
三色标记法:垃圾收集器依据可达性分析算法判断对象是否存活时,将遍历GC Roots过程中遇到的对象,按照“是否访问过”这个条件,把对象标记成白色(white)、灰色(gray)、黑色(black)三种颜色。
优点:
可以异步执行,从而可以以中断时间极少的代价或者完全没有中断来进行整个 GC
缺点:
可能存在标记漏标和标记误标的情况,需要额外的处理来解决这些问题。
漏标处理方案有:
CMS:采用的是写屏障 + 增量更新
G1: 采用的是写屏障 + 原汁快照(SATB)
ZGC:采用的是读屏障
白色表示对象尚未被扫描,即未被标记为存活对象。
灰色表示对象已经被扫描,但其引用的其他对象尚未被扫描。
黑色表示对象已经被扫描,并且其引用的其他对象也已经被扫描。
标记过程:
- 垃圾收集器在开始垃圾回收时,将所有对象标记为白色。
- 然后从根对象开始,递归地遍历对象图,将遇到的对象标记为灰色,并将其引用的对象添加到待扫描队列中。
- 接着,垃圾收集器从待扫描队列中取出对象,将其标记为黑色,并将其引用的对象添加到待扫描队列中。这个过程会一直进行,直到待扫描队列为空。
- 最后,所有未被标记为黑色的对象即为垃圾对象,可以被回收。
系列文章索引
MyBatis的插件能在哪些地方进行拦截?
了解MyBatis的缓存机制吗
面试官:谈谈对volatile的理解
Spring中用到了哪些设计模式
面试官:说一下SQL的执行过程
线程池的工作原理