Featured image of post JVM_04_JVM参数总结

JVM_04_JVM参数总结

🌏Java工程师 JVM 🎯 这篇文章用于记录 JVM_04_JVM参数总结 旨在掌握最常用的JVM参数配置

🎄重要参数概览

  • -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

Licensed under CC BY-NC-SA 4.0