垃圾回收器

news/2024/11/30 6:49:53/

JVM的垃圾回收器大致分为六种类型:

1.Serial收集器

串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)。

参数控制:-XX:+UseSerialGC  串行收集器

2.串行:ParNew收集器
ParNew收集器其实就是Serial收集器的多线程版本。新生代并行,老年代串行;新生代复制算法、老年代标记-压缩。
使用方法:-XX:+UseParNewGC  ParNew收集器
                  -XX:ParallelGCThreads 限制线程数量

3.并行:Parallel收集器
Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。可以通过参数来打开自适应调节策略,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量;也可以通过参数控制GC的时间不大于多少毫秒或者比例;新生代复制算法、老年代标记-压缩
使用方法:-XX:+UseParallelGC  使用Parallel收集器+ 老年代串行

4.并行:Parallel Old 收集器
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。这个收集器是在JDK 1.6中才开始提供。
使用方法: -XX:+UseParallelOldGC 使用Parallel收集器+ 老年代并行

5.CMS收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用都集中在互联网站或B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。从名字(包含“Mark Sweep”)上就可以看出CMS收集器是基于“标记-清除”算法实现的,它的运作过程相对于前面几种收集器来说要更复杂一些,整个过程分为4个步骤,包括:
初始标记(CMS initial mark)
并发标记(CMS concurrent mark)
重新标记(CMS remark)
并发清除(CMS concurrent sweep)
其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行。老年代收集器(新生代使用ParNew)

优点:并发收集、低停顿
缺点:产生大量空间碎片、并发阶段会降低吞吐量
使用方法:

-XX:+UseConcMarkSweepGC  使用CMS收集器

-XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长

-XX:+CMSFullGCsBeforeCompaction  设置进行几次Full GC后,进行一次碎片整理

-XX:ParallelCMSThreads  设定CMS的线程数量(一般情况约等于可用CPU数量) 
 

6.G1收集器

G1是目前技术发展的最前沿成果之一,HotSpot开发团队赋予它的使命是未来可以替换掉JDK1.5中发布的CMS收集器。与CMS收集器相比G1收集器有以下特点:

  1. 空间整合,G1收集器采用标记整理算法,不会产生内存空间碎片。分配大对象时不会因为无法找到连续空间而提前触发下一次GC。
  2. 可预测停顿,这是G1的另一大优势,降低停顿时间是G1和CMS的共同关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为N毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已经是实时Java(RTSJ)的垃圾收集器的特征了。

上面提到的垃圾收集器,收集的范围都是整个新生代或者老年代,而G1不再是这样。使用G1收集器时,Java堆的内存布局与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔阂了,它们都是一部分(可以不连续)Region的集合。

常用的收集器组合

组合新生代GC策略年老代GC策略说明
组合1SerialSerial OldSerial和Serial Old都是单线程进行GC,特点就是GC时暂停所有应用线程。
组合2SerialCMS+Serial OldCMS(Concurrent Mark Sweep)是并发GC,实现GC线程和应用线程并发工作,不需要暂停所有应用线程。另外,当CMS进行GC失败时,会自动使用Serial Old策略进行GC。
组合3ParNewCMS

使用-XX:+UseParNewGC选项来开启。ParNew是Serial的并行版本,可以指定GC线程数,默认GC线程数为CPU的数量。可以使用-XX:ParallelGCThreads选项指定GC的线程数。

如果指定了选项-XX:+UseConcMarkSweepGC选项,则新生代默认使用ParNew GC策略。

组合4ParNew Serial Old使用-XX:+UseParNewGC选项来开启。新生代使用ParNew GC策略,年老代默认使用Serial Old GC策略。
组合5Parallel ScavengeSerial OldParallel Scavenge策略主要是关注一个可控的吞吐量:应用程序运行时间 / (应用程序运行时间 + GC时间),可见这会使得CPU的利用率尽可能的高,适用于后台持久运行的应用程序,而不适用于交互较多的应用程序。
组合6Parallel ScavengeParallel Old

Parallel Old是Serial Old的并行版本

组合7G1GCG1GC

-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC        #开启

-XX:MaxGCPauseMillis =50                  #暂停时间目标

-XX:GCPauseIntervalMillis =200          #暂停间隔目标

-XX:+G1YoungGenSize=512m            #年轻代大小

-XX:SurvivorRatio=6                            #幸存区比例

 

 

 


 

 


http://www.ppmy.cn/news/257295.html

相关文章

十大垃圾回收器详解

十大垃圾回收器详解 JVM调优的第一要义就是重启,但是注意这是不优雅的方式但是管用。 Serial:回收垃圾时采用单线程运行机制就像是一个房间只能有一个人进行打扫如果空间很小的情况下可以使用Serial进行垃圾回收但是当空间很大时那个垃圾回收的速度将会很慢有可能造…

几种垃圾回收器

垃圾回收器分类 按线程分: 1.串行垃圾回收器。 2.并行垃圾回收器 按工作模式分: 1.并发式垃圾回收器 2.独占式垃圾回收器:GC时STW。 按碎片处理分: 1.压缩式垃圾回收器:压缩整理,清理碎片 2.非压缩…

垃圾回收器(GC)

目录 垃圾回收 概述 垃圾回收机制 垃圾回收标记阶段 Finaliztion机制 垃圾回收阶段算法 System.gc()与STW 垃圾回收器 CMS G1回收算法 查看 JVM 垃圾回收器设置垃圾回收器 垃圾回收 概述 垃圾回收功能是java中支持的功能,在其他的语言中也会存在自动的垃圾回收的功能…

五、垃圾回收器

一、串行搜集器 Serial收集器 同一时间只有一个CPU执行垃圾回收,此时应用程序暂停,直到垃圾回收完成;最古老的搜集器,最稳定;单线程没有线程间交互,回收效率高;当回收的内存很大时会造成长时间停…

常见垃圾回收器

CMS和G1是最重要的 总结: CMS:追求最短的停顿时间,并行的,垃圾回收线程可以和用户线程同时执行(只有初始标记阶段需要暂停用户线程,其他阶段不需要暂停用户线程) 采用三色标记法 G1:HotSpot 开发团队赋予它的使命…

垃圾处理器分类

萌新小白看完JVM垃圾处理器的笔记,只是大概的描述一下垃圾处理器的几种,以及使用到的算法、运行过程和其缺陷。 经典的垃圾收集器(技术咨询vx:keyichen_free) 1.Serial收集器 显而易见,这是一个单线程的收集器,其意义…

如何建立制造业设备巡检系统?零代码工具起关键性作用

什么设备巡检系统 设备巡检系统是一种管理工具,用于监测和记录设备运行状况,并在需要时指示工作人员进行巡检、维护或维修。这些系统通常由计算机软件和一组传感器或控制器组成,可监测各种设备的运行状况,如机器、设备、管线和车…

MATLAB 之 数据插值、曲线拟合和数值微分

这里写目录标题 一、数据插值1. 一维数据插值2. 二维数据插值 二、曲线拟合1. 曲线拟合原理2. 曲线拟合的实现 三、数值微分1. 数值差分与差商2. 数值微分的实现 一、数据插值 在工程测量和科学实验中,所得到的数据通常都是离散的。如果要得到这些离散点以外的其他…