JVM常见垃圾回收器

1.对象分配与回收策略

1.对象优先在eden分配

2.大对象直接进入老年代

3.长期存活对象进入老年代

4.TLAB对象分配

2.常见垃圾回收器

1.串行回收器

串行回收器是最古老的垃圾回收器,串行回收器的工作特点:
a. 单线程垃圾回收。
b. 独占式垃圾回收,当进行垃圾回收时,应用程序需要暂停,也就是STW(Stop The World)现象。

在这里插入图片描述

常见参数:

-XX:+UseSerialGC:在新生代和老年代使用串行回收器
-XX:SurvivorRation:设置eden区大小和survivor区大小的比例
-XX:NewRatio:
-XX:PretenurSizeThreshold:设置大对象直接进入老年代的阈值。当对象大小超过这个值时,将直接在老年代分配。
-XX:MaxTenuringThrshold:设置对象进入老年代年龄的最大值。每一次Minor GC后,对象年龄就加1。任何大于这个年龄的对象,一定会进入老年代。
2.并行回收器

并行回收器在串行回收器的基础上做了改进,它使用多个线程进行垃圾回收,对于现代多核计算机来说可以有效缩短垃圾回收的时间。

新生代:ParallelNew,ParallelGC
老年代:ParallelOldGC

在这里插入图片描述

常见参数:

-XX:+UseParNewGC:在新生代使用并行回收器。
-XX:+UseParallelOldGC:老年代使用并行回收器。
-XX:MaxGCPauseMillis:设置最大停顿时间。
-XX:GCTimeRatio:设置吞吐量大小。
-XX:+UseAdaptiveSizePolicy:打开自适应GC策略,这种模式下,新生代的大小,eden区等参数会被自动调节。
3.CMS回收器

与ParallelGC和ParallelOldGC不同,CMS回收器主要关注系统停顿时间。CMS是Concurrent Mark Sweep的缩写,意为并发清除,它是使用标记清除算法的一个并行垃圾回收器。

CMS回收器的工作过程主要包括:初始标记,并发标记,预清理,重新标记,并发清除和并发重置。其中初始标记和重新标记是独占系统资源的,其他步骤都可以和用户线程并发执行。从整体上说,CMS不是独占式的,它可以在应用程序运行过程中进行垃圾回收,具体工作流程如下图所示。
在这里插入图片描述

常见参数:
-XX:+UseConcMarkSweepGC
–XX:ParallelGCThreads=n
-XX:CMSInitiatingOccupancyFraction=n
-XX:UseCMSCompactAtFullCollection:
-XX:CMSFullGCsBeforeCompaction:
-XX:+CMSClassUnloadingEnables:
-XX:CMSInitiatingPermOccupancyFraction:
-XX:UseCMSInitiatingOccupancyOnly:

4.G1回收器

常见参数

-XX:+UseG1GC:使用G1回收器
-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间。
-XX:GCPauseIntervalMillis:设置停顿间隔时间。

猜你喜欢

转载自blog.csdn.net/cl2010abc/article/details/105766773