JVM参数设置、分析

JVM参数的含义
参数名称含义默认值备注
-Xms初始堆大小物理内存的1/64(小于1GB)默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM会增大堆直到-Xmx的最大限制
-Xmx最大堆大小物理内存的1/4(小于1GB)默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制
-Xmn年轻代大小注意:此处的大小是指eden区+survivor0区+survivor1区。与jmap -heap中显示的New gen是不同的。
整个堆大小=年轻代大小+老年代大小+永久代大小。
增大年轻代后,将会减小老年代大小,此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
-XX:NewSize设置年轻代大小(初始值及最大值)
-XX:MaxNewSize年轻代最大值
-XX:PermSize设置永久代(Perm gen)初始值物理内存的1/64
-XX:MaxPermSize设置持久代最大值物理内存的1/4
-Xss每个线程的堆栈大小一般默认为215K~1024KJDK5.0之后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多线程,但操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
一般小的应用,如果栈不是很深,应该128K是够用的,大的应用建议使用256k,这个选项对性能影响比较大,需要严格测试
-XX:ThreadStackSize等价于-Xss-XX:ThreadStackSize = 0,表示使用默认512K~1024K;-XX:ThreadStackSize != 0,表示自定义的
-XX:NewRatio年轻代(包括eden和两个survivor区)与老年代的比值(除去持久代)-XX:NewRatio=4表示年轻代与老年代所占比重为1:4,年轻代占整个堆栈的1/5
Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置
-XX:SurvivorRartioEden区与Survivor区大小的比值设置为8,则两个Survivor区和一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
-XX:LargePageSizeInBytes单个内存页的大小,不能设置过大,会影响Perm的大小
-XX:+UseFastAccessorMethods原始类型get、set方法的快速优化,对于JVM来说是冗余代码,jvm将进行优化
-XX:+DisableExplictGC关闭System.gc()这个需要严格的测试
-XX:MaxTenuringThreshold设置年轻代垃圾最大年龄默认15如果设置为0,则年轻代对象不经过Survivor区,直接进入老年代,对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加年轻代被回收的概率
该参数只有在Serial GC时才有效
对象经过15次Young GC才会进入老年代
-XX:+AggressiveOpts加快编译
-XX:+UseBiasedLocking锁机制的性能改善
-Xnoclassgc禁用垃圾回收
-XX:SoftRefLRUPolicyMSPerMB每兆堆空间中软引用对象(SoftReference)的存活时间1s
-XX:PertenureSizeThreshold对象超过多大直接在老年代分配0单位字节新生代采用Parallel Scavenge GC时无效
另一种直接在老年代分配的情况是大的数组对象,且数组中无外部引用对象
-XX:TLABWasteTargetPercentTLAB占eden区的百分比1%
-XX:+CollectGen0FirstFullGCs=是否先Young GCfalse
并行收集相关参数
参数名称含义默认值备注
-XX:+UseParallelGC选择垃圾收集器为并行收集器。此配置仅对 年轻代有效。可以同时并行对个垃圾收集线程,但此时用户线程必须停止
-XX:+UseParNewGC设置年轻代为并行收集可与CMS收集同时使用
JDK5.0以上,JVM会根据系统配置自行设置
-XX:ParallelGCThreads并行收集器的线程数此值最好配置与处理器署名相等,同样适用于CMS
-XX:+UseParallelOldGC设置老年代垃圾收集方式为并行收集JDK6出现的参数选项
-XX:MaxGCPauseMillis每次年轻代垃圾回收 的最长时间(最大暂停时间)如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值
-XX:+UseAdaptiveSizePolicy自动选择年轻代区大小和相应的Survivor区比例设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开
-XX:GCTimeRatio设置垃圾回收时间占程序运行时间的百分比公式1/(1+n),假设-XX:GCTimeRatio=19,则垃圾收集时间为1/(1+19),默认值为99,即1%的时间用于垃圾收集
-XX:+ScavengeBeforeFullGCFull GC前调用Young GCtrue
CMS相关参数
参数名称含义默认值备注
-XX:+UseConcMarkSweepGC使用CMS垃圾回收器CMS为基于标记清除算法实现的多线程老年代垃圾回收器。CMS为响应时间优先的垃圾回收器,适合于应用服务器
-XX:+AggressiveHeapjava堆最佳化设置设置这个参数使长时间运行过的任务使用密集的内存分配。默认这个选项时关闭的,也就是堆不是最佳化
-XX:CMSFullGCsBeforeCompaction在上一次CMS并发GC执行后,还要执行多少次Full GC才会做压缩默认是0在默认配置下每次CMS GC顶不住了而要转入Full GC的时候都会做压缩
由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率较低。此值设置运行多少次GC以后对内存空间进行压缩整理
-XX:+CMSParallelRemarkEnabled降低标记停顿
-XX:+UseCMSCompactAtFullCollection在Full GC的时候,对老年代压缩CMS是不会移动内存的,因此这个非常容易产生碎片,导致内存不够用,内存的压缩这个时候就会被启用。可能会影响性能,但是可以消除碎片
-XX:+UseCMSInitinatingOccupancyOnly使用手动定义初始化定义开始CMS收集禁止hostspot自行触发CMS GC
-XX:CMSInitatingOccupancyFraction使用cms作为垃圾回收,使用多少后开始CMS收集92为了保证不出现promotion failed错误,该值的设置需要满足以下公式:CMSInitiatingOccupancyFraction <=((Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)))/(Xmx-Xmn)*100
promotion failed产生的原因可能有两种,第一个是年轻代没有足够的空间,年轻代的对象还不应该被移动到老年代,但年轻代又有很多对象需要放入存储空间;第二个是老年代没有足够空间接纳来自年轻代的对象
-XX:CMSInitiaingPermOccupancyFraction设置Perm Gen使用达到多少比率时触发92
-XX:+CMSIncrementailMode设置为增量模式用于单CPU情况
-XX:+CMSClassUnloadingEnable当使用CMS垃圾收集器时,允许类卸载,这个选项模式是开启的禁止类卸载,可以使用-XX:-CMSClassUnloadingEnabled
-XX:CMSExpAvgFactor指定垃圾收集消耗的时间百分比默认25%
辅助信息
参数名称含义默认值备注
-XX:+PrintGC打印GC信息
-XX:+PrintGCDetails打印GC详细信息
-XX:+PrintGCTimeStamps打印GC时间戳
-XX:+PrintGC:PrintGCTimeStamps-XX:+PrintGC与-XX:+PrintGCTimeStamps混合使用
-XX:+PrintGCApplicationStoppedTime打印垃圾回收期间程序暂停时间,可与上面几个参数混合使用输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,程序未中断的执行时间,可与上面混合使用输出形式:Application time: 0.5291524 seconds
-XX:PrintHeapAtGC打印GC前后的详细堆栈信息
-Xloggc:filename将GC信息输出到文件,带时间戳,可与上面配合使用如:-Xloggc:E:\gc.txt,JDK11已过期,新版本使用-Xlog:gc:gc.txt代替
-XX:PrintClassHistogram在垃圾回收之前打印出实例的数量以及空间大小
-XX:+UseTLAB使用TLABTLAB的全称是Thread Local Allocation Buffer,即线程本地分配缓存区。JVM使用TLAB来避免多线程冲突,在给对象分配内存时,每个线程使用自己的TLAB,这样可以避免线程同步,提高对象的分配效率
-XX:+TLABSize设置TLAB大小
-XX:+TLABRefillWasteFraction设置维护进入TLAB空间的单个对象的大小64表示使用约为1/64的TLAB空间作为refill_waste,默认情况下,TLAB和refill_waste都会在运行时不断调整的,使系统的运行状态达到最优。如果想要禁用自动调整TLAB的大小,可以使用-XX:-ResizeTLAB禁用ResizeTLAB,并使用-XX:TLABSize手工指定一个TLAB的大小
-XX:TLABWasteTargetPercent设置TLAB空间所占用Eden空间的百分比大小1
-XX:PrintTLAB查看TLAB空间的使用情况
-XX:ResizeTLAB自动调整TLABRefillWasteFraction阈值
-XX:+PrintTenuringDistribution用于显示每次minor GC(年轻代GC)时Survivor区中各个年临段的对象的大小
-XX:InitialTenuringThreshold年轻代对象转换为老年代对象最小年龄值默认值为7对象经过一次Minor GC后,如果没有被回收,年龄就加1,超过这个值,对象就会进入老年代
-XX:MaxTenuringThreshold年轻代对象转换为老年代对象最大年龄值默认值为15
-XX:ConcGCThreads并发GC的线程数量默认值根据CPU的数量而定

官方参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值