JVM参数笔记

135 阅读5分钟

-Xms:Java堆内存的大小

-Xmx:Java堆内存的最大大小 通常 Xms Xmx设置为一样大小 限定堆内存的总大小

-Xmn:Java堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小了

-XX:PermSize:永久代大小 jdk1.8以后版本:-XX:MetaspaceSize

-XX:MaxPermSize:永久代最大大小 通常设置为一样大小 jdk1.8以后版本:-XX:MaxMetaspaceSize

-Xss:每个线程的栈内存大小

-XX:MaxTenuringThreshold 默认15岁,用来指定对象具体多少岁可以进入老年代

-XX:PretenureSizeThreshold 将值设置为字节数,比如“1048576”字节,就是1MB。意思就是如果你要创建一个大于这个大小的对象,那就直接把这个大对象放到老年代里去。

-XX:-HandlePromotionfailure 设置之后会先判断老年代的平均空间是否能够放下MinorGC之后的对象大小。否则直接Full GC ,JDK1.6之后废弃掉了,默认判断老年代空间大于新生代所有对象之和,或者大于Minor GC升入老年代的对象的平均大小。

-XX:SurvivorRatio=8 默认是说Eden区比例为80%,也可以降低Eden区的比例,给两块Survivor区更多的内存空间,然后让每次MinorGC后的对象进入Survivor区中,可以避免动态年龄判断规则直接把他们升入老年代。-XX:SurvivorRatio=3,这样Survivor(2个)与Eden区的大小比值 2:3,这样可以被整除,总共5份,每份200m

-XX:+UseParNewGC 加入这个选项,JVM启动之后对新生代进行垃圾回收,就是ParNew垃圾回收器了。默认给自己设置的垃圾回收线程的数量就是跟CPU的核数是一样的。

-XX:ParallelGCThreads 通过这个参数可以设置线程的数量,建议一般不要随意动这个参数。

-XX:CMSInitiatingOccupancyFraction 设置老年代占用多少比例的时候触发CMS垃圾回收,JDK1.6里面的默认值是92%

-XX:+UseCMSInitiatingOccupancyOnly 与上边参数配合,只用上边设定的值,否则会动态调整。

-XX:+UseCMSCompactAtFullCollection CMS的参数默认就打开的,意思是在Full GC之后再次进行“Stop the World”,停止工作线程,然后进行碎片整理,就是把存活对象都挪到一起,空出来大片连续内存空间,避免内存碎片。

-XX:CMSFullGCsBeforeCompation 设置经过多少次Full GC之后进行一次内存碎片整理,

-XX:+UseG1GC 指定使用G1垃圾回收器。此时会自动使用堆大小除以2048确定Region的大小

-XX:G1HeapRegionSize 手动指定Region的大小。

-XX:G1NewSizePercent 设置新生代初始占比,其实维持这个默认值即可,默认值5% 。新生代最多不会超过60%,也可以通过下边参数设置-XX:G1MaxNewSizePercent

-XX:MaxGCPauseMills 设定GC停顿时间,默认值是200ms 也就是G1执行GC的时候可以让系统停顿多长时间。

-XX:InitiatingHeapOccupancyPercent 默认值45% G1参数,如果老年代占据了堆内存45%的时候,就会触发新生代+老年代一起回收的混合回收阶段。

-XX:G1MixedGCCountTarget G1参数,在一次混合回收过程中,最后一个阶段执行几次混合回收,默认值是8次。

-XX:G1HeapWastePercent 默认值5% 在混合回收的时候,对Region的回收都是基于复制算法,将Region中的存活对象复制到其它Region,然后把这个REgion的垃圾全部清理掉,一旦空出来的Region达到堆内存的5%,就立即停止混合回收。

-XX:G1MixedGCLiveThresholdPercent 默认值85%,意思是确定要回收的Region的时候,必须是存活对象低于85%的对象才可以回收。


-XX:InitialHeapSize 初始堆大小

-XX:MaxHeapSize 最大堆大小

-XX:NewSize 初始新生代大小

-XX:MaxNewSize 最大新生代大小

-XX:+PrintGCDetails 打印详细的GC日志

-XX:+PrintGCTimeStamps 打印出来每次GC的时间

-Xloggc:gc.log 设置将gc日志写入一个文件

--------优化Full GC性能参数--------

-XX:+CMSParallelInitialMarkEnabled :在cms垃圾回收器的初始标记阶段开启多线程并发执行,可以减少“stop the world”的时间

-XX:+CMSScavengeBeforeRemark 在cms重新标记之前,先尽量执行一次YouongGC,先回收掉一些对象,在重新标记阶段就能少扫描一些对象,提升重新标记阶段的性能。


“-XX:TraceClassLoading -XX:TraceClassUnloading” 追踪类加载和类卸载的情况,他会通过日志打印出来jvm中加载了哪些类,卸载了哪些类。

-XX:SoftRefLRUPolicyMSPerMB=0 这个参数设置大一些即可,千万别让一些新手同学设置为0,可以设置个1000,2000,3000,或者5000毫秒,都可以。影响jvm自动创建的一些软引用对象的回收问题,详见软引用部分。

-XX:+DisableExplicitGC 禁止显示执行GC,不允许你通过代码来执行GC 。即调用System.gc(),平时开发的时候也不要随便使用System.gc()去随便触发GC 。否则有可能压力过大的情况下导致每秒钟都会触发Full GC,而此时各个区域的内存占用情况都比较正常。

-XX:+HeapDumpOnOutOfMemoryError OOM的时候自动dump出来一份内存快照

-XX:HeapDumpPath=/dumps/ 把上边的内存快照放到这里