JVM常用命令参数
(1)-Xms20M
表示设置JVM启动内存的最小值为20M
(2)-Xmx20M
表示设置JVM启动内存的最大值为20M,将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。
(3)-verbose:gc
表示输出虚拟机中GC的详细情况
(4)-Xss128k
表示可以设置虚拟机栈的大小为128k s:stack
(5)-Xoss128k
表示设置本地方法栈的大小为128k。不过HotSpot并不区分虚拟机栈和本地方法栈(HotSpot此参数无效)
(6)-XX:PermSize=10M
表示JVM初始分配的永久代的容量
(7)-XX:MaxPermSize=10M
表示JVM允许分配的永久代的最大容量,大部分情况下这个参数默认为64M
(8)-Xnoclassgc
表示关闭JVM对类的垃圾回收
(9)-XX:+TraceClassLoading
表示查看类的加载信息
(10)-XX:+TraceClassUnLoading
表示查看类的卸载信息
(11)-XX:NewRatio=4
表示设置年轻代:老年代的大小比值为4:1
(12)-XX:SurvivorRatio=8
表示设置2个Survivor区:1个Eden区的大小比值为2:8,这个参数默认为8
(13)-Xmn20M
表示设置年轻代的大小为20M
(14)-XX:+HeapDumpOnOutOfMemoryError
表示可以让虚拟机在出现内存溢出异常时Dump出当前的堆内存转储快照
(15)-XX:+UseG1GC
表示让JVM使用G1垃圾收集器
(16)-XX:+PrintGCDetails
表示在控制台上打印出GC具体细节
(17)-XX:+PrintGC
表示在控制台上打印出GC信息
(18)-XX:PretenureSizeThreshold=3145728
表示对象大于3145728(3M)时直接进入老年代分配,这里只能以字节作为单位
(19)-XX:MaxTenuringThreshold=1
表示对象年龄大于1,自动进入老年代
(20)-XX:CompileThreshold=1000
表示一个方法被调用1000次之后,会被认为是热点代码,并触发即时编译
(21)-XX:+PrintHeapAtGC
表示可以看到每次GC前后堆内存布局
(22)-XX:+PrintTLAB
表示可以看到TLAB的使用情况
(23)-XX:+UseSpining
开启自旋锁
(24)-XX:PreBlockSpin
更改自旋锁的自旋次数,使用这个参数必须先开启自旋锁
-server # 以服务器模式启动JVM,编译较多的热点代码增加服务区启动时间
-Xms3g # 设置JVM初始化时堆内存的初始大小
-Xmx3g # 设置JVM堆内存的最大大小
-Xmn1g # 指定JVM年轻代大小(优先级高于比例设置,与-XX:OldSize互斥)
-XX:OldSize=512m # 指定老年代初始大小(与-Xmn互斥)
-XX:NewRatio=2 # 老年代占整个堆的份数,默认是占2份(如果设置为8,则表示老年代占8份),一般比例设置与值设置不同时使用
-Xss256k # 每个线程的栈大小(最小136K),更小的值可以创建更多线程但更高栈溢出风险,更大的值可以减少栈溢出的风险但会消耗更多内存,从而限制可以创建的线程数量
-XX:SurvivorRatio=8 # 设置Eden区和Survivor区的比例
-XX:MaxTenuringThreshold=15 # 设置对象从年轻代晋升到老年代的年龄阈值,范围[1-16]
-XX:MetaspaceSize=512m # 设置元空间初始大小(存放1类的元数据信息,2运行时常量池)
-XX:MaxMetaspaceSize=1g # 设置元空间最大大小
-XX:PermSize=128m # 永久代的初始大小(注意作用同元空间,但相对于元空间有很多局限性,现在不用了)
-XX:ReservedCodeCacheSize=512m # 控制 JIT 编译器用于存储编译后热点代码的缓存大小
-XX:+HeapDumpOnOutOfMemoryError # 当内存溢出时输出堆栈信息
-XX:HeapDumpPath=D:\code\jt\fwq # 指定堆栈信息保存的路径
-XX:+UseG1GC # 指定垃圾收集器为G1
-XX:+UseParallelGC # 并行垃圾收集器
-XX:+UseConcMarkSweepGC # 启用并发标记清除(CMS)垃圾回收器
-XX:InitiatingHeapOccupancyPercent=45 # 触发并发 GC 的堆占用比例(当堆的使用达到 45% 时,可能会触发并发垃圾收集)
-XX:MaxGCPauseMillis=15000 # 指定垃圾回收造成的最大STW时间(太小了会导致垃圾清理不过来导致OOM)
-XX:ConcGCThreads=8 # 设置并发垃圾收集线程的数量,通常设置为与CPU核心数相同或略少,用于并发阶段的垃圾收集任务,如标记和清理。
-XX:ParallelGCThreads=8 # 设置垃圾收集的并行线程数,用于并行阶段的垃圾收集任务,如年轻代和老年代的垃圾收集
-XX:-UseBiasedLocking # 禁用偏向锁,可以减少GC发生safepoint事件的频率,在一定程度上可以降低STW的产生。偏向锁>轻量级锁>重量级锁。(锁升级或者膨胀过程CAS操作不断增加,增加CPU开销)
-XX:-UseCompressedOops # 禁用压缩对象指针(注意,使用前最好清楚这个参数对程序带来的有利于不利的影响是什么)
-XX:+UseAdaptiveSizePolicy # 启用自适应调优可以让JVM根据运行时的情况自动调整GC设置
-Xlog:gc*,safepoint:file=gc.log:tags,time,uptime,level # 开启GC日志记录(JDK9及之后使用,更强大)
-XX:+DisableExplicitGC # 禁用在代码里显示调用的System.gc()的执行
-XX:+UseLargePages # 大页面可以减少内存分页的开销,提升GC性能(windows10操作系统不可用)
# 开启控制台输出程序频繁进入安全点的原因分析日志
-XX:+PrintSafepointStatistics # 打印每次安全点操作的详细统计信息
-XX:PrintSafepointStatisticsCount=1 # 进入几次安全点打印1次统计日志
-XX:+PrintGCApplicationStoppedTime # 记录每次 GC 操作导致的应用线程暂停时间,以分析 GC 对应用性能的影响。
# 开启GC日志(JDK8及之前才能用)
-XX:+PrintGCDetails # 打印GC信息
-XX:+PrintGCDateStamps # 为每个GC事件添加时间戳
-Xloggc:logs/gc.log # 将gc日志输出到文件
参考文档:https://blog.csdn.net/flyingnet/article/details/81542858