Shenandoah做的一些工作给简化了;我感觉这是降维打击了
如何判断对象可回收
引用计数算法
概述
对象添加一个引用计数器,当有地方使用计数器就+1; 引用时效计数器-1,当计数器为零说明对象不可能被使用...基本就是老年代)进行分配担保;
HotSpot算法细节
OopMap
主流Java虚拟机使用准确式垃圾收集,用户线程停顿下来的时候并不需要一个不漏的检查所有执行上下文和全局的引用位置,应该有办法直接得到哪些地方存放对象引用的...,并不需要GC Roots开始查找
安全点
有了OopMap,可以快速准确完成GC Roots枚举,但是引用关系可能发生变化;如果OopMap记录所有变换,那么空间成本会很高昂;
HotSpot是选择在特定位置生成安全点...(染色指针), 通过标记位可以快速的确认对象的三色标记状态,是否重分配,是否只能通过finalize访问这些信息; 对于GC这个过程,只要知道这些信息就够了,所以与之前的GC相比,就不需要先获取引用再获取引用对应的信息...; 对应,因为压缩了对象的地址空间,所以ZGC管理的内存不可以超过4TB(这个我目前碰到大数据对内存使用比较大,也不过就128G…)
ZGC的三个优势:
Region能够更快速的释放和重用,
大幅度减少垃圾收集中内存屏障的使用