南京建站公司,三维免费网站,wordpress导出淘宝,做招聘网站的怎么引流求职者垃圾回收器就是垃圾回收的实践者#xff0c;随着JDK的发展#xff0c;垃圾回收器也在不断的更迭#xff0c;在不同的场合下使用不同的垃圾回收器#xff0c;这也是JVM调优的一部分。
1.垃圾回收器的分类 按线程可分为单线程(串行)垃圾回收器和多线程(并行)垃圾回收器。 按…垃圾回收器就是垃圾回收的实践者随着JDK的发展垃圾回收器也在不断的更迭在不同的场合下使用不同的垃圾回收器这也是JVM调优的一部分。
1.垃圾回收器的分类 按线程可分为单线程(串行)垃圾回收器和多线程(并行)垃圾回收器。 按工作模式可分为独占式和并发式垃圾回收器。 按工作的区间可分为年轻代垃圾回收器和老年代垃圾回收器。
2.GC的性能指标
GC的性能主要看 吞吐量运行用户代码所占的总运行时间比例。 垃圾收集开销垃圾收集所占总运行时间的比例。 暂停时间在垃圾回收时工作线程暂停总花费的时间。 对象的存活时间一个对象从创建到被回收所经历的时间。
3.HotSpot的垃圾回收器 3.1CMS
CMS称Concurrent Mark Sweep,并发标记清除它在垃圾清除时可以使工作线程和GC线程并发执行所以在垃圾收集的过程中用户的体验感会好很多。
CMS垃圾回收的过程 初始标记工作线程暂停GC标记线程单独工作。 并发标记工作线程和GC线程一起执行。 重新标记工作线程暂停GC标记线程单独工作。 并发清理工作线程和GC线程一起执行。
如下图所示 CMS的优点 可以做到并发收集提升用户的体验感。
CMS的缺点 CMS是基于标记——清除算法的会存在内存碎片。 CMS在并发阶段CPU资源有限在并发执行下还是占用了一定的资源的总吞吐量会变低。 CMS无法处理浮动垃圾。
4.三色标记算法
从CMS垃圾收集器开始引入了三色标记算法就是将对象的颜色分为了黑、灰、白三种颜色。
黑色表示该对象确定为存活对象。
灰色对象已经被扫描但是还未扫描此对象下的引用。
白色表示此对象不可达为垃圾对象。
三色标记的过程 初始确定GC Roots根为黑色对象。 将GC Roots根下关联的对象标记为灰色。 下一次扫描灰色对象先将灰色变为黑色之后将其下的引用标记为灰色。 一直重复直到没有灰色对象。 黑色则为存活对象白色为垃圾对象。
三色标记可能出现的问题
漏标 因为CMS中的工作线程和GC线程并发执行的此时A确定为黑色B,C为灰色正常情况下下次应该扫描B了但是假如此时A与B失去了关联引用我们发现此时B为灰色并不能立即直接列为垃圾对象(B就为浮动垃圾)而是需要等到下次GC扫描时才会发现B是垃圾对象。
错标 这种情况是B和D开始已经失去了关联然后将D标记为白色表示垃圾对象此时如果突然A和D建立了引用但是D已经标记为白色了之后不在会扫描了之后D就会被当为垃圾对象回收。
解决错标问题的策略 我们发现错标远比漏标更为严重错标在同时满足下面两种情况时才会发生 打破这两种情况的任意一种即可解决错标问题即利用原始快照或者增量更新。
原始快照在断开之时快照将此引用保存下之后这次扫描完在以B根重新扫描一次。
增量更新等建立联系之后以A根再扫描一次。
5.G1(Garbage First)垃圾优先回收器
G1可以在延迟可控的情况下尽可能多的增大吞吐量是一款面向服务端的垃圾收集器其将堆划分为多个小区域对各区域内的垃圾数量进行实时检测优先收集垃圾数量最多的运用在内存较大的应用上。
6.JDK8默认使用的垃圾回收器
年轻代使用 Parallel Scavenge GC
老年代使用 Parallel Old GC