关于java:常见的JVM参数

2次阅读

共计 4060 个字符,预计需要花费 11 分钟才能阅读完成。

(后边学习到新的会进行补充)

-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 公布!

正文完
 0