首页 > 编程知识 正文

新生代垃圾收集器,object中的方法

时间:2023-05-06 13:39:12 阅读:14933 作者:4677

Java堆内存分为干净的夏季和老年,干净的夏季主要使用拷贝和标记-垃圾回收算法,老年主要使用标记-整理垃圾回收算法。 因此,在Java虚拟中为漂亮的夏季和老年提供了各种各样的垃圾收集器。 以下收集器基于紧接在JDK1.7收集器之后的HotSpot虚拟机,其中的所有收集器都包含垃圾收集器,垃圾收集器中有很多

垃圾收集器为什么有这么多垃圾回收器呢?

历史的发展、java的持续更新、GC的持续改善垃圾收集器没有好坏之分。 只是,没有人能解决所有的问题。 不同场景使用不同的垃圾收集器(但典型的默认设置已足够):垃圾的回收评价指标

回收空间的效率(例如, 两个人打扫同一个房子效果当然不同)回收速度)两个人打扫房间的时间也不同-影响STW ) )是否允许与APP应用线程并行(打扫过程中不影响别人的正常工作-影响STW ) )

STW问题参考了本文,1.1.Serials收集器(干净的夏季世代收集器,穿越GC ) Serial收集器是最基本、发展历史最悠久的收集器,曾经) JDK 1.3.1之前)是虚拟机的干净

一选一。

Serial收集器是虚拟运行在Client模式下的默认干净的夏天代收集器。

Serials收集器的特点和优势

特点:

他是单线程收集器,“单线程”的意思不仅仅是使用一个CPU或一个收集线程来完成垃圾收集工作,在进行垃圾收集(GC )的过程中,其他工作线程也必须停止直到收集结束

好处:

因为执行GC操作需要开销,所以对于一个线程来说,开销确实很小,所以对于对应的CPU被限定为一个的环境来说,如果该收集器没有线程交互的开销就可以了

1.2. ParNew收集器(干净的夏季世代收集器、并行GC ) ParNew收集器实际上是串行收集器的多线程版本,是除使用多个线程进行垃圾收集之外的操作包

Serial收集器中可用的所有控制参数、收集算法、停止时间世界、对象分配规则、回收策略等是什么

串行收集器完全相同

ParNew收集器是许多个运行在Server(服务器)模式下的虚拟机中首选的干净的夏天代收集器。

ParNew收集器与Serial收集器的对比分析:

对于单个线程(CPU ),这当然没有比串行收集器更好的效果。 由于线程hpdwg开销,ParNew收集器在具有超线程的两个CPU环境中不能超过串行收集器100%,但随着可用CPU的数量的增加,GC将为系统资源

3.3.Parallel Scanvenge收集器(干净的夏季世代收集器,并行GC )类似于上面的ParNew收集器,但Parallel Scanvenge收集器的用途是吞吐量(即一轮GC收集器)

Parallel Scavenge收集器使用两个参数控制吞吐量:

XX:MaxGCPauseMillis控制最大垃圾收集暂停时间XX:GCRatio直接设定吞吐量大小Parallel Scavenge收集器的应用场景:

停顿时间越短,越适合需要与用户交互的程序;响应速度越高,用户体验越好;吞吐量越高,越舒服

高效使用CPU时间,尽快完成程序运算任务,主要适合后台运算,不需要太多的交互任务。

3.4 .串行old收集器(上一代收集器,串行GC )串行old是串行收集器的上一代版本,是同一单线程收集器,并使用标签-清理算法。

应用场景:

客户端模式串行old收集器的主要含义是也用于客户端模式虚拟机。 服务器模式在服务器模式下主要有两大用途。 一种用途是在JDK 1.5或更早版本中与Parallel Scavenge收集器配合使用,另一种用途是在并发收集中发生Concurrent Mode Failure时将其用作CMS收集器的备份计划。 3.5 .并行old收集器(并行old收集器,并行GC )并行old收集器是并行scavenge收集器的旧版本,多线程和“标记-清理”算法

在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器。

> 3.6.CMS收集器(老年代收集器,并发GC)

CMS收集器的目的就是获取最短回收停顿时间(STW)

CMS是基于“标记-清除”算法实现,步骤为:

采取标记-清除的操作

初始标记:只标记一下GC Root能够直接关联到的对象,速度很快 ,需要“STW”并发标记:上面的初始标记只是标记了与GC Root直接相关联的对象,而这一层是标记可达性的对象,也就是遍历初始标记的GC Root,接着往下取找那些对象是可达的,因为对象可能会很多,所以会很耗时。重新标记:在执行上面并发标记的时候我们的业务代码在随时变动,可能会有新的引用出现,旧的引用失效,所以需要对上面标记的再次进行重新标记,因为只是重新标记,所以速度也是很快的,需要“STW”并发清除:并发清除阶段会清除对象,和业务线程并发进行

CMS收集器的有点和缺点:

优点:

并发收集、低停顿。

缺点:

CMS收集器对CPU资源非常敏感CMS收集器无法处理浮动垃圾CMS收集器会产生大量空间碎片 3.7.G1收集器(全区域的垃圾回收器)

G1收集器是前面几种收集器中最好的收集器

G1收集是内存划分成很多的region块,然后并行的对其进行垃圾回收

G1垃圾回收器回收region的时候基本不会STW(STW非常小) ,而是基于 most garbage优先回收(整体来看是基于"标 记-整理"算法,从局部(两个region之间)基于"复制"算法) 的策略来对region进行垃圾回收的。

年轻代垃圾收集

在G1垃圾收集器中,年轻代的垃圾回收过程使用复制算法。把Eden区(伊甸区)和Survivor区(生存区)的对象复制到新的Survivor区域。

老年代垃圾集

对于老年代上的垃圾收集,G1垃圾收集器也分为4个阶段,基本跟CMS垃圾收集器一样(初始标记 -> 并发标记 -> 最终标记 -> 筛选回收)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。