JVM常用参数分类详解

java -server -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal Benchmark(JAVA文件名)
所有XX参数的默认值,能够用一个相关的参数,-XX:+PrintFlagsInitial  。 用 -XX:+PrintFlagsInitial, 只是展示了第三列为“=”的数据
java -server -XX:+PrintFlagsInitial 
这个参数非常有用: -XX:+PrintCommandLineFlags。这个参数让JVM打印出那些已经被用户或者JVM设置过的详细的XX参数的名称和值
java -server -XX:+PrintCommandLineFlags


-Xms and -Xmx
这个不多说了,大家都应该知道


-XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath 堆溢出错误
-XX:OnOutOfMemoryError  内存溢出错误
例子:java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/u01/heapdump.hprof -XX:OnOutOfMemoryError ="sh ~/cleanup.sh" 
堆溢出的时候的处理 内存溢出时的设置


-XX:PermSize and -XX:MaxPermSize
-XX:MaxPermSize 用于设置永久代大小的最大值,-XX:PermSize 用于设置永久代初始大小


-XX:InitialCodeCacheSize and -XX:ReservedCodeCacheSize
用来存储已编译方法生成的本地代码,会导致JVM速度急剧下降,直到问题解决


-XX:+UseCodeCacheFlushing
用来解决上面的问题避免当代码缓存被填满这个,但是这个参数不是根本的办法。


-XX:NewSize and -XX:MaxNewSize
这个看名称就知道是新生代大小的参数,一般不允许新生代比老年代还大,即新生代不超过堆内存的1/2。


-XX:NewRatio
可以设置新生代和老年代的相对大小 例如 -XX:NewRatio=3 指定老年代/新生代为3/1. 老年代占堆大小的 3/4 ,新生代占 1/4 .


-XX:SurvivorRatio
作用于新生代内部区域。-XX:SurvivorRatio 指定伊甸园区(Eden)与幸存区大小比例. 例如, -XX:SurvivorRatio=10 表示伊甸园区(Eden)是 幸存区To 大小的10倍(也是幸存区From的10倍).所以,伊甸园区(Eden)占新生代大小的10/12, 幸存区From和幸存区To 每个占新生代的1/12 .


-XX:+PrintTenuringDistribution  有用
参数 -XX:+PrintTenuringDistribution 指定JVM 在每次新生代GC时,输出幸存区中对象的年龄分布。


-XX:InitialTenuringThreshold, -XX:MaxTenuringThreshold and -XX:TargetSurvivorRatio
参数-XX:+PrintTenuringDistribution 输出中的部分值可以通过其它参数控制。通过 -XX:InitialTenuringThreshold 和 -XX:MaxTenuringThreshold 可以设定老年代阀值的初始值和最大值。另外,可以通过参数 -XX:TargetSurvivorRatio 设定幸存区的目标使用率.例如 , -XX:MaxTenuringThreshold=10 -XX:TargetSurvivorRatio=90 设定老年代阀值的上限为10,幸存区空间目标使用率为90%。


有多种方式,设置新生代行为,没有通用准则。我们必须清楚以下2中情况:
1 如果从年龄分布中发现,有很多对象的年龄持续增长,在到达老年代阀值之前。这表示 -XX:MaxTenuringThreshold 设置过大
2 如果 -XX:MaxTenuringThreshold 的值大于1,但是很多对象年龄从未大于1.应该看下幸存区的目标使用率。如果幸存区使用率从未到达,这表示对象都被GC回收,这正是我们想要的。 如果幸存区使用率经常达到,有些年龄超过1的对象被移动到老年代中。这种情况,可以尝试调整幸存区大小或目标使用率。


CMS收集器
-XX:+UseConcMarkSweepGC
该标志首先是激活CMS收集器
-XX:UseParNewGC
使用CMS收集器时,该标志激活年轻代使用多线程并行执行垃圾回收。
XX:+CMSConcurrentMTEnabled
当该标志被启用时,并发的CMS阶段将以多线程执行,默认开启
-XX:ConcGCThreads
标志-XX:ConcGCThreads=<value>,并行收集器中的-XX:ParallelGCThreads参数的值来计算出默认的并行CMS线程数。该公式是ConcGCThreads = (ParallelGCThreads + 3)/4。因此,对于CMS收集器, -XX:ParallelGCThreads标志不仅影响“stop-the-world”垃圾收集阶段,还影响并发阶段
-XX:CMSInitiatingOccupancyFraction
当堆满之后,并行收集器便开始进行垃圾收集


吞吐量收集器
-XX:+UseSerialGC
我们使用该标志来激活串行垃圾收集器,例如单线程面向吞吐量垃圾收集器。
-XX:+UseParallelGC
JVM使用多线程并行执行年轻代垃圾收集。
-XX:+UseParallelOldGC
激活年轻代并行垃圾收集,也激活了年老代并行垃圾收集。 
-XX:ParallelGCThreads
通过-XX:ParallelGCThreads=<value>我们可以指定并行垃圾收集的线程数量
-XX:GCTimeRatio
通过-XX:GCTimeRatio=<value>我们告诉JVM吞吐量要达到的目标值。例如,通过-XX:GCTimeRatio=9我们要求应用程序线程在整个执行时间中至少9/10是活动的(因此,GC线程占用其余1/10)。 基于运行时的测量,JVM将会尝试修改堆和GC设置以期达到目标吞吐量。 -XX:GCTimeRatio的默认值是99,
-XX:MaxGCPauseMillis
通过-XX:GCTimeRatio=<value>告诉JVM最大暂停时间的目标值(以毫秒为单位)。
-XX:-UseAdaptiveSizePolicy
提高垃圾收集配置的用户友好性,默认开启的。




-XX:+PrintGC(-verbose:gc)
开启了简单GC日志模式,为每一次新生代(young generation)的GC和每一次的Full GC打印一行信息
-XX:+PrintGCTimeStamps


示例:
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/u01/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/u01/heapdump.hprof
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值