常用JVM参数
网上有很详细的关于各种JVM参数说明,本篇只记录很常用的几个参数,为了方便以后自己查阅
1、JVM三种参数类型
- 标准参数。如 -version、-help
- X参数。如 -Xms、-Xmx
- XX参数。如-XX:+PrintGC
2、XX参数数值类型
- 布尔类型。如-XX:+PrintGCDetails,其中 + 和 - 分别表示开启/关闭某个属性,PrintGCDetails表示打印GC详情
- KV设值类型。如-XX:NewSize=256M,设置年轻代空间大小为256M
3、常用参数
X参数:
X其它参数:
- -Xloggc:/usr/local/gc_%t_%p.log:将gc信息打印到指定的文件中,通过时间戳生成文件名
XX参数:
- -XX:NewSize:设置年轻代最小空间大小
- -XX:MaxNewSize:设置年轻代最大空间大小
- -XX:PermSize:设置永久代最小空间大小
- -XX:MaxPermSize:设置永久代最大空间大小
- -XX:NewRatio:设置年轻代和老年代的比值。默认值-XX:NewRatio=2,表示年轻代与老年代比值为1:2,年轻代占整个堆大小的1/3
- -XX:SurvivorRatio:设置年轻代中Eden区Survivor区的容量比值。默认值-XX:SurvivorRatio=8,表示Eden : Survivor0 : Survivor1 = 8 : 1 : 1
- -XX:-OmitStackTraceInFastThrow:关闭(省略异常栈从而快速抛出),默认开启。如果想将所有异常信息都抛出,建议关闭。
- -XX:+HeapDumpOnOutOfMemoryError:表示当JVM发生OOM时,自动生成DUMP文件。
- -XX:HeapDumpPath=/usr/local/dump:dump文件路径或者名称。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof
- -XX:MaxRAMPercentage=80.0:限制jvm进程使用的最大内存为可用系统内存的百分比,80.0表示显示为80%。该参数一般用于容器内的jvm
4、GC日志
在设置JVM参数的时候,可以设置GC打印日志参数:-XX:+PrintGCDetails。下面GC输出日志信息:
日志含义如下:
GC:表示进行了一次Minor GC,即从年轻代空间(包括 Eden 和 Survivor 区域)回收内存
Allocation Failure:在年轻代中没有足够的空间能够存储新的数据
Full GC (Ergonomics):表示进行了一次Full GC,即清理整个堆空间(包含年轻代和老年代)
PSYoungGen: 1024K->1024K(1536K):垃圾回收器是Paralle Scavenge,年轻代区GC前->GC后该区域已使用量,后面的1536表示该区域总量
ParOldGen: 4032K->4032K(4096K):老年代区,GC前->GC后该区域已使用量,后面的4096表示该区域总量
5056K->5056K(5632K):GC前 -> GC后Java堆的使用量,后面的5632表示Java堆总量
Metaspace: 3117K->3117K(1056768K):JDK8中取消了永久代,新增了一个叫元空间(Metaspace)的区域,对应的还是JVM规范中的方法区(主要存放一些class和元数据的信息),该数据表示该区GC前后使用量
0.0214352 secs:暂停STW 时间,即GC的时间
Times: user=0.02 sys=0.01, real=0.02 secs:更为详细的时间占比统计
参考地址:
http://www.yayihouse.com/yayishuwu/chapter/1615
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了