JVM基本参数设置

  # JVM基本参数设置

1.通用配置

  1. -XX:PretenureSizeThreshold=1m:大对象直接分配在老年代,这个参数只对 Serial 和ParNew两个收集器有效
  2. -XX:MaxTenuringThreshold=15:动态年龄超过15次,进入老年代。等于 0 的话,就直接入老年代
  3. -Xms20m:设置堆内存的初始大小,堆大小的最小值
  4. -Xmx20m:设置堆内存的最大大小
  5. -Xmn10m:设置新生代内存大小
  6. -XX:G1HeapRegionSize:G1收集器每个Region的大小
  7. -XX:SurvivorRatio=8:设置一个eden和一个suvivor的比值
  8. -XX:+HeapDumpOnOutOfMemoryError:打印 OOM 日志
  9. -XX:HeapDumpPath=路径:OOM 日志输出位置(可通过JVisualVM 工具进行分析)
  10. -XX:+HeapDumpBeforeFullGC:Full GC 之前打印 dump 文件
  11. -XX:+HeapDumpAfterFullGC:Full GC 之后打印 dump 文件

2.G1配置

  1. -XX:+UseG1GC:使用G1垃圾回收器
  2. -XX:MaxGCPauseMillis=N:设置最大停顿时间
  3. -XX:G1HeapRegionSize=N:设置每个region的大小,范围在1-32m,是2的幂次方
  4. -XX:ParallelGCThreads=8:设置G1 GC回收线程数
  5. -XX:ConcGCThreads:并发标记阶段,设置gc 工作线程数量
  6. -XX:InitiatingHeapOccupancyPercent:默认是45%,这个占比跟并发周期的启动相关,当空间占比达到这个值时,会启动并发周期。如果经常出现FullGC,可以调低该值,尽早的回收可以减少FullGC的触发,但如果过低,则并发阶段会更加频繁,降低应用的吞吐。
  7. .-XX:G1MixedGCLiveThresholdPercent:在混合垃圾收集周期中的old region的占用阈值,默认值为85,意思是如果一个Old Region中的存活对象大于Region大小的85%的话,就不去回收这个Region,不加入Cset。否则回收时将85%的存活对象放入另一个Region中,得不偿失。
  8. -XX:G1MixedGCCountTarget = 8:设置在标记周期完成之后混合收集的次数,默认是8次。如果单次回收CSet + 年轻代时间远远超过最大停顿时间,则会触发多次mixed GC每次回收部分CSet,以达到最大停顿时间目的
  9. -XX:G1HeapWastePercent=5:设置浪费的堆内存百分比,当可回收百分比小于浪费百分比时,JVM就不会启动混合垃圾收。也就是并发标记后,并不一定会触发mixed GC。

3.CMS配置

  1. -XX:+UseConcMarkSweepGC:使用 cms 垃圾回收器
  2. -XX:CMSInitiatingOccupancyFraction=68:cms 收集器触发的阈值,当老年代占比达到 68% 时,触发 CMS 垃圾回收
  3. -XX:-CMSPrecleaningEnabled:关闭并发预清理阶段,默认启用;关闭之后将直接进入 remark 阶段
  4. -XX:CMSMaxAbortablePrecleanLoops=20:可中断预清理循环次数,达到这个次数就会退出循环
  5. -XX:CMSMaxAbortablePrecleanTime=5 :可中断预清理循环时间,超过这个时间就会退出循环
  6. -XX:CMSScheduleRemarkEdenPenetration=50:可中断预清理循环阈值,当 Eden 区内存使用率达到了这个阈值,会退出循环,默认是 50%
  7. -XX:CMSFullGCsBeforeCompaction=0 在上一次 CMS 并发GC执行过后,到底还要再执行多少次full GC才会做整理。默认是0,也就是在默认配置下每次CMS GC顶不住了而要转入full GC的时候都会做整理

4.Paraller配置

  1. -XX:+UseAdaptiveSizePolicy:自适应
  2. -XX:MaxGCPauseMillis=100 :控制最大垃圾收集停顿时间的参数。
  3. -XX:GCTimeRatio=19 :直接设置吞吐量大小的参数。
  4. -XX:+UseParallelOldGC:使用parallel scavenge + parallel old

5.GC 日志

  1. -Xloggc:../log/gc.log:gc日志输出位置
  2. -XX:NumberOfGCLogFiles=10:生成gc文件的数量,循环重复使用,gc.log.5.current 代表当前正在写入的日志文件
  3. -XX:+PrintGCDetails:打印GC日志详细信息
  4. -XX:+PrintGCDateStamps:输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
  5. -XX:+PrintGCApplicationStoppedTime:gc之前,打印应用程序线程 STW 花费的时间
  6. -XX:+SafepointTimeout:开启安全点停顿超时时间设置
  7. -XX:SafepointTimeoutDelay=2000:设置安全点停顿超时时间阈值
  8. -XX:+PrintSafepointStatistics:打印在安全点停顿超时的线程信息
  9. -XX:+PrintTenuringDistribution:JVM 在每次新生代GC时,打印出幸存区中对象的年龄分布(对 -XX:+UseParallelGC无效)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值