美文网首页
JVM参数设置

JVM参数设置

作者: 宏势 | 来源:发表于2022-12-02 18:07 被阅读0次

一、JVM参数类型

java 命令支持多种参数选项,可以分为三种类别:1.标准选项参数 2.非标准选项参数(-X开头) 3.高级选项参数(-XX开头)

1.标准选项参数

  • Java虚拟机(JVM)的所有实现都保证支持标准选项。它们用于常见操作,例如检查JRE版本、设置类路径、启用详细输出等.
  • 例子:-version,-help,-Dproperty=value(设置系统属性值-Dfoo="foo bar")

2.非标准选项参数

  • 非标准选项是特定于Java HotSpot虚拟机的通用选项,因此不能保证所有JVM实现都支持这些选项,并且可能会发生更改。这些选项以-X开头.
  • 例子:-Xms1g -Xmx2g -Xss64m

3.高级选项参数

  • 高级选项是针对开发人员,用于调整Java HotSpot虚拟机操作的特定区域,这些区域通常具有特定的系统要求,并且可能需要对系统配置参数进行特权访问。它们也不能保证得到所有JVM实现的支持,并且可能会发生变化。高级选项以-XX开头。可以再细分为:1.运行时选项参数 2.JIT 编译选项 3.服务信息选项 4.垃圾回收选项。-XX:+-XX:- 分别表示开启/关闭某个属性。

  • 1.运行时选项参数 :-XX:MaxDirectMemorySize=256m

  • 2.JIT 编译选项 : 该参数类型比较少用到

  • 3.服务信息选项:-XX:+HeapDumpOnOutOfMemoryError,-XX:HeapDumpPath=/logs/

  • 4.垃圾回收选项: -XX:MaxMetaspaceSize=256M,-XX:+UseG1GC

二、配置建议

  • Xms 与Xmx 设置成一样大,可以减轻伸缩堆大小带来的压力,一般是FullGC后已占堆大小的3-4倍
  • 优先使用JVM的默认配置,因为随着JVM的不断发展演进,会越来越智能化,比如JDK1.8默认垃圾额回收器默认启动UseAdaptiveSizePolicy,自动选择年轻代区大小和相应的Survivor区比例
  • 配置GC日志打印,方便快速排错

参考例子:

  • JDK 1.8
-Xms2G -Xmx2G -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -Xloggc:/logs/myGC.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/
  • JDK1.9以上(包含JDK1.9)
-Xms2G -Xmx2G -Xlog:gc*=info,gc+heap=debug,gc+age=trace,safepoint:/logs/gc_%t.log:time,level,tags:filecount=5,filesize=20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/

从上面例子对比,可以看出,JDK1.8及更早版本,设置gc日志显得比较麻烦,JDK1.9开始,统一使用一个Xlog 参数来设置gc日志打印。详细对比参考官网:https://docs.oracle.com/en/java/java-components/enterprise-performance-pack/epp-user-guide/printing-jvm-information.html

-Xlog

-Xlog是JDK1.9引入的日志服务,用于将JVM中的各种事件统一起来,以统一的形式对外输出

java -Xlog:help  //查看参数所有所有选项

格式如下:

-Xlog[:[selections][:[output][:[decorators][:output-options]]]]

详细参数选项说明:https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-BE93ABDC-999C-4CB5-A88B-1994AAAC74D5

三、常用设置大全

参数 含义 默认值 说明
-Xms 初始堆大小 物理内存的1/64
-Xmx 最大堆大小 物理内存的1/4
-Xss 每个线程栈的大小 在相同物理内存下,减小这个值能生成更多的线程,操作系统对一个进程内线程数有限制,等同于-XX:ThreadStackSize
-Xmn 新生代大小 -XX:NewSize设置新生代大小和 -XX:MaxNewSize 新生代最大值含义一致,推荐使用-Xmn
-XX:MaxMetaspaceSize 设置元空间最大值 默认值是-1 JDK1.8之前是永久代的概念,参数是-XX:MaxPermSize
-XX:MetaspaceSize 设置元空间初始值 默认值是21M JDK1.8之前是永久代的概念,参数是 -XX:PermSize
-XX:MaxDirectMemorySize 最大直接内存大小 -1 JDK1.8开始支持的参数
-XX:NewRatio 老年代与新生代的比值 默认值2 新生代(包括Eden和两个Survivor区)
-XX:SurvivorRatio Eden区与Survivor区的大小比值 默认值8 设置为8,则两个Survivor区与一个Eden区的比值为2:8
-XX:PretenureSizeThreshold 对象超过多大是直接在老年代分配 默认值0(先在新生代创建) 新生代采用Parallel Scavenge GC时无效
-XX:MaxTenuringThreshold 垃圾最大年龄 默认值15 如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代
-XX:PrintCommandLineFlags 启动的时候打印JVM参数 默认关闭
-XX:-UseBiasedLocking 不启动偏向锁 默认启用 JDK1.6开始支持偏向锁,默认启用
-XX:+AggressiveOpts 启动性能优化参数 默认关闭 优化功能参数是属于实验性功能,预计将在即将发布的版本中成为默认功能
-XX:+DisableExplicitGC 关闭System.gc() 默认启动
-Xnoclassgc 禁用类垃圾回收 默认关闭
-XX:ParallelGCThreads 并行收集器的线程数 此值最好配置与处理器数目相等
-XX:+UseAdaptiveSizePolicy 自动选择年轻代区大小和相应的Survivor区比例 UseParallelGC垃圾收集器默认启动了AdaptiveSizePolicy
-XX:MaxGCPauseMillis 垃圾回收的最长时间(最大暂停时间ms) 软目标,JVM尽力调整配置达到
-XX:GCTimeRatio 设置垃圾回收时间占程序运行时间的百分比 默认值99,即1% 公式为1/(1+n)

垃圾收集器

参数 含义 默认值 说明
-XX:+UseSerialGC 设置串行收集 年轻代和老年代都是串行垃圾收集
-XX:+UseParNewGC 设置年轻代为并行收集 可与CMS收集同时使用,默认老年代Serial Old
-XX:+UseConcMarkSweepGC 设置老年代CMS收集 默认新生代-XX:+UseParNewGC,JDK14已移除
-XX:+UseParallelGC 设置新生代Parallel Scavenge回收器 默认老年代使用Parallel Old收集器
-XX:+UseParallelOldGC 设置老年代Parallel Old收集器 默认新生代使用Parallel Scavenge
-XX:+UseG1GC 设置G1收集器 JDK1.9开始默认的垃圾收集器

GC日志打印配置

参数 含义 默认值 说明
-XX:+PrintGC 打印GC日志 默认关闭
-XX:+PrintGCDetails 打印GC详细日志 默认关闭
-XX:+PrintGCTimeStamps 打印GC详细日志 默认关闭
-XX:+PrintGCDateStamps 打印GC详细日志 默认关闭
-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间 默认关闭
-XX:+PrintHeapAtGC 打印GC前后的详细堆栈信息 默认关闭
-XX:+PrintTenuringDistribution 每次minor GC后新的存活周期的阈值 默认关闭
-Xloggc:filename 日志信息记录到指定文件
-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期间程序暂停的时间 默认关闭
-XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,程序未中断的执行时间 默认关闭
-XX:+PrintClassHistogram 打印类的信息 默认关闭

上述大部分参数在JDK1.9已移除,改用-Xlog

参数 含义 默认值 说明
-Xlog 统一GC日志打印配置参数 JDK1.9开始,取替JDK1.9之前繁多GC日志打印参数

详细官网参考:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html

相关文章

网友评论

      本文标题:JVM参数设置

      本文链接:https://www.haomeiwen.com/subject/wyidfdtx.html