电视台网站模版,网络购物平台,wordpress网站如何app,兰州网站seo分析欢迎访问#x1f44b;zjyun.cc
可达性分析
为了验证堆中的对象是否为可回收对象#xff08;Garbage#xff09;标记上的对象#xff0c;即是存活的对象#xff0c;不会被垃圾回收器回收#xff0c;没有标记的对象会被垃圾回收器回收#xff0c;在标记的过程中需要stop…欢迎访问zjyun.cc
可达性分析
为了验证堆中的对象是否为可回收对象Garbage标记上的对象即是存活的对象不会被垃圾回收器回收没有标记的对象会被垃圾回收器回收在标记的过程中需要stop the world STW。 缺点当堆中的对象很多、很复杂时用。等待时间会很长。
什么是并发可达性分析
并发的意思是指和用户的线程进行并行运行在运行时不需要进行STW。
三色算法理论-引入三种颜色
白色尚未访问过。 黑色本对象已访问过而且本对象 引用到 的其他对象 也全部访问过了。 灰色本对象已访问过但是本对象 引用到 的其他对象 尚未全部访问完。全部访问后会转换为黑色。
三色算法理论-解释多标-浮动垃圾问题 浮动垃圾Floating Garbage 如图在本图中A为GC ROOT扫描到了B节点的时刻断开了A到B 的应用A.referenceBnull ,此时B下的100个下游对象都无法被扫描到导致无法被回收这部分本应该回收但是没有回收到的内存被称之为“浮动垃圾”。浮动垃圾并不会影响应用程序的正确性只是需要等到下一轮垃圾回收中才被清除。
三色算法理论-解释漏标-对象消失问题 【描述】 当扫描到B节点时断开时了B-C 的链接A-C 新增一条新的引用
cb.reference;
b.referenceCnull;
a.referencecc;【问题】 由于将B到C 的引用断开导致C的状态还是白色虽然新增了A到C的引用但是A已经是黑色不会重新进行扫描我因此会出现当本次扫描完成后C还是白色C和C引用的100个对象被回收掉了这是完全不能忍受的。
【出现问题的两个条件】
赋值器插入了一条或者多条从黑色对象到白色对象的新引用赋值器删除了全部从灰色对象到该白色对象的直接或间接引用。 要解决对象消失的问题就要使引发问题的根源条件处理这就引出了2种解决对象消失问题的方式增量更新或原始快照。
如何解决漏标-增量更新Incremental Update
代表回收器CMS 增量更新破坏的是第一个条件当黑色对象插入新的指向白色对象的引用时就将这个新加入的引用记录下来待并发标记完成后重新对这种新增的引用记录进行扫描 简记黑色对象一旦插入新的白色对象黑色就变成灰色需要重新扫描
如何解决漏标-原始快照Snapshot At The BeginningSATB
代表回收器G1、Shenandoah 原始快照破坏的是第二个条件当灰色对象要删除指向白色对象的引用关系时也是将这个记录下来并发标记完成后对该记录进行重新扫描。 简记如果灰色对象下的所有白色节点之间的引用删掉那么灰色节点将变为根节点重新进行扫描。 【复杂度分析】
优缺点分析
增量更新黑色对象新增一条指向白色对象的引用那么要进行深入扫描白色对象及它的引用对象。 原始快照灰色对象删除了一条指向白色对象的引用实际上就产生了浮动垃圾好处是不需要像 CMS 那样 remark再走一遍 root trace 这种相当耗时的流程。 SATB相对增量更新效率会高(当然SATB可能造成更多的浮动垃圾)因为不需要在重新标记阶段再次深度扫描被删除引用对象而CMS对增量引用的根对象会做深度扫描G1因为很多对象都位于不同的regionCMS就一块老年代区域重新深度扫描对象的话G1的代价会比CMS高所以G1选择SATB不深度扫描对象只是简单标记等到下一轮GC再深度扫描。