公司制作网站多少钱,ps做字幕模板下载网站,有哪些搜索引擎,百度爱采购网站官网1.各垃圾回收器之间的配合使用关系 2.垃圾回收器的种类
2.1 Serial收集器#xff08;默认新生代收集器#xff09; Serial收集器是历史最悠久的收集器#xff0c;曾经是新生代收集器的唯一选择#xff0c;它是一个单线程工作的收集器#xff0c;其“单线程”的意义不仅仅…1.各垃圾回收器之间的配合使用关系 2.垃圾回收器的种类
2.1 Serial收集器默认新生代收集器 Serial收集器是历史最悠久的收集器曾经是新生代收集器的唯一选择它是一个单线程工作的收集器其“单线程”的意义不仅仅是说明它只会使用一个处理器或者一条收集线程去完成垃圾收集工作更重要的是强调它在进行垃圾回收的时候必须暂停其他所有工作线程直到它收集结束 优点
简单而且高效对于内存资源受限的环境它是所有收集器中额外内存消耗最小的对于单核处理器或者处理器核心较少的环境来说Serial收集器由于没有线程交互的开销专心做垃圾收集自然可以获得最高的单线程收集效率
2.2 ParNew收集器
ParNew收集器手机上是Serial收集器的多线程并行版本 注意除了Serial收集器之外目前只有它才可以和CMS进行配合工作 但是随着垃圾回收器的不断改进更先进的G1收集器带着CMS的继承者和替代者出现了G1是一个面向全堆的收集器不需要其他收集器进行配合工作从这JDK9之后,取消了ParNewSerialOld 以及SerialCMS的收集器组合变相的将ParNew合并到了CMS中称为它专门处理新生代的组成部分ParNew可以说是第一个退出历史舞台的垃圾收集器
2.3 Parallel Scavenge收集器 Parallel Scavenge收集器吞吐量优先收集器也是一款新生代收集器它同样是基于标记-复制算法实现的收集器也是能够并行收集的多线程收集器其收集器的特点是它的关注点与其他收集器不同CMS等收集器关注的是尽可能的缩短垃圾收集时用户的停顿时间而Parallel Scavenge收集器关注的是达到一个可控制的吞吐量处理器用于运行用户代码的时间与处理器总消耗时间的比值 注意
停顿时间越短就越适合需要与用户交互或者需要保证服务响应质量的程序、良好的响应速度能提升用户体验高吞吐量则可以最高效率的利用处理器资源尽快的完成程序的运算任务主要适合在后台运算而不需要太多交互的分析任务
2.4 Serial Old收集器
Serial Ol是Serial收集器的老年代版本它同样是一个单线程收集器使用标记-整理算法 2.5 Parallel Old收集器 Parallel Old是Parallel Scavenge收集器的老年代版本支持多线程并发收集基于标记-整理算法实现它的出现“吞吐量优先”收集器终于有了比较名副其实的搭配组合在注重吞吐量或者处理器资源较为稀缺的场合都可以优先考虑Parallel Scavenge Parallel Old收集器这个组合 2.6 CMS收集器 CMS收集器是一种以获得最短回收停顿时间为目标的收集器其基于标记-清除的算法实现分为4个步骤
初始标记初始标记的仅仅只是标记一下GC Roots能够直接关联到的对象速度非常快并发标记从GC Roots的直接关联对象开始遍历整个对象的过程并发重新标记修改并发标记期间因为用户程序继续运作而导致标记产生变动的那一小部分对象的标记记录增量更新并发清除清理删除掉标记阶段判断的已经死亡的对象并发
2.6.1 CMS的缺点
CMS收集器对处理器资源非常敏感CMS无法处理“浮动垃圾”收集结束后会产生大量的空间碎片
2.7 Garbage First收集器 Garbage First(G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果它开创了收集器面向局部收集的设计思路和基于Region的内存布局形式
2.7.1 G1的细节问题的解决方法
将Java堆分成多个独立Region后Region里面存在的跨Region引用对象如何解决 使用记忆集避免全堆作为GC Roots的扫描对象其每个Region都维护有自己的记忆集这些记忆集会记录下别的Region指向自己的指针并标记这些指针分别在哪些卡页的范围内G1的记忆集更像一个哈希表key值是Region的起始位置value是集合卡表的索引但是由于Region的数量比较多所以G1收集器要比其他的收集器有着更高的内存占用负担耗费相当于Java堆的10%~20%的额外内存
在并发标记阶段如何保证收集线程与用户线程互不干扰的运行 G1收集器时采用原始快照算法实现垃圾收集的过程中肯定会有新的对象被创建G1为每一个Region设计了两个名为TAMS的指针把Region中的一部分空间划分出来用于并发回收过程中的对象内存分配并发回收时新分配的对象地址都必须要在这两个指针位置上G1收集器默认在这个地址以上的对象是被隐式标记过的默认是存活的不纳入回收范围之内但是如果内存回收的速度赶不上创建对象分配内存的速度会冻结用户线程而导致长时间的“Stop the world”
怎么样建立起可靠的停顿预测模型 G1收集器的停顿预测模型是以衰减均值为理论基础实现的在垃圾收集的过程中G1收集器会记录每个Region的回收耗时以及记忆集里的脏卡数量等各个可测量的步骤花费的成本并分析得出平均值、标准偏差、置信度等统计信息Region的统计状态越新越能决定其回收的价值然后通过这些信息预测回收哪些Region才可以在不超过期望停顿时间的约束下获得最高的利益
2.7.2 G1的运行步骤
初始标记只标记一下GC Roots能直接关联到的对象并且修改TAMS指针的值让下一阶段用户线程并发运行的时候能正确的在可用的Region中分配内存创建对象并发标记从GC Roots开始对堆中的对象进行可达性分析递归扫描整个堆里的对象图找出要回收的对象重新处理SATB记录下的在并发时有引用变动的对象并发最终标记对用户线程做一个短暂的暂停用于处理并发阶段结束后仍然遗留下来的最后的SATB记录筛选回收负责更新Region的统计数据对各个Region的回收价值和成本进行排序根据用户所期望的停顿时间来制订回收计划把决定回收的Region中的存活对象复制到空的Region中再清理到整个旧的Region的全部空间
3.CMS和G1的比较
在未来CMS肯定会被G1取代但是在这个两者并存的时代中难免会有比较
G1相对于CMS的优点指定最大停顿时间、分Region的内存分布、按收益动态的确定回收集、算法上的优势整体基于标记-整理局部基于标记-复制这两种算法都不会产生内存空间碎片垃圾收集完成之后能提供比较规整的可用内存G1相对于CMS的缺点G1无论是为了垃圾收集产生的内存占用还是程序运行时的额外执行负载都比CMS要高