0 配置基础
JVM参数类型:
标准参数(-):所有的 JVM 实现都必须实现这些参数的功能,而且向后兼容
非标准参数(-X):默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容
非Stable参数(-XX):此类参数各个 JVM 实现会有所不同,将来可能会随时取消,需要慎重使用
布尔型参数选项:
-XX:+参数名称 // 打开配置
-XX:- 参数名称 // 关闭配置
数字型参数选项:
-XX:=设定。
字符行参数选项通过-XX:=设定,通常用来指定一个文件,路径,或者一个命令列表
1 配置文档
Trino 387 JVM 配置文档:Deploying Trino — Trino 387 Documentation
文档默认 JVM 配置如下:
-server // 以 server 模式启动 JVM
-Xmx16G // 最大堆大小
-XX:-UseBiasedLocking // 关闭偏向锁(默认打开)
-XX:+UseG1GC // 开启G1垃圾收集器
-XX:G1HeapRegionSize=32M // 设置 G1 region 的大小,1-32M,2048个
-XX:+ExplicitGCInvokesConcurrent // 开启并行FULL GC,可提高FULL GC效率
-XX:+ExitOnOutOfMemoryError // JVM将在抛出OutOfMemoryError时立即退出
-XX:+HeapDumpOnOutOfMemoryError // 发生oom自动生成堆栈信息便于后续分析原因
-XX:-OmitStackTraceInFastThrow // 关闭省略异常栈信息快速抛出异常
-XX:ReservedCodeCacheSize=512M // 保留代码占用的内存容量
-XX:PerMethodRecompilationCutoff=10000 // 设置大数值,避免触发Deoptimization导致查询变慢
-XX:PerBytecodeRecompilationCutoff=10000 // 设置大数值,避免触发Deoptimization导致查询变慢
-Djdk.attach.allowAttachSelf=true // 在 JDK 9 或更高版本中使用内存柱状图
-Djdk.nio.maxCachedBufferSize=2000000 // 防止OOM,限制缓存的 buffer 大小,默认为 Long.MAX_VALUE
-XX:+UnlockDiagnosticVMOptions // 开启诊断 JVM 配置
-XX:+UseAESCTRIntrinsics // 启用 AES/CTR 的内部函数,需先开启 UnlockDiagnosticVMOptions
2 配置详解
2.1 -server参数
JVM有两种运行模式:Server模式与Client模式。
两种模式的区别:
- Client模式启动速度较快,Server模式启动较慢
- 启动进入稳定期长期运行之后,Server模式的程序运行速度比Client要快很多
Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机,所以Server启动慢,但稳定后速度比Client远远要快
参考资料
1、JVM原理(一)JVM通识、JVM架构_八阿哥和菲克斯的博客-CSDN博客_jvm
2、正确配置JVM参数-附JVM参数详解_beauty-coding的博客-CSDN博客_jvm参数配置
3、JVM调优之——禁用偏向锁优化_fastkdm的博客-CSDN博客_关闭偏向锁
4、java use g1_深入理解 Java G1 垃圾收集器_诚毅学长的博客-CSDN博客
5、JVM参数调优详解_微Fan’的博客-CSDN博客_jvm参数调优
7、Presto System load过高问题XX:PerMethodRecompilationCutoff
8、Djdk.attach.allowAttachSelf=true 详解
9、深入浅出 Java FileChannel 的堆外内存使用maxCachedBufferSize_喵辉喵啊喵的博客-CSDN博客