常见的JVM参数
-XX:MaxTenuringThreshold :对象晋升老年代的阈值, 默认值15(并不是绝对的,如果在Survivor空间中相同年龄所有对象大小的综合大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代) <br /> -XX:MaxPermSize~~ :永久代大小<br /> -XX:MaxDirectMemorySize :直接内存大小, 默认与-Xmx一致 <br /> -XX:+/-UseTLAB :是否开启TLAB<br /> -XX:MaxMetaspace =256m:元数据区, 默认为无限大,受Java进程所使用的内存影响 <br /> -XX:FieldsAllocationStyle :对象内存分布中的实例数据区域的存储顺序<br /> -XX:CompactFields=true :由于HotSpot在分配对象实例数据时相同大小的字段总是被分配到一起存储,在满足这个条件下因此父类中定义的变量会出现在子类之前,开启此参数那子类中较小的变量也允许插入父类变量的空隙中,以节省一点空间<br /> -XX:+UseCondCardMark :是否开启JVM卡表条件判断,尽量减少伪共享带来的性能损耗<br /> -XX:MaxGCPauseMillis (毫秒 >0) :控制最大垃圾收集停顿时间, 默认值200 <br /> -XX:ParallelGCThreads=NUM :垃圾收集并行执行线程数,默认为CPU的核数<br /> -XX:+UseAdaptiveSizePolicy :是否开启自适应调节策略, JDK8默认开启 <br /> -XX:SurvivorRatio :Eden和Survivor区的比例<br /> -XX:PretenureSizeThreshold :晋升老年代对象大小,超过指定大小直接在老年代分配, 默认为0 <br /> -XX:+PrintGCDetails :打印GC详细日志<br /> -XX:+PrintHeapAtGC :打印每次GC前后堆、方法区可用容量变化<br /> -XX:+PrintGCApplicationConcurrentTime :查看GC过程中用户线程并发时间<br /> -XX:+PrintGCApplicationStoppedTime :查看GC过程中用户线程停顿时间<br /> -XX:+PrintFlagsFinal :查看JVM参数的默认值
<a name="nkixU"></a>
CMS相关见文章 <br />- XX:+UseConMarkSweepGC :开启使用CMS垃圾收集器,新生代使用ParNew 老年代使用CMS<br /> -XX:CMSInitiatingOccupancyFraction=70 :CMS垃圾收集器的回收阈值(老年代),JDK5及之前默认为68%,JDK6之后调整为92%。<br /> -XX:+UseCMSInitiatingOccupancyOnly :与XX:CMSInitiatingOccupancyFraction配合使用,只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整。<br /> -XX:+/-CMSPrecleaningEnabled :开启/关闭CMS并发预清理。<br />
<br /> -XX:CMSScheduleRemarkEdenSizeThreshold :CMS可取消并发预处理阶段开启条件-->默认为2M<br /> -XX:CMSMaxAbortablePrecleanLoops :CMS可取消并发预处理阶段取消条件-->循环次数, 默认为0 <br /> -XX:CMSMaxAbortablePrecleanTime :CMS可取消并发预处理阶段取消条件-->最长执行时间, 默认为5000毫秒 <br /> -XX:CMSScheduleRemarkEdenPenetration :CMS可取消并发预处理阶段取消条件-->Eden区的内存使用率大于此配置后取消, 默认值为50 <br /> -XX:+UseCMSCompactAtFullCollection :在进行Full GC之前进行一次内存整理, 默认开启 <br /> -XX:CMSFullGCBeforeCompaction=N :当执行过N此无碎片整理Full GC后,下次Full GC之前进行一次内存整理, 默认为0,表示每次都进内存整理 <br /> -XX:+CMSScavengeBeforeRemark :强制在CMS最终/重标记阶段前进行一次Minor GC, 防止可中断预清理一直没有等到年轻代Minor GC而导致年轻代对象太多而导致最终标记时间过长,导致停顿时间过长 <br /> -XX:+CMSPermGenSweepingEnabled :开启CMS对永久代(元空间)的垃圾收集, 默认不开启 <br />-XX: +CMSClassUnloadingEnabled :与-XX: +CMSPermGenSweepingEnabled 配合使用,收集永久代时卸载不用的类<br /> G1l垃圾收集器 <br /> -XX:G1HeapRegionSize=8 :设置G1垃圾收集器Region大小,取值范围应为1MB ~ 32MB,且应为2的N次幂。<br /> -XX:G1NewSizePercent :新生代最小值, 默认值5% <br /> -XX:G1MaxNewSizePercent :新生代最大值, 默认值60% <br /> -XX:ParallelGCThreads :STW期间,并行GC线程数<br /> -XX:ConcGCThreads=n :并发标记期间,GC线程数<br /> -XX:InitiatingHeapOccupancyPercent :设置触发标记周期的 Java 堆占用率阈值。默认值是45%。这里的java堆占比指的是nonyoungcapacitybytes,包括old+humongous<br /> -XX:G1HeapWastePercent :G1停止回收的最小内存,默认是堆的5%,就是说不必要每次回收就把所有的垃圾的处理完,可遗留少量的下次处理,这样也降低了单次GC消耗的时间<br /> -XX:+GCTimeRatio :计算花在Java应用线程上和花在GC线程上时间比率,默认是9,跟新生代内存的分配比例一样。 参数的主要目的是让用户可以控制花在应用上的时间,G1的计算公式是100/(1+GCTimeRatio)。 如果参数设置为9,则最多花10%的时间在GC上面,Parallel GC默认值是99,表示1%的时间被用在GC上面,这是因为Parallel GC贯穿整个GC,而G1则根据Region来进行划分,不需要全局性扫描整个内存<br /> -XX:G1ReserverPercent :G1为分配担保预留的空间比例, 默认10% ,也就是老年代会预留10%的空间来给新生代对象晋升,如果经常由于新生代对象晋升失败导致FullGC,可以适当调大此参数(调大此参数同时意味着老年代可使用的空间减少)
<a name="DvDjB"></a>
-XX:+-HeapDumpOnOutOfMemoryError :当OOMError产生时,自动Dump堆内存<br /> -XX:HeapDumpPath :与HeapDumpOnOutOfMemoryError搭配使用,指定内存溢出时Dump文件的目录, 默认为启动Java程序的工作目录下 <br /> -XX:OnError :发生致命错误时执行的脚本<br /> -XX:OnOutOfMemoryError :抛出OOMError错误是执行的脚本<br /> -XX:ErrorFile=fileName :致命错误的日志文件名,绝对路径或者相对路径<br /> -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1506 :开启远程调试<br /><br />
<a name="YJpQl"></a>
<a name="FxWab"></a>
-XX:+DoEscapeAnalysis :开启逃逸分析<br /> -XX:+EliminateAllocations :开启标量替换<br /> -XX:+EliminateLocks :开启同步消除<br />相关文章见: 编译优化技术 <br />
参考资料 :