jvm垃圾回收算法

1、怎么定义对象是垃圾
1)引用计数法
2)可达性分析
2、垃圾回收算法
1)Mark-Sweep 标记清除 缺点:碎片较多
2)Copying 复制算法 缺点:浪费一定空间
3)Mark-Compact 标记压缩 效率最低
3、jvm对象的创建以及销毁过程


jvm对象创建以及回收流程

3、垃圾回收器(大多数按照下列配套使用)
1)Serial(新生代) serialOld (老年代) 单线程
2)parallel Scavenge (新生代) Parallel old (老年代)多线程 并发
3)ParNew(新生代)CMS (concurrent mark sweep)(老年代) 并行

*CMS算法*
三色标记法(颜色是标记在对象的markword中)
白色:未被标记的对象
灰色:自身被标记,成员变量未被标记
黑色:自身和成员变量都被标记完成

CMS采用并行的方式进行垃圾回收,但是也会带来一些问题;主要问题如下图:
可能会出现误删有用对象的情况,如下图:


CMS采用三色标记法可能出现的问题

解决方式:将A重新标成灰色 (Incremental update)
通过写屏障的方式,当A.x = C且C是白色的时候,就将A置为灰色。

但是还是存在漏洞:如果A中有两个成员变量 y1和y2,当A.y1被扫描完成后,接着执行业务线程A.x = C将A变成灰色,但是标记线程接着扫描完y2,A还是变成了黑色,就不会再扫描C了,因此C就变成了垃圾;但是C是有被A使用的。针对这种情况,CMS在remark阶段,必须从头在扫一遍。
由于CMS存在的问题较多,G1垃圾回收器应运而生。

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容