全方位 JVM 调优参数详解

embedded/2025/3/13 19:07:05/

全方位 JVM 调优参数详解

JVM 的调优对于 Java 应用的性能至关重要。以下为你详细列举各类 JVM 调优参数,希望能满足你对“所有”参数的需求。

一、内存管理参数

堆内存参数

堆初始大小与最大值
-Xms:设置 JVM 启动时堆内存的初始大小。如 -Xms1g 表示初始堆内存为 1GB。
-Xmx:设置堆内存的最大可分配大小。例如 -Xmx4g ,即堆内存最大可达 4GB。
年轻代参数
-Xmn:设置新生代(Young Generation)的大小。例如 -Xmn512m 表示新生代大小为 512MB。
-XX:NewSize-XX:MaxNewSize:分别单独设置新生代的初始大小和最大大小,功能与 -Xmn 类似,但可分别配置。
-XX:SurvivorRatio:设置 Eden 区与每个 Survivor 区的大小比例,默认值为 8 。例如 -XX:SurvivorRatio=6 ,Eden 区与单个 Survivor 区比例为 6:1。
-XX:TargetSurvivorRatio:设置 Survivor 区的目标使用率,默认值为 50% 。当 Survivor 区的使用率达到该值时,存活对象会被晋升到老年代。
-XX:MaxTenuringThreshold:设置对象在新生代中经历多少次 GC 后晋升到老年代,默认值为 15 。例如 -XX:MaxTenuringThreshold=10
老年代参数
-XX:OldSize-XX:MaxOldSize:分别设置老年代的初始大小和最大大小。

方法区(元空间)参数

-XX:MetaspaceSize:设置元空间的初始大小。例如 -XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize:设置元空间的最大大小。如 -XX:MaxMetaspaceSize=1g
-XX:MinMetaspaceFreeRatio-XX:MaxMetaspaceFreeRatio:分别设置元空间在 GC 后最小和最大空闲比例,默认值分别为 40% 和 70% 。当元空间的空闲比例低于 MinMetaspaceFreeRatio 或高于 MaxMetaspaceFreeRatio 时,会触发相应的 GC 操作。

直接内存参数

-XX:MaxDirectMemorySize:设置直接内存的最大大小。如果不指定,默认与 -Xmx 相同。例如 -XX:MaxDirectMemorySize=512m

堆外内存相关

-XX:NativeMemoryTracking:开启本地内存跟踪功能,可设置为 summary(仅跟踪总体内存使用情况)或 detail(跟踪详细的内存分配信息),如 -XX:NativeMemoryTracking=detail 。但开启此功能会增加一定的性能开销。

二、垃圾回收(GC)相关参数

垃圾回收器通用参数

-XX:+UseSerialGC:启用串行垃圾回收器。
-XX:+UseParallelGC:启用并行垃圾回收器。
-XX:+UseConcMarkSweepGC:启用 CMS 垃圾回收器(JDK 9 及以后废弃)。
-XX:+UseG1GC:启用 G1 垃圾回收器。

串行垃圾回收器参数

-XX:ParallelGCThreads:设置串行 GC 的线程数,默认值为 1(单线程)。

并行垃圾回收器参数

-XX:ParallelGCThreads:设置并行 GC 的工作线程数,默认根据 CPU 核心数自动调整。
-XX:MaxGCPauseMillis:设置并行 GC 期望的最大停顿时间(仅作为参考)。
-XX:GCTimeRatio:设置并行 GC 的吞吐量目标,默认值为 99 ,表示 GC 时间与应用运行时间的比例为 1:99 。

CMS 垃圾回收器参数

-XX:CMSInitiatingOccupancyFraction:设置 CMS 在老年代占用率达到多少时开始回收,默认值为 68% 。
-XX:+UseCMSInitiatingOccupancyOnly:只依据 CMSInitiatingOccupancyFraction 触发 CMS 回收。
-XX:+CMSScavengeBeforeRemark:在 CMS 重新标记前进行一次 Minor GC,减少重新标记时的对象数量。
-XX:+CMSParallelInitialMarkEnabled:开启 CMS 并行初始标记阶段。
-XX:+CMSClassUnloadingEnabled:启用 CMS 对永久代(或元空间)中类的卸载功能。

G1 垃圾回收器参数

-XX:MaxGCPauseMillis:设置 G1 期望的最大 GC 停顿时间。
-XX:InitiatingHeapOccupancyPercent:设置触发并发标记周期的堆占用率阈值,默认值为 45% 。
-XX:ConcGCThreads:设置 G1 并发 GC 线程数。
-XX:G1HeapRegionSize:设置 G1 中每个 Region 的大小,可选值为 1MB、2MB、4MB、8MB、16MB、32MB 等,默认根据堆大小自动选择。
-XX:G1ReservePercent:设置堆中保留空间的百分比,用于降低晋升失败的概率,默认值为 10% 。

ZGC 垃圾回收器参数(JDK 11 及以后)

-XX:+UseZGC:启用 ZGC 垃圾回收器。
-XX:ZCollectionInterval:设置 ZGC 自动触发垃圾回收的时间间隔(单位:秒)。
-XX:ZAllocationSpikeTolerance:设置 ZGC 对内存分配尖峰的容忍度。

Shenandoah 垃圾回收器参数(JDK 12 及以后)

-XX:+UseShenandoahGC:启用 Shenandoah 垃圾回收器。
-XX:ShenandoahGCHeuristics:设置 Shenandoah 的垃圾回收策略,如 adaptivecompact 等。

三、JIT 编译相关参数

-XX:CompileThreshold:设置方法调用次数达到多少后触发 JIT 编译,默认值为 10000 次。
-XX:+TieredCompilation:启用分层编译。
-XX:CICompilerCount:设置 JIT 编译器的线程数量。
-XX:InterpreterProfilePercentage:设置解释器执行时进行热点探测的比例,默认值为 33% 。
-XX:OnStackReplacePercentage:设置栈上替换(OSR)编译的触发比例,默认值为 933 。

四、线程相关参数

-Xss:设置每个线程的栈空间大小。例如 -Xss1m 表示每个线程栈大小为 1MB。
-XX:ThreadStackSize:与 -Xss 功能相同,用于设置线程栈大小。
-XX:ActiveProcessorCount:手动指定 JVM 可使用的处理器数量。

五、性能监控与诊断参数

日志打印相关

-XX:+PrintGCDetails:打印详细的 GC 日志。
-XX:+PrintGCDateStamps:在 GC 日志中添加时间戳。
-XX:+PrintTenuringDistribution:打印对象年龄分布信息。
-XX:+PrintHeapAtGC:在每次 GC 前后打印堆内存使用情况。
-XX:+PrintClassHistogram:在发生 Ctrl+C 中断或 Full GC 时打印类直方图信息。
-XX:+PrintFlagsFinal:打印所有 JVM 参数的最终值。

性能监控工具相关

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder:启用 Java Flight Recorder(JFR),需商业许可(OpenJDK 11 及以后版本对 JFR 进行了开源)。
-XX:StartFlightRecording:设置 JFR 的启动参数,如 -XX:StartFlightRecording=name=myrecording,settings=profile
-Dcom.sun.management.jmxremote:开启 JMX 功能,用于远程监控和管理 JVM。
-Dcom.sun.management.jmxremote.port:指定 JMX 连接的端口号。
-Dcom.sun.management.jmxremote.authenticate:是否启用 JMX 认证。
-Dcom.sun.management.jmxremote.ssl:是否启用 JMX SSL 加密。

其他监控参数

-XX:+PerfDisableSharedMem:禁用性能计数器共享内存,避免因共享内存竞争导致的性能问题。
-XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation:开启 JIT 编译日志记录。

六、其他参数

-XX:+UseLargePages:启用大页内存支持。
-XX:+DisableExplicitGC:禁止显式调用 System.gc() 触发 Full GC。
-XX:+AlwaysPreTouch:在 JVM 启动时将堆内存的所有页都分配到物理内存中。
-XX:+UseNUMA:启用 NUMA 架构优化。
-XX:+UseAdaptiveSizePolicy:启用自适应大小策略,JVM 会根据应用的运行情况自动调整堆内存大小和相关参数。
-XX:ReservedCodeCacheSize:设置 JIT 编译代码缓存的大小,默认值为 48MB 。例如 -XX:ReservedCodeCacheSize=128m

这仍然不是绝对的“所有”参数,JVM 的参数体系非常庞大且复杂,不同版本可能会有新增或调整的参数。但上述列表涵盖了日常调优和性能分析中常见的大部分参数。


http://www.ppmy.cn/embedded/172326.html

相关文章

redis增加ip白名单

Redis增加IP白名单 随着互联网的快速发展,网络安全问题也日益凸显。为了保护服务器安全,我们常常需要对访问服务器的IP地址进行限制。而Redis作为一种高性能的缓存数据库,可以用来实现IP白名单功能。本文将介绍如何使用Redis来增加IP白名单&…

Python函数的递归调用

基本介绍 1、简单的说: 递归就是函数自己调用自己,每次调用时传入不同的值 2、递归有助于编程者解决复杂问题,同时可以让代码变得简洁 递归能解决什么问题? 1、各种数学问题如:皇后问题、汉诺塔、阶乘问题、迷宫问题等等 2、各种算法中也…

Android 底部 Tab 导航终极指南:封装 BottomTabHelper 实现高效、灵活的 Tab 布局

在 Android 开发中,底部 Tab 导航是常见的 UI 设计模式。本文将带你从零开始,封装一个高复用性的 BottomTabHelper 工具类,结合 BottomNavigationView 和 ViewPager2,实现高效、灵活的底部 Tab 导航功能。你将学到: 如…

深入浅出 IndexedDB:浏览器的 NoSQL 数据库

在现代 Web 开发中,前端数据存储的需求越来越复杂。无论是需要离线访问的应用,还是需要缓存大量数据的场景,传统的 LocalStorage 和 SessionStorage 已经无法满足需求。这时,IndexedDB 作为一种强大的浏览器端 NoSQL 数据库&#…

从零构建CNN:框架与自定义实现对比

文章目录 引言项目结构一、代码结构解析1.1 训练流程控制 (main.py)1.2 PyTorch实现的CNN模型 (cnn_pytorch.py)1.3 自定义实现CNN模型 (cnn_custom.py) 二、关键算法细节剖析2.1 卷积操作2.2 自定义实现卷积层2.3 ReLU与池化2.4 全连接层 总结 引言 卷积神经网络 (Convolutio…

AJAX的作用

AJAX(Asynchronous JavaScript And XML)的工作原理基于浏览器与服务器的异步通信,其核心细节可分为以下几个关键步骤: 1. 事件触发与请求创建 触发源:用户操作(点击按钮、输入文本等)或定时事件…

【每日八股】Redis篇(七):集群

目录 Redis 集群模式有哪些?Redis 切片集群的工作原理?哈希槽和 Redis 节点如何对应?主从模式的同步过程?全量同步增量同步 主服务器如何知道要将哪些增量数据发送给从服务器?如何避免主从数据不一致?主从架…

每日算法:力扣343.整数差分(动态规划)

题目: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出…