(后边学习到新的会进行补充)
-XX:MaxTenuringThreshold
:对象降职老年代的阈值,默认值15(并不是相对的,如果在Survivor空间中雷同年龄所有对象大小的综合大于Survivor空间的一半,年龄大于或等于该年龄的对象就能够间接进入老年代)-XX:MaxPermSize~~
:永恒代大小-XX:MaxDirectMemorySize
:间接内存大小,默认与-Xmx统一-XX:+/-UseTLAB
:是否开启TLAB-XX:MaxMetaspace
=256m:元数据区,默认为无限大,受Java过程所应用的内存影响-XX:FieldsAllocationStyle
:对象内存散布中的实例数据区域的存储程序-XX:CompactFields=true
:因为HotSpot在调配对象实例数据时雷同大小的字段总是被调配到一起存储,在满足这个条件下因而父类中定义的变量会呈现在子类之前,开启此参数那子类中较小的变量也容许插入父类变量的空隙中,以节俭一点空间-XX:+UseCondCardMark
:是否开启JVM卡表条件判断,尽量减少伪共享带来的性能损耗-XX:MaxGCPauseMillis
(毫秒 >0):管制最大垃圾收集进展工夫,默认值200-XX:ParallelGCThreads=NUM
:垃圾收集并行执行线程数,默认为CPU的核数-XX:+UseAdaptiveSizePolicy
:是否开启自适应调节策略,JDK8默认开启-XX:SurvivorRatio
:Eden和Survivor区的比例-XX:PretenureSizeThreshold
:降职老年代对象大小,超过指定大小间接在老年代调配,默认为0-XX:+PrintGCDetails
:打印GC具体日志-XX:+PrintHeapAtGC
:打印每次GC前后堆、办法区可用容量变动-XX:+PrintGCApplicationConcurrentTime
:查看GC过程中用户线程并发工夫-XX:+PrintGCApplicationStoppedTime
:查看GC过程中用户线程进展工夫-XX:+PrintFlagsFinal
:查看JVM参数的默认值
垃圾收集器相干:
CMS相干见文章
–XX:+UseConMarkSweepGC
:开启应用CMS垃圾收集器,新生代应用ParNew 老年代应用CMS-XX:CMSInitiatingOccupancyFraction=70
:CMS垃圾收集器的回收阈值(老年代),JDK5及之前默认为68%,JDK6之后调整为92%。-XX:+UseCMSInitiatingOccupancyOnly
:与XX:CMSInitiatingOccupancyFraction配合应用,只是用设定的回收阈值(下面指定的70%),如果不指定,JVM仅在第一次应用设定值,后续则主动调整。-XX:+/-CMSPrecleaningEnabled
:开启/敞开CMS并发预清理。
-XX:CMSScheduleRemarkEdenSizeThreshold
:CMS可勾销并发预处理阶段开启条件–>默认为2M-XX:CMSMaxAbortablePrecleanLoops
:CMS可勾销并发预处理阶段勾销条件–>循环次数,默认为0-XX:CMSMaxAbortablePrecleanTime
:CMS可勾销并发预处理阶段勾销条件–>最长执行工夫,默认为5000毫秒-XX:CMSScheduleRemarkEdenPenetration
:CMS可勾销并发预处理阶段勾销条件–>Eden区的内存使用率大于此配置后勾销,默认值为50-XX:+UseCMSCompactAtFullCollection
:在进行Full GC之前进行一次内存整理,默认开启-XX:CMSFullGCBeforeCompaction=N
:当执行过N此无碎片整顿Full GC后,下次Full GC之前进行一次内存整理,默认为0,示意每次都进内存整理-XX:+CMSScavengeBeforeRemark
:强制在CMS最终/重标记阶段前进行一次Minor GC,避免可中断预清理始终没有等到年老代Minor GC而导致年老代对象太多而导致最终标记工夫过长,导致进展工夫过长-XX:+CMSPermGenSweepingEnabled
:开启CMS对永恒代(元空间)的垃圾收集,默认不开启
-XX:+CMSClassUnloadingEnabled
:与-XX:+CMSPermGenSweepingEnabled
配合应用,收集永恒代时卸载不必的类
G1l垃圾收集器-XX:G1HeapRegionSize=8
:设置G1垃圾收集器Region大小,取值范畴应为1MB ~ 32MB,且应为2的N次幂。-XX:G1NewSizePercent
:新生代最小值,默认值5%-XX:G1MaxNewSizePercent
:新生代最大值,默认值60%-XX:ParallelGCThreads
:STW期间,并行GC线程数-XX:ConcGCThreads=n
:并发标记期间,GC线程数-XX:InitiatingHeapOccupancyPercent
:设置触发标记周期的 Java 堆占用率阈值。默认值是45%。这里的java堆占比指的是nonyoungcapacitybytes,包含old+humongous-XX:G1HeapWastePercent
:G1进行回收的最小内存,默认是堆的5%,就是说不必要每次回收就把所有的垃圾的解决完,可遗留大量的下次解决,这样也升高了单次GC耗费的工夫-XX:+GCTimeRatio
:计算花在Java利用线程上和花在GC线程上工夫比率,默认是9,跟新生代内存的分配比例一样。参数的次要目标是让用户能够管制花在利用上的工夫,G1的计算公式是100/(1+GCTimeRatio)。如果参数设置为9,则最多花10%的工夫在GC下面,Parallel GC默认值是99,示意1%的工夫被用在GC下面,这是因为Parallel GC贯通整个GC,而G1则依据Region来进行划分,不须要全局性扫描整个内存-XX:G1ReserverPercent
:G1为调配担保预留的空间比例,默认10%,也就是老年代会预留10%的空间来给新生代对象降职,如果常常因为新生代对象降职失败导致FullGC,能够适当调大此参数(调大此参数同时意味着老年代可应用的空间缩小)
堆内存参数
-Xmx
:指定最大堆内存,如-Xmx49。但这只是限度了堆内存Heap局部的最大值,不包含堆外内存和栈内存-Xms
:指定堆内存的初始化大小,最小值,如Xms4g。而且指定的内存大小,并不是操作系统理论调配的初始值,而是GC先布局好,利用到才调配。专用服务需上须要放弃-Xmx
和-Xm
s保持一致,否则利用刚启动可能就会有好几个FullGC。当两者配置不同时,堆内存扩容可能导致性能抖动。-Xmn
:等价于-XX:NewSize
,Young区的大小,应用G1垃圾收集器不应该设置该选项,在其余的某些业务场景能够设置,官网倡议设置为-Xmx的1/2~1/4-XX:MaxPerSize
:这是jdk1.7前应用的,JDK8后Meta空间默认无限大,此参数有效-XX:MetaspeaceSize
:Java8默认不限度Meta空间,个别不容许设置该选项-XX:MaxDirectMemorySize
:零碎可食用的最大堆外内存,这个参数跟-Dsun.nio.MaxDirectMemorySize=1m等价-Xss
:设置每个线程栈的字节数,影响栈的深度
剖析诊断相干
-XX:+-HeapDumpOnOutOfMemoryError
:当OOMError产生时,主动Dump堆内存-XX:HeapDumpPath
:与HeapDumpOnOutOfMemoryError搭配应用,指定内存溢出时Dump文件的目录,默认为启动Java程序的工作目录下-XX:OnError
:产生致命谬误时执行的脚本-XX:OnOutOfMemoryError
:抛出OOMError谬误是执行的脚本-XX:ErrorFile=fileName
:致命谬误的日志文件名,绝对路径或者相对路径-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1506
:开启近程调试
运行模式
-server
:设置JVM应用server模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,实用于生产环境。在具备64位JDK环境下将默认启用此模式,而疏忽-client参数-clinet
:JDK1.7之前在32位的X86机器上的默认值是-client选项。设置JVM应用client模式,特点是启动速度较快,但运行时性能和内存管理效率不高,通常用于客户端程序或者本地PC机开发和调试。-Xint
:在解释模式下运行,-Xint标记会强制JVM解释所有的字节码,这会升高运行速度,通常低10倍或者更多-Xcomp
:-Xcomp参数与-Xint正好相同,JVM会在第一次应用时把所有的字节码编译成本地代码,从而带来最大水平的优化。[留神预热]-Xmixed
:-Xmixed是混合模式,将解释模式和编译模式进行混合应用,有JVM本人决定,这是JVM的默认模式,也是举荐模式,应用java -version能够看到 mixed mode等信息;
编译优化
-XX:+DoEscapeAnalysis
:开启逃逸剖析-XX:+EliminateAllocations
:开启标量替换-XX:+EliminateLocks
:开启同步打消
相干文章见:编译优化技术
参考资料:
- 官网最全JVM参数清单:https://www.oracle.com/java/t…
本文由博客一文多发平台 OpenWrite 公布!
发表回复