JVM垃圾回收器常见参数设置及优化

JVM垃圾回收器参数

Serial/Serial Old

开启参数

-XX:+UseSerialGC 新生代和老年代都用串行收集器

Parallel常用参数

开启参数

JDK1.8默认就是以下组合
-XX:+UseParallelGC新生代使用Parallel Scavenge,老年代使用Parallel Old

-XX:MaxGCPauseMillis

不过大家不要异想天开地认为如果把这个参数的值设置得更小一点就能使得系统的垃圾收集速度变得更快,垃圾收
集停顿时间缩短是以牺牲吞吐量和新生代空间为代价换取的:系统把新生代调得小一些,收集300MB新生代肯定比
收集500MB快,但这也直接导致垃圾收集发生得更频繁,原来10秒收集一次、每次停顿100毫秒,现在变成5秒收
集一次、 每次停顿70毫秒。停顿时间的确在下降,但吞吐量也降下来了。

-XX:GCTimeRatio

-XX:GCTimeRatio参数的值则应当是一个大于 0小于100的整数,也就是垃圾收集时间占总时间的比率,相当于吞
吐量的倒数。
例如:把此参数设置为19, 那允许的最大垃圾收集时占用总时间的5% (即1/(1+19)), 默认值为99,即允许最大1%
(即1/(1+99))的垃圾收集时间
由于与吞吐量关系密切,ParallelScavenge是“吞吐量优先垃圾回收器”。

-XX:+UseAdaptiveSizePolicy

-XX:+UseAdaptiveSizePolicy (默认开启)。这是一个开关参数, 当这个参数被激活之后,就不需要人工指定新生
代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRatio)、 晋升老年代对象大小(-
XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些
参数以提供最合适的停顿时间或者最大的吞吐量。

其他参数

-XX:SurvivorRatio 设置伊甸园空间大小与幸存者空间大小之间的比率。默认情况下,此选项设置为8
-XX:PreTenureSizeThreshold 大对象到底多大,大于这个值的参数直接在老年代分配
-XX:MaxTenuringThreshold升代年龄,最大值15, 并行(吞吐量)收集器的默认值为15,而CMS收集器的默认值
为6。
-XX:+ParallelGCThreads 并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同

CMS常用参数

开启参数

-XX:+UseConcMarkSweepGC 启用CMS垃圾回收器

其他参数

-XX:+ParallelGCThreads 并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
-XX:CMSInitiatingOccupancyFraction 使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发
生SerialOld卡顿,应该调小,(频繁CMS回收)
-XX:+UseCMSCompactAtFullCollection 在FGC时进行压缩
-XX:CMSFullGCsBeforeCompaction 多少次FGC之后进行压缩
-XX:+CMSClassUnloadingEnabled 使用并发标记扫描(CMS)垃圾收集器时,启用类卸载。默认情况下启用此选
项。
-XX:CMSInitiatingPermOccupancyFraction 达到什么比例时进行Perm回收,JDK 8中不推荐使用此选项,不能替
代。
-XX:GCTimeRatio 设置GC时间占用程序运行时间的百分比(不推荐使用)
-XX:MaxGCPauseMillis 停顿时间,是一个建议时间,GC会尝试用各种手段达到这个时间,比如减小年轻代

G1常用参数

开启参数

-XX:+UseG1GC 启用CMS垃圾收集器

其他参数

-XX:MaxGCPauseMillis 设置最大GC暂停时间的目标(以毫秒为单位)。这是一个软目标,并且JVM将尽最大的努
力(G1会尝试调整Young区的块数来)来实现它。默认情况下,没有最大暂停时间值。
-XX:GCPauseIntervalMillis GC的间隔时间
-XX:+G1HeapRegionSize 分区大小,建议逐渐增大该值,1 2 4 8 16 32。随着size增加,垃圾的存活时间更长,
GC间隔更长,但每次GC的时间也会更长-XX:G1NewSizePercent 新生代最小比例,默认为5%
-XX:G1MaxNewSizePercent 新生代最大比例,默认为60%
-XX:GCTimeRatioGC 时间建议比例,G1会根据这个值调整堆空间
-XX:ConcGCThreads 线程数量
-XX:InitiatingHeapOccupancyPercent 启动G1的堆空间占用比例,根据整个堆的占用而触发并发GC周期

优化建议
-XX:+UseG1GC -XX:G1HeapRegionSize=16m

这几个参数也是至关重要的,这是选用了G1垃圾回收器来做分代回收,对新生代和老年代都是用G1来回收。这里
把G1的region大小设置为了16m,如果机器内存比较多,所以region大小可以调大一些给到16m,不然用2m的 region, 会导致region数量过多。

-XX:G1ReservePercent=25

这个参数是说,在G1管理的老年代里预留25%的空闲内存,保证新生代对象晋升到老年代的时候有足够空间,避免
老年代内存都满了,新生代有对象要进入老年代没有充足内存了。默认值是10%,略微偏少,高并发应用可以调大
了一些

-XX:initiatingHeapOccupancyPercent= 30

这个参数是说,当堆内存的使用率达到30%之后就会自动启动G1的并发垃圾回收,开始尝试回收一些垃圾对象。默
认值是45%,高并发应用可以调低了一些,也就是提高了GC的频率,但是避免了垃圾对象过多,一次垃圾回收耗
时过长的问题

ZGC常用参数

开启参数

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC 启用ZGC垃圾收集器
-XX:ZCollectionInterval:ZGC发生的最小时间间隔,单位秒。
-XX:ZAllocationSpikeTolerance:ZGC触发自适应算法的修正系数,默认2,数值越大,越早的触发ZGC。
-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive:是否启用主动回收,默认开启,这里的配置表示关闭。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM垃圾回收Java虚拟机的一个重要功能,它的知识体系包括以下内容: 1. 垃圾回收算法:垃圾回收算法是指垃圾回收采用的垃圾回收策略。常见垃圾回收算法包括标记-清除、复制、标记-压缩和分代等。 2. 垃圾回收垃圾回收JVM的一个组成部分,它负责执行垃圾回收算法,并回收Java对象的内存空间。常见垃圾回收包括Serial、Parallel、CMS、G1等。 3. 对象存活判定:垃圾回收需要判断哪些Java对象是可以回收的,哪些是必须保留的。存活对象可以通过引用计数、可达性分析等方式判断。 4. 垃圾回收的过程:垃圾回收的过程包括标记、清除、整理等阶段。标记阶段是找到存活对象的过程,清除阶段是回收无用对象的过程,整理阶段是将存活对象移动到一块连续的内存区域中。 5. 垃圾回收的性能优化垃圾回收的性能优化包括分代、增量、并发、预处理等技术。分代是指将Java对象分为年轻代和老年代,以便针对不同的对象有针对性地进行垃圾回收。 6. 垃圾回收的调优和监控:垃圾回收的调优和监控可以通过调整堆大小、设置垃圾回收类型、调整垃圾回收的参数等方式实现。 JVM垃圾回收Java虚拟机的一个重要功能,掌握其知识体系可以帮助程序员更好地理解Java程序的内存模型和垃圾回收机制,从而编写出高效、可靠的Java程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值