java JDK17 jvm参数配置过程解读

 更新时间:2025年01月03日 14:50:22   作者:学亮编程手记  
文章提供了Java JDK 17中一些重要JVM参数的配置示例和解读,包括模块访问权限、堆内存设置、代码缓存、垃圾收集器(如ZGC)的配置以及日志记录等,旨在优化Java应用程序的性能和诊断能力

java JDK17 jvm参数配置

配置示例

--add-opens=java.base/java.lang=ALL-UNNAMED \
-Xms1500m -Xmx1500m \-XX:ReservedCodeCacheSize=256m \-XX:InitialCodeCacheSize=256m \ -XX:+UnlockExperimentalVMOptions \-XX:+UseZGC \-XX:ConcGCThreads=1 -XX:ParallelGCThreads=2 \-XX:ZCollectionInterval=30 -XX:ZAllocationSpikeTolerance=5 \-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive \-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m \-XX:+HeapDumpOnOutOfMemoryError \-XX:HeapDumpPath=/opt/errorDump.hprof

参数解读

这些JVM参数用于配置Java虚拟机(JVM)的行为,以优化性能、监控垃圾收集活动、管理内存分配,并启用一些实验性或诊断功能。

下面是对每个参数的详细解释:

--add-opens=java.base/java.lang=ALL-UNNAMED
  • 这个参数用于打开模块系统中java.base模块内java.lang包的访问权限,允许未命名模块(通常是那些没有声明属于任何模块的类路径上的类)访问这个包内的元素。
  • 这对于某些需要反射访问Java核心库内部细节的框架或工具是必要的。
-Xms1500m -Xmx1500m
  • 设置JVM的初始堆内存大小(-Xms)和最大堆内存大小(-Xmx)为1500MB。
  • 这有助于减少应用程序启动时的内存分配调整,并限制其占用的最大内存空间。
-XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=256m
  • 分别设置了代码缓存的初始大小和预留的最大大小为256MB。
  • 代码缓存用于存储JIT(Just-In-Time)编译后的本地代码,这两个设置确保了足够的空间用于即时编译,以提高运行效率。
-XX:+UnlockExperimentalVMOptions
  • 启用实验性JVM选项
  • 允许使用一些尚未稳定或默认不公开的特性
-XX:+UseZGC
  • 指定使用Z Garbage Collector(ZGC)
  • 这是一个可伸缩、低延迟的垃圾收集器,特别适合大规模的多核系统,旨在实现暂停时间不超过10毫秒的目标。
-XX:ConcGCThreads=1 -XX:ParallelGCThreads=2
  • 配置ZGC或其他并行GC的线程数。
  • ConcGCThreads=1指定了并发标记阶段使用的线程数,而ParallelGCThreads=2则指定了在并行回收阶段使用的线程数。
-XX:ZCollectionInterval=30 -XX:ZAllocationSpikeTolerance=5
  • ZGC特有的参数。
  • ZCollectionInterval设置触发垃圾收集周期的时间间隔(单位是秒),这里是每30秒检查一次是否需要进行垃圾回收。
  • ZAllocationSpikeTolerance控制内存分配速率突增的容忍度,值越高,JVM越晚响应突增的内存需求,以避免不必要的垃圾回收。
-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive
  • 前者解锁诊断性的VM选项,允许使用一些用于调试和诊断的特殊选项。
  • 后者禁用ZGC的主动回收模式,即不基于预测来提前执行垃圾回收。
-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m
  • 配置日志记录,包括安全点活动、类加载统计、年龄信息以及所有与GC相关的日志级别分别设置为trace和info。
  • 日志将被写入到/opt/gc-%t.log,其中%t会被当前时间戳替代,同时限制最多保留5个文件,每个文件最大50MB,并且包含时间、线程ID和标签信息。
-XX:+HeapDumpOnOutOfMemoryError
  • 当发生内存溢出错误(OutOfMemoryError)时
  • 自动创建堆转储文件,这对于后期分析问题原因非常有用
-XX:HeapDumpPath=/opt/errorDump.hprof
  • 指定当发生内存溢出时
  • 堆转储文件的保存路径为/opt/errorDump.hprof

整体而言:

这些配置旨在优化一个应用的内存管理、垃圾收集策略,以及提升在遇到内存问题时的诊断能力,特别是针对需要高性能、低延迟处理的应用场景。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 如何读取Excel格式xls、xlsx数据工具类

    Java 如何读取Excel格式xls、xlsx数据工具类

    这篇文章主要介绍了Java 如何读取Excel格式xls、xlsx数据工具类的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java基础篇之反射机制示例详解

    Java基础篇之反射机制示例详解

    反射是Java可以提供的一个灵活又强大的功能,使用Java反射,您可以知道这个类在运行时具有什么属性和方法,也可以修改属性,调用方法,创建类的实例,这篇文章主要给大家介绍了关于Java基础篇之反射机制的相关资料,需要的朋友可以参考下
    2021-11-11
  • JPA中@ElementCollection使用示例详解

    JPA中@ElementCollection使用示例详解

    在JPA中,@ElementCollection注解主要用于映射集合属性,例如List、Set或数组等集合属性,以及Map结构的集合属性,每个属性值都有对应的key映射,这篇文章主要介绍了JPA中@ElementCollection使用,需要的朋友可以参考下
    2023-11-11
  • Spring实战之ResourceLoaderAware加载资源用法示例

    Spring实战之ResourceLoaderAware加载资源用法示例

    这篇文章主要介绍了Spring实战之ResourceLoaderAware加载资源用法,结合实例形式分析了spring使用ResourceLoaderAware加载资源相关配置与操作技巧,需要的朋友可以参考下
    2020-01-01
  • Java序列化问题:“Serialized class has not implement Serializable interface”错误的解决方法

    Java序列化问题:“Serialized class has not impl

    在Java开发中,序列化(Serialization)是一个常见的操作,尤其是在分布式系统、网络通信或数据持久化场景中,然而,序列化过程中可能会遇到各种问题,其中最常见的一个错误是Serialized class has not implement Serializable interface,本文给大家介绍了相关的解决方法
    2025-02-02
  • Java应用CPU过高的排查全流程

    Java应用CPU过高的排查全流程

    Java CPU 飙高90% 都是业务代码死循环、频繁GC、密集计算、死锁/自旋导致的,排查有标准、固定、可落地的流程,不需要猜,下面给你一套从登录服务器到定位代码行的完整实战步骤,需要的朋友可以参考下
    2026-06-06
  • Spring Cloud微服务架构的构建:分布式配置中心(加密解密功能)

    Spring Cloud微服务架构的构建:分布式配置中心(加密解密功能)

    这篇文章主要给大家介绍了关于Spring Cloud微服务架构的构建:分布式配置中心(加密解密)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用具有一定的参考学习价值,需要的朋友可以参考下
    2018-05-05
  • SpringBoot项目nohup启动运行日志过大的解决方案

    SpringBoot项目nohup启动运行日志过大的解决方案

    这篇文章主要介绍了SpringBoot项目nohup启动运行日志过大的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • SpringBoot自定义线程池,执行定时任务方式

    SpringBoot自定义线程池,执行定时任务方式

    这篇文章主要介绍了SpringBoot自定义线程池,执行定时任务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java使用RabbitMQ保证消息幂等性的方法步骤

    Java使用RabbitMQ保证消息幂等性的方法步骤

    在Java中使用RabbitMQ时,保证消息处理的幂等性至关重要,幂等性意味着即使同一消息被处理多次,处理的结果也是一致的,本文就来详细的介绍一下Java使用RabbitMQ保证消息幂等性的方法步骤,感兴趣的可以了解一下
    2025-10-10

最新评论