HotSpot 虚拟机主要参数列表及启动参数

2024-05-26 20:18

本文主要是介绍HotSpot 虚拟机主要参数列表及启动参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官方 vmoptions

 

1. 参数使用方式

  1. -XX:+<option> 开启 option 参数
  2. -XX:-<option> 关闭 option 参数
  3. -XX:<option>=<value> 将option参数的值设置为 value

 

2. 虚拟机参数介绍

2.1. 内存管理参数

参数默认值使用介绍
DisableExplicitGC默认关闭忽略来自 System.gc() 方法触发的垃圾收集
ExplicitGCInvokesConcurrent默认关闭当收到 System.gc() 方法提交的垃圾收集申请时, 使用 CMS 收集器进行收集
UseSerialGCClient 模式的虚拟默认开启, 其他模式关闭虚拟机运行在 Client 模式下的默认值, 打开此开关后, 使用 Serial+Serial Old 的收集器组合进行内存回收
UseParNewGC默认关闭打开此开关后, 使用 ParNew+Serial Old 的收集器组合进行内存回收
UseConcMarkSweepGC默认关闭打开此开关后, 使用 parNew+CMS+Serial Old的收集器组合进行内存回收。 如果 CMS 收集器出现 Concurrent Mode Failure, 则 Serial Old 收集器将作为后备收集器
UseParallelGCServer 模式的虚拟机默认开启, 其他模式关闭虚拟机运行在 Server 模式下的默认值, 打开此开关后, 使用 Parallel Scavenge + Serial Old 的收集器组合进行内存回收
UseParallelOldGC默认关闭打开此开关后, 使用 Parallel Scavenge + Parallel Old 的收集器组合进行内存回收
SurvivorRatio默认为8新生代中 Eden 区域和 Survivor 区域的容量比值
PretenureSizeThreshold无默认值直接晋升到老年代的对象大小, 设置这个参数后, 大于这个参数的对象将直接在老年代分配
MaxTenuringThreshold默认值为15晋升到老年代的对象年龄。 每个对象在坚持过一次 Minor GC 后, 年龄就增加1, 当超过这个参数值时就进入老年代
UseAdaptiveSizePolicy默认开启动态调整 Java 堆中各个区域的大小及进入老年代的年龄
HandlePromotionFailureJDK1.5及之前版本默认关闭, JDK1.6默认开启是否允许分配担保失败, 即老年代的剩余空间不足以应付新生代的整个 Eden 和 Survivor 区的所有对象都存活的极端情况
ParallelGCThreads小等于8个CPU时默认值为CPU的数量值, 大于8个时比CPU数量值小设置并行GC 时进行内存回收的线程数
GCTimeRatio默认值为99GC 时间占总时间的比率, 默认为99, 即允许 1% 的GC时间, 仅在使用 Parallel Scavenge 收集器时生效
MaxGCPauseMillis无默认值设置 GC 的最大停顿时间, 仅在使用 Parallel Scanvenge 收集器时生效
CMSInitiatingOccupancyFraction默认值为68设置 CMS 收集器在老年代空间被使用多少后触发垃圾收集, 仅在使用 CMS 收集器时生效
UseCMSCompactAtFullCollection默认开启设置 CMS 收集器在完成垃圾收集后是否要进行一次内存碎片整理, 仅在使用 CMS 收集器时生效
CMSFullGCsBeforeCompaction无默认值设置 CMS 在进行若干次垃圾收集后再启动一次内存碎片整理。 仅在使用 CMS 收集器时生效
ScavengeBeforeFullGC默认开启在 Full GC 发生之前触发一次 Minor GC
UseGCOverheadLimit默认开启禁止 GC 过程无限制的执行, 如果过于频繁, 就直接抛出 OOM 异常
UseTLABServer 模式默认开启优先在本地线程缓冲区中分配对象, 避免分配内存时的锁定过程
MaxHeapFreeRatio默认值为70当 Xmx 值比 Xms 值大时, 堆可以动态收缩和扩展, 这个参数控制当堆空闲大于指定比率时自动收缩
MinHeapFreeRatio默认值为40当 Xmx 值比 Xms 值大时, 堆可以动态收缩和扩展, 这个参数控制当堆空闲大于指定比率时自动扩展
MaxPermSize大部分情况下默认值为64M永久代的最大值

 

2.2. 调试参数

参数默认值使用介绍
HeapDumpOnOutMemoryError默认关闭在发生内存溢出异常时是否生成堆转储快照,关闭则不生成
OnOutOfMemoryError无默认值当虚拟机抛出内存溢出异常时, 执行指定的指令
OnError无默认值当虚拟机抛出 ERROR 异常时, 执行指定的指令
PrintClassHistogram默认关闭使用 [ctrl]-[break] 快捷键输出类统计状态, 相当于 jmap -histo 的功能
PrintConcurrentLocks默认关闭打印 J.U.C 中锁的状态
PrintCommandLineFlags默认关闭打印启动虚拟机时输入的非稳定参数
PrintCompilation默认关闭打印方法即时编译信息
PrintGC默认关闭打印 GC 信息
PrintGCDetails默认关闭打印 GC 详细信息
PrintGCTimeStamps默认关闭打印 GC 停顿耗时
PrintTenuringDistribution默认关闭打印 GC 后新生代各个年龄对象的大小
TraceClassLoading默认关闭打印类加载信息
TraceClassUnloading默认关闭打印类卸载信息
PrintInlining默认关闭打印方法的内联信息
PrintCFGToFile默认关闭将 CFG 图信息输出到文件, 只有 DEBUG 版虚拟机才支持此参数
PrintIdealGraphFile默认关闭将 Ideal 图信息输出到文件, 只有 DEBUG 版虚拟机才支持此参数
UnlockDiagnosticVMOptions默认关闭让虚拟机进入诊断模式, 一些参数(如 PrintAssembly) 需要在诊断模式中才能使用
PrintAssembly默认关闭打印即时编译后的二进制信息

 

2.3. 性能参数

参数默认值使用介绍
AggressiveOptsJDK1.6 默认开启, JDK1.5 默认关闭使用激进的优化特性, 这些特性一般是具备正面和负面双重影响的, 需要根据具体应用特点分析才能判定是否对性能有好处
UseLargePages默认开启如果可能, 使用大内存分页, 这项特性需要操作系统的支持
LargePageSizeInBytes默认为4M使用指定大小的内存分页, 这项特性需要操作系统的支持
StringCache默认开启是否使用字符串缓存, 开启则使用

 

2.4. 类型加载参数

参数默认值使用介绍
UseSplitVerifier默认开启使用依赖 StackMapTable 信息的类型检查代替数据流分析, 以加快字节码校验速度
FailOverToOldVerifier默认开启当类型校验失败时, 是否允许回到老的类型推导校验方式进行校验, 如果开启则允许
RelaxAccessControlCheck默认关闭在校验阶段放松对类型访问性的限制

 

2.5. 多线程相关参数

参数默认值使用介绍
UseSpinningJDK1.6默认开启, JDK1.5默认关闭开启自旋锁以避免线程频繁挂起和唤醒
PreBlockSpin默认值为10使用自旋锁时默认的自旋次数
UseThreadPriorities默认开启使用本地线程优先级
UseBiasedLocking默认开启是否使用偏向锁, 如果开启则使用
UseFastAccessorMethods默认开启当频繁反射使用某个方法时, 生成字节码来加快反射的执行速度

 

2.6. 即时编译参数

参数默认值使用介绍
CompileThresholdClient模式下默认值为1500, Server模式下为10000触发方法即时编译的阈值
OnStackReplacePercentageClient模式下默认值为933, Server模式下为140OSR 比率, 它是 OSR 即时编译阈值计算公式的一个参数, 用于代替 BackEdgeThreshold参数控制回边计算器的实际溢出阈值
ReservedCodeCacheSize大部分情况下默认值为32M即时编译器编译的代码缓存的最大值

 

2.7 辅助信息

参数使用介绍输出
-XX:+PrintGC输出形式: [GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps
-XX:+PrintGC:PrintGCTimeStamps可与-XX:+PrintGC -XX:+PrintGCDetails混合使用 输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationStoppedTime打印垃圾回收期间程序暂停的时间.可与上面混合使用输出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,程序未中断的执行时间.可与上面混合使用输出形式:Application time: 0.5291524 seconds
-XX:+PrintHeapAtGC打印GC前后的详细堆栈信息
-Xloggc:filename把相关日志信息记录到文件以便分析. 与上面几个配合使用
-XX:+PrintClassHistogramgarbage collects before printing the histogram.
-XX:+PrintTLAB查看TLAB空间的使用情况
XX:+PrintTenuringDistribution查看每次minor GC后新的存活周期的阈值Desired survivor size 1048576 bytes, new threshold 7 (max 15) new threshold 7即标识新的存活周期的阈值为7。

 

3. JVM参数使用

# 当抛出 OOM 时进行 HeapDump, 会在项目根目录下生成 java_pidXXX.hprof 文件
java -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError -jar demo.jar# 当抛出 OOM 时进行 HeapDump, 会在 /home 下生成 answer.hprof 文件
java -Xms10m -Xmx10m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/answer.hprof -jar demo.jar# 打印 GC 详细信息
java -XX:+PrintGCDetails -jar demo.jar# 设置了系统默认时区[user.timezone], ZoneId.systemDefault() 
nohup java -server -Xms1024M -Xmx1024M -Duser.timezone=GMT+08 -XX:+HeapDumpOnOutOfMemoryError -Xloggc:./jvm/gc.log -XX:HeapDumpPath=./jvm/answer.hprof -XX:+PrintGCDetails -XX:ErrorFile=./jvm/bsf-error.log -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -jar demo-1.0-SNAPSHOT.jar &# -XX:+TraceClassLoading   加载类的详细信息(输出类是从哪个文件加载进来的)# %p变量表示当前jvm的pid,用%t表示jvm的启动时间戳. eg: -Xloggc:./logs/gc-%t.log
-Xms1024M -Xmx1024M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -Xloggc:./gc/app_`date +%Y%m%d`.log -XX:HeapDumpPath=./gc/app-dump_`date +%Y%m%d`.hprof -XX:ErrorFile=./gc/app-error_`date +%Y%m%d`.log -Duser.timezone=GMT+08 -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
# 速记法
#	Xms: memory size: 初始堆大小
#	Xmx: memory max: 最大堆大小
#	Xmn: memory new: 设置新生代的内存大小
#	Xss: stack size: 每个线程的堆栈的大小

 

4. JVM的Client模式与Server模式

概述

JVM有两种运行模式Server与Client。两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。

当前是Client or Server?

使用 Java -version命令就能显示出当前虚拟机处于哪种模式。

# Server VM
$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

模式配置文件

  • 32位虚拟机: ${JAVA_HOME}/jre/lib/i386/jvm.cfg
  • 64位虚拟机: ${JAVA_HOME}/jre/lib/amd64/jvm.cfg

模式切换

如果要切换启动模式,首先要确认JDK支持哪一种或两种模式。查看JAVA_HOME/jre/bin目录下是否存在client或server目录。32位的JDK一般都支持server和client两种模式。64位的虚拟机好像只支持server模式,没有client目录
切换模式只需要将client和server的声明语句互换位置即可

这篇关于HotSpot 虚拟机主要参数列表及启动参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005482

相关文章

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

4B参数秒杀GPT-3.5:MiniCPM 3.0惊艳登场!

​ 面壁智能 在 AI 的世界里,总有那么几个时刻让人惊叹不已。面壁智能推出的 MiniCPM 3.0,这个仅有4B参数的"小钢炮",正在以惊人的实力挑战着 GPT-3.5 这个曾经的AI巨人。 MiniCPM 3.0 MiniCPM 3.0 MiniCPM 3.0 目前的主要功能有: 长上下文功能:原生支持 32k 上下文长度,性能完美。我们引入了

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给