java_JVM
Java8以后的JVM
1、JVM调优和参数配置,查看JVM系统默认值;
1.1、JVM参数类型:
标配参数
-version
-help
-showversion
X参数(了解)
-Xint 解释执行
-Xcomp 第一次使用就编译成本地代码
-Xmixed 混合模式(先编译再执行)
XX参数
boolean类型
公式:-XX:+/- 属性值
+:开启
-:关闭
属性名:UseSerialGC(是否使用串行垃圾回收器)
属性名:PrintGCDetails(是否打印GC收集细节)
以PrintGCDetails属性为例(是否打印GC收集细节):
更改当前运行的JVM环境如下:
KV设值类型
公式:-XX:属性名key=属性值value
jinfo举例,如何查看当前运行程序的配置
公式:jinfo -flag 属性名 进程编号
题外话(坑题)
经典参数:
-Xms 等价于 -XX:InitialHeapSize(初始化堆内存)
-Xmx 等价于 -XX:MaxHeapSize(最大堆内存)
java -XX:+PrintFlagsInitial -version(主要查看JVM初始默认值)
java -XX:+PrintFlagsFinal -version(主要查看JVM修改以后的)
java -XX:+PrintCommandLineFlags -version(查看默认的垃圾回收器)
2、JVM常用参数
-Xms 等价于 -XX:InitialHeapSize 初始内存(堆)大小,默认为物理内存的 1/64;
-Xmx 等价于 -XX:MaxHeapSize 最大分配内存(堆)大小,默认为物理内存的 1/4;
-Xss 等价于 -XX:ThreadStackSize 设置单个线程栈空间的大小,默认为 512K-1024K(若查出来的ThreadStackSize = 0,则代表用的是系统出场默认值);
-Xmn 堆中新生代初始及最大大小,如果需要进一步细化,初始化大小用-XX:NewSize,最大大小用-XX:MaxNewSize;
-XX:MetaspaceSize:设置元空间大小(java7称为老年代,java8元空间取代老年代,元空间的本质和老年代类似,都是对JVM规范中方法区的实现,与老年代最大的区别在于元空间不在虚拟机中,
而是使用的本地内存,因此默认情况下,元空间的大小仅受本地内存限制);
-XX:+PrintGCDetails:是否开启打印GC回收详细日志信息;
开启后演示:
GC收集日志信息详解:
FullGC收集日志信息详解:
-XX:SurvivorRatio
设置新生代中eden和s0、s1空间的比例;
默认为 XX:SurvivorRatio=8,Eden:s0:s1 = 8:1:1;
SurvivorRatio的值就是设置eden区比例占多少,s0、s1相同;
-XX:NewRatio
配置新生代与老年代在堆结构中的占比;
默认:-XX:NewRatio=2,新生代占比1,老年代占比2,新生代占整个堆的 1/3;
若配置 -XX:NewRatio=4,则新生代占比1,老年代占比4,新生代占整个堆的 1/5;
-XX:MaxTenuringThreshold
设置垃圾最大年龄(JAVA8后 值在 0-15之间)
-XX:MaxDirectMemorySize
JVM堆内存大小可以通过-Xmx来设置,同样的direct ByteBuffer可以通过-XX:MaxDirectMemorySize来设置,
此参数的含义是当Direct ByteBuffer分配的堆外内存到达指定大小后,即触发Full GC。
注意该值是有上限的,默认是64M,最大为sun.misc.VM.maxDirectMemory(),在程序中中可以获得-XX:MaxDirectMemorySize的设置的值。
3、JVM参数调优
内:使用VM options设置JVM参数,再进行打包;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?