配置示例

--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)的行为,以优化性能、监控垃圾收集活动、管理内存分配,并启用一些实验性或诊断功能。下面是对每个参数的详细解释:

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

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