jvm常用参数设置

参数分类

        标准参数 

                 以 - 开头所有的JVM实现都必须实现这些参数的功能,且向后兼容

                控制台 java -help 可以列出标准参数

        非标准参数 

                -X开头默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足

                且不保证向后兼容

                控制台 java -X 列出非标准参数

        非稳定参数

                以 -XX 开头此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用

                输出当前程序jvm参数

                ManagementFactory.getRuntimeMXBean().getInputArguments()

常用参数

        现在基本都是jdk1.8及以上,就不具体指定那个版本了,1.8及以上都能使用

内存相关参数:

参数含义默认值描述
-Xms

初始堆大小

也是最小值

系统内存1/64(<1G)

堆内存占用超过40%,自动增长,直到最大堆内存,

当堆内存空余超过70% 自动减少,知道最小堆内存

可通过 -XX:MaxHeapFreeRation 参数调整比例

Server端JVM最好将-Xms和-Xmx设为相同值

避免每次垃圾回收完成后JVM重新分配内存

本地操作一般默认就好

-Xmx最大堆内存系统内存1/4(<1G)

一般设置为老年代存活对象的3-4倍,即FullGC之后的

老年代内存占用的3-4倍,本地自己玩设置个2-4G左右

-Xmn年轻代堆大小默认堆内存1/3

eden+ 2survivor区总和(8:1:1),年轻代增大,

对应老年代会变小,慎重调整

sun官方推荐为堆大小的 3/8, 所以和默认差不太多

-Xss每个线程的堆栈大小默认1M

Java每个线程的堆栈大小。根据应用的

线程所需内存大小进行调整。在相同物理内存下

减小这个值能生成更多的线程。但是操作系统对一个

进程内的线程数还是有限制的,不能无限生成,

经验值在3000~5000左右。推荐默认(视情况定)

-XX:NewSize设置年轻代大小应该小于-Xms的值,一般-Xmn代替
-XX:MaxNewSize最大年轻代大小需要小于-Xmx的值,一般-Xmn代替
-XX:MetaspaceSize元空间初始大小20.75MB(64位jvm)1.8才有,1.8以下是永久代大小设置,不做描述
-XX:MaxMetaspacesSize元空间最大理论无限大一般和初始大小一致,常用200-300M
-XX:ThreadStackSize线程堆栈大小和 -Xss效果一样,推荐-Xss
-XX:NewRatio        年轻代与老年代比例

-XX:NewRatio=4 ,新生代老年代比例:1:4  则

新生代占堆空间1/5,一般不设置,与老年代比例

1:2

-XX:SurvivorRatio        eden与survivor比例

设置 8 两个s与eden比例2:8   一个s区则1:8(其他值不准确)

实测: 年轻代设置100M,下面是值的对比,和

想象中不一样(一般也不建议设置该参数)

-XX:MaxTenuringThreshold最大年龄15        

经历15次还没有被回收进入老年代,为0 直接进入老年代,参考:jvm误区--动态对象年龄判定 - 简书

一般不设置

-XX:PretenureSizeThreshold对象多大直接分配老年代0

默认值为0,即在旧一代中不直接创建任何对象

请谨慎使用此选项,因为它会降低性能而不是改进性能

-XX:TLABWasteTargetPercentTLAB占eden区得百分比默认:1%
-XX:+CollectGenOFirstFullGC是否先YoungGCfalse                

CMS相关参数 

参数含义默认值描述
-XX:+UseConcMarkSweepGC老年代采用CMS收集器收集falsetrue 开启CMS
-XX:+UseCMSCompactAtFullCollectionFullGC时压缩false对老年代进行压缩,可以消除碎片,但是可能会带来性能消耗(标记清除算法)
-XX:CMSFullGCsBeforeCompaction多少次后内存压缩CMS进行n次full gc后进行一次压缩。如果n=0,每次full gc后都会进行碎片压缩
-XX:CMSIncrementalMode增量模式false并发收集递增进行,周期性把cpu资源让给正在运行的应用
-XX:+CMSIncrementalPacing启用自动起搏false根据应用程序的行为自动调整每次执行的垃圾回收任务的数量
-XX:CMSIncrementalDutyCycleMin0每次增量回收垃圾,占总垃圾回收任务的最小比例
-XX:CMSIncrementalDutyCycle10每次增量回收垃圾,占总垃圾回收任务的比例
-XX:CMSInitiatingOccupancyFractio老年代多少百分比触发FullGC-1

如果CMSInitiatingOccupancyFraction在0~100之间,那么由CMSInitiatingOccupancyFraction决定。

否则由按 ((100 - MinHeapFreeRatio) + (double)( CMSTriggerRatio * MinHeapFreeRatio) / 100.0) / 100.0 决定

1.6后默认92%,参考-XX:CMSInitiatingOccupancyFraction_每天进步一点点的专栏-CSDN博客_cmsinitiatingoccupancyfraction

-XX:CMSMaxAbortablePrecleanTime5000在CMS的预清理阶段开始前,等待minor gc的最大时间

G1相关参数

参数含义默认值描述
-XX:+UseG1GC使用G1做为GC收集器1.8+在1.8+后默认使用,其在大内存情形下能够发挥更加卓越的性能(详细参考本人得垃圾回收器详解)
-XX:+PrintAdaptiveSizePolicy自动调节新生代老年代自适应策略,调节Young Old Size,一般G1不会设置新生代和老年代大小,而有G1根据停顿时间逐渐调整新生代和老年代的空间比例
-XX:G1ReservePercentG1为分配担保预留的空间比例10预留10%的内存空间,应对新生代的分配担保情形
-XX:InitiatingHeap
OccupancyPercent
启动并发GC时的堆内存占用百分比45G1用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比例。值为 0 则表示“一直执行GC循环)’. 默认值为 45 (例如, 全部的 45% 或者使用了45%).
-XX:G1HeapRegionSize  G1内堆内存区块大小(Xms + Xmx ) /2 / 2048,不大于32M,不小于1M,且为2的指数G1将堆内存默认均分为2048块,1M<region<32 M,当应用频繁分配大对象时,可以考虑调整这个阈值,因为G1的Humongous区域只能存放一个大对象,适当调整Region大小,尽量让其刚好超过大对象的两倍大小,这样就能充分利用Region的空间
-XX:GCTimeRatioGC时间占运行时间的比例G1为9,CMS为99GC时间占总时间的比例,默认值为99,即允许1%的GC时间。仅仅在Parallel Scavenge收集时有效,公式为1/(1+n)
-XX:G1HeapWastePercent触发Mixed GC的可回收空间百分比5%在全局并发标记结束之后,我们可以知道老年代regions中有多少空间要被回收,在每次YGC之后和再次发生Mixed GC之前,会检查垃圾占比是否达到此参数,只有达到了,下次才会发生Mixed GC
-XX:G1MixedGCLive
ThresholdPercent
会被MixGC的Region中存活对象占比85%老年代region中的存活对象的占比,只有小于此参数,才会被选入CSet(记忆集合)
-XX:G1MixedGCCountTarget8一次全局并发标记结束之后,最多执行Mixed GC的次数
-XX:G1NewSizePercent新生代占堆的最小比例5%
-XX:G1MaxNewSizePercent新生代占堆的最大比例60%
-XX:GCPauseIntervalMillis指定最短多长可以进行一次gc
-XX:G1OldCSetRegion
ThresholdPercent
Mixed GC每次回收Region的数量比例10%一次Mixed GC中能被选入CSet的最多old generation region数量比列
-XX:ParallelGCThreadsSTW期间,并行GC线程数
-XX:ConcGCThreads并发标记阶段,并行执行的线程数

调优或其他常用参数

参数含义默认值描述
-XX:+PrintGCGC时打印概览信息关闭[GC (Allocation Failure)  74613K->19143K(183296K), 0.0047467 secs]
-XX:HeapDumpPath堆内存快照到处路径指定HeapDump的文件路径或目录,使用前需开启HeapDumpOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError在OOM后导出堆内存快照默认关闭
-XX:OnError在Error时执行操作可配置相应命令,在Error时执行此命令,比如发送邮件
-XX:OnOutOfMemoryError在发生OOM时执行操作
-XX:+PrintCommandLineFlags打印jvm参数在程序运行前打印出用户手动设置或者JVM自动设置的XX选项
-XX:+PrintGCDetailsGC时打印详细信息关闭
-XX:+PrintGCTimeStamps打印GC用时关闭
-XX:+PrintGCApplicationStoppedTime打印GC时应用暂停时间关闭
-Xloggc:< filename>将GC相关日志记录到文件以便分析
-XX:GCLogFileSize8K使用前需开启-Xloggc,GC日志文件默认大小,当日志超过8K时需要被滚动存储
-XX:+UseGCLogFileRotation关闭开启GC日志文件的滚动存储功能
-XX:NumberOfGCLogFilesGC文件数量1GC日志滚动文件数量,超过时会删除最先创建的
-XX:+CITime关闭打印启动时花费在JIT 编译器时

一些常用或者需要了解得参数暂时记录到这儿,后续可能还会有新增得记录,方便日后学习和工作中使用

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值