🎄重要参数概览
-XX:+PrintFlagsInitial
查看所有的参数默认初始化值-XX:+PrintFlagsFinal
查看所有参数的最终值(可能存在修改,不再是初始值)-Xms
初始堆空间内存(默认系统物理内存的1/64)-Xmx
最大堆内存空间(默认为物理内存的1/4)-Xmn
设置新生代的大小(初始值及最大值)-XX:NewRatio
设置新生代与老年代的占比 默认1:2-XX:SurvivorRatio
设置新生代中Eden和S0/S1空间的比例-XX:MaxTenuringThreshold
设置新生代垃圾的最大年龄-XX:+PrintGCDetails
输出详细GC处理日志-XX:PrintGC
打印GC简要信息-XX:HandlePromotionFailture
是否设置空间分配担保
🎄堆内存相关
堆是Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。
🍭显式指定堆内存
–Xms
和-Xmx
-Xms
代表初始Java堆大小(memory start) 默认大小为:电脑物理内存 / 64。-Xmx
代表最大Java堆大小(memory maximum) 默认大小为:电脑物理内存 / 4。如果我们想要设置一个Java应用程序的初始堆大小为128MB,最大堆大小为1024MB,你可以在启动JVM时使用以下参数:
java -Xms128m -Xmx1024m -jar application.jar
- 建议将-Xms和-Xmx设置为相同的值。
🍭显式指定新生代内存
(Young Generation)
(1)通过-XX:NewSize
和-XX:MaxNewSize
指定 如果我们要为新生代分配最小 256m 的内存,最大 1024m 的内存我们的参数应该这样来写:
-XX:NewSize=256m
-XX:MaxNewSize=1024m
(2)通过-Xmn<young size>[unit]
指定新生代的大小 (一般不设置)
-Xmn256m
(3)通过 -XX:NewRatio=<int>
来设置老年代与新生代内存的比值
默认配置下,设置 -XX:NewRatio=2
,老年代的大小将是新生代的2倍。
-XX:NewRatio=2
(4)使用-XX:SurvivorRatio=n
配置Eden区和survivor区的大小比例 默认情况下为6:1:1
-XX:SurvivorRatio=8
🍭显式指定永久代/元空间
的大小
JDK 1.8 的时候,方法区(HotSpot 的永久代)被彻底移除,取而代之是元空间,元空间使用的是本地内存。
下面是一些常用参数:
-XX:MetaspaceSize=N #设置 Metaspace 的初始大小(是一个常见的误区 无论 -XX:MetaspaceSize 配置什么值,对于 64 位 JVM 来说,Metaspace 的初始容量都是 21807104(约 20.8m))
-XX:MaxMetaspaceSize=N #设置 Metaspace 的最大大小
🎄栈内存相关
-Xss1m
-Xss1024k
🎄垃圾收集相关
🍭 垃圾回收器相关
为了提高应用程序的稳定性,选择正确的垃圾收集算法
至关重要。
JVM 具有四种类型的 GC 实现:
- 串行垃圾收集器
- 并行垃圾收集器
- CMS 垃圾收集器
- G1 垃圾收集器
可以使用以下参数声明这些实现:
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParNewGC
-XX:+UseG1GC
🍭 GC日志记录相关
生产环境上,或者其他要测试 GC 问题的环境上,一定会配置上打印 GC 日志的参数,便于分析 GC 相关的问题。
############################# 必选 #############################
# 打印基本 GC 信息
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
# 打印对象分布
-XX:+PrintTenuringDistribution
# 打印堆数据
-XX:+PrintHeapAtGC
# 打印Reference处理信息
# 强引用/弱引用/软引用/虚引用/finalize 相关的方法
-XX:+PrintReferenceGC
# 打印STW时间
-XX:+PrintGCApplicationStoppedTime
# GC日志输出的文件路径
-Xloggc:/path/to/gc-%t.log
# 开启日志文件分割
-XX:+UseGCLogFileRotation
# 最多分割几个文件,超过之后从头文件开始写
-XX:NumberOfGCLogFiles=14
# 每个文件上限大小,超过就触发分割
-XX:GCLogFileSize=50M
############################# 可选 #############################
# 打印safepoint信息,进入 STW 阶段之前,需要要找到一个合适的 safepoint
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
🎄原文链接
https://javaguide.cn/java/jvm/jvm-parameters-intro.html#_4-%E5%A4%84%E7%90%86-oom