逆变器设计避坑指南:从电鱼机负载看MOSFET驱动与热失效防护
2026/10/20 1:14:02
JVM 参数的通用格式:
标准参数:以-开头(如-version),所有 JVM 实现都支持;
非标准参数:以-X开头(如-Xms),HotSpot 主流支持,不保证跨版本兼容;
高级参数:以-XX开头(如-XX:+UseG1GC),用于精细调优,+/-表示启用 / 禁用某个特性,=表示赋值。
用于调整 JVM 各内存区域的大小,是调优的第一步,重点关注堆、元空间、栈的配置。
| 参数 | 作用 | 默认值(HotSpot) | 示例 |
|---|---|---|---|
-Xms | 堆初始大小(新生代 + 老年代),建议与-Xmx设为相同,避免动态扩容触发 GC | 物理内存的 1/64(最小 1MB) | -Xms2G(初始堆 2GB) |
-Xmx | 堆最大大小,JVM 堆内存的上限 | 物理内存的 1/4(最大 1GB) | -Xmx4G(最大堆 4GB) |
-Xmn | 新生代大小(Eden+S0+S1),优先级高于NewRatio | 堆大小的 1/3(由NewRatio控制) | -Xmn1G(新生代 1GB) |
-XX:NewRatio | 新生代:老年代的比例(如 2→1:2),仅在未设-Xmn时生效 | 2(新生代 1/3,老年代 2/3) | -XX:NewRatio=3(1:3) |
-XX:SurvivorRatio | Eden:S0/S1 的比例(如 8→Eden 占 8/10,S0/S1 各占 1/10) | 8 | -XX:SurvivorRatio=6(6:1:1) |
-XX:MaxTenuringThreshold | 对象从新生代进入老年代的年龄阈值(每次 Minor GC 存活 + 1) | 15 | -XX:MaxTenuringThreshold=8(8 次 GC 后进入老年代) |
# 生产环境通用配置(4核8G服务器)java -Xms4G -Xmx4G -Xmn1.5G -XX:SurvivorRatio=8-jar app.jarXms=Xmx:避免堆动态扩容(扩容时触发 Full GC);| 参数 | 作用 | 默认值 | 示例 |
|---|---|---|---|
-XX:MetaspaceSize | 元空间初始大小,达到该值触发元空间 GC | 21MB(64 位) | -XX:MetaspaceSize=128M |
-XX:MaxMetaspaceSize | 元空间最大大小,默认无上限(易导致本地内存溢出) | 无上限 | -XX:MaxMetaspaceSize=256M |
-XX:MinMetaspaceFreeRatio | 元空间 GC 后,空闲空间占比最小值(低于则扩容) | 40 | -XX:MinMetaspaceFreeRatio=50 |
-XX:MaxMetaspaceFreeRatio | 元空间 GC 后,空闲空间占比最大值(高于则缩容) | 70 | -XX:MaxMetaspaceFreeRatio=80 |
# 防止元空间溢出(动态生成类多的场景,如Spring Boot、CGLIB)java -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -jar app.jar| 参数 | 作用 | 默认值(64 位) | 示例 |
|---|---|---|---|
-Xss | 每个线程的虚拟机栈大小 | 1MB | -Xss512K |
-Xss(如 512K),避免创建大量线程时栈内存溢出;-Xss(如 2MB),避免StackOverflowError。| 参数 | 作用 | 默认值 | 示例 |
|---|---|---|---|
-XX:MaxDirectMemorySize | 直接内存上限,默认与堆最大值一致 | 等于-Xmx的值 | -XX:MaxDirectMemorySize=2G |
NIO 密集型应用(如网络通信、文件读写)需单独配置,避免直接内存溢出。
用于指定使用的 GC 收集器,不同收集器适配不同业务场景,需按 “吞吐量 / 延迟” 需求选择。
| 参数 | 作用 | 适用场景 | 示例 |
|---|---|---|---|
-XX:+UseSerialGC | 启用串行收集器(SerialGC+SerialOldGC) | 客户端 / 单核 / 低配置 | -XX:+UseSerialGC |
-XX:+UseParallelGC | 启用并行新生代收集器(ParallelGC),默认搭配 ParallelOldGC | 高吞吐量(批处理、数据计算) | -XX:+UseParallelGC |
-XX:+UseParallelOldGC | 启用并行老年代收集器,与 ParallelGC 搭配 | 高吞吐量 | -XX:+UseParallelOldGC |
-XX:+UseConcMarkSweepGC | 启用 CMS 收集器(老年代),新生代默认搭配 ParallelGC | 低延迟(Web 服务、电商) | -XX:+UseConcMarkSweepGC |
-XX:+UseG1GC | 启用 G1 收集器(全堆),JDK9 + 默认 | 通用场景(JDK8 + 服务器端) | -XX:+UseG1GC |
-XX:+UseZGC | 启用 ZGC 收集器(全堆),JDK11 + 支持 | 超低延迟 / 超大堆(百 G 级) | -XX:+UseZGC |
# 高吞吐量场景(JDK8)java -Xms4G -Xmx4G -XX:+UseParallelGC -XX:+UseParallelOldGC -jar app.jar# 低延迟场景(JDK8)java -Xms4G -Xmx4G -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -jar app.jar# 通用场景(JDK11+)java -Xms4G -Xmx4G -XX:+UseG1GC -jar app.jar# 超大堆低延迟场景(JDK17)java -Xms32G -Xmx32G -XX:+UseZGC -jar app.jar| 参数 | 作用 | 示例 |
|---|---|---|
-XX:G1HeapRegionSize | G1 堆分区大小(1MB~32MB),默认根据堆大小自动计算 | -XX:G1HeapRegionSize=4M |
-XX:MaxGCPauseMillis | G1 目标最大 STW 时间(仅为建议值,不保证) | -XX:MaxGCPauseMillis=200(200ms) |
-XX:G1NewSizePercent | 新生代最小占比 | -XX:G1NewSizePercent=5 |
-XX:G1MaxNewSizePercent | 新生代最大占比 | -XX:G1MaxNewSizePercent=60 |
CMS是 HotSpot 虚拟机中专门针对老年代设计的并发垃圾回收器,也是 JVM 中首个实现低延迟、大部分阶段与业务线程并发执行的回收器,核心定位是以牺牲部分吞吐量和内存碎片为代价,大幅降低 Full GC 带来的 STW 时间,适配对响应延迟敏感的业务场景。
| 参数 | 作用 | 示例 |
|---|---|---|
-XX:CMSInitiatingOccupancyFraction | CMS 触发阈值(老年代使用率),默认 92% | -XX:CMSInitiatingOccupancyFraction=80 |
-XX:+CMSParallelRemarkEnabled | CMS 标记阶段启用多线程,减少 STW 时间 | -XX:+CMSParallelRemarkEnabled |
-XX:+UseCMSCompactAtFullCollection | Full GC 后整理内存,避免碎片 | -XX:+UseCMSCompactAtFullCollection |
用于输出 GC 日志,分析 GC 频率、STW 时间、内存使用情况,是排查内存泄漏、GC 频繁的核心手段。
java -Xms4G -Xmx4G -XX:+UseG1GC\# 启用GC日志-XX:+PrintGCDetails\-XX:+PrintGCDateStamps\-XX:+PrintGCTimeStamps\# 输出日志到文件(按大小切割,保留10个文件,每个最大100MB)-Xloggc:/var/log/app/gc.log\-XX:+UseGCLogFileRotation\-XX:NumberOfGCLogFiles=10\-XX:GCLogFileSize=100M\# 打印堆内存使用情况-XX:+PrintHeapAtGC\# 打印STW时间-XX:+PrintGCApplicationStoppedTime\-jar app.jar| 参数 | 作用 |
|---|---|
-XX:+PrintGCDetails | 打印详细 GC 日志(回收区域、大小、耗时) |
-XX:+PrintGCDateStamps | 打印 GC 发生的日期时间(如 2026-01-28T10:00:00.123+0800) |
-Xloggc:<path> | 将 GC 日志输出到指定文件(而非控制台) |
-XX:+UseGCLogFileRotation | 启用日志文件切割,避免单个文件过大 |
-XX:+PrintGCApplicationStoppedTime | 打印 STW 的具体时间(关键调优指标) |
用于监控 JVM 运行状态、启用性能优化、排查问题。
| 参数 | 作用 | 示例 |
|---|---|---|
-XX:+TieredCompilation | 启用分层编译(JIT 的 C1+C2 协同),JDK8 默认启用 | -XX:+TieredCompilation |
-XX:+DisableExplicitGC | 禁用手动System.gc()(避免触发 Full GC) | -XX:+DisableExplicitGC |
-XX:+UseLargePages | 启用大页内存,提升内存访问效率 | -XX:+UseLargePages |
-XX:+UseCompressedOops | 启用压缩指针(64 位 JVM),减少内存占用(32 位指针→64 位) | -XX:+UseCompressedOops(JDK8 默认启用) |
| 参数 | 作用 | 场景 |
|---|---|---|
-XX:+HeapDumpOnOutOfMemoryError | OOM 时自动生成堆转储文件(hprof) | 排查 OOM 根因 |
-XX:HeapDumpPath | 指定堆转储文件路径 | -XX:HeapDumpPath=/var/log/app/heap.hprof |
-XX:+PrintClassHistogram | 按下 Ctrl+Break 时打印类实例数量和内存占用 | 排查内存泄漏(哪个类创建过多对象) |
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 | 启用远程调试,端口 8000 | 线上问题调试(谨慎使用) |
java -Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/app/heap.hprof -jar app.jarOOM 时会在指定路径生成heap.hprof文件,用MAT(Memory Analyzer Tool)分析即可定位内存泄漏的对象。
java -Xms4G -Xmx4G -Xmn1.5G\-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M\-XX:+UseG1GC -XX:MaxGCPauseMillis=200\-XX:+PrintGCDetails -XX:+PrintGCDateStamps\-Xloggc:/var/log/app/gc.log -XX:+UseGCLogFileRotation\-XX:NumberOfGCLogFiles=10-XX:GCLogFileSize=100M\-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/app/heap.hprof\-XX:+DisableExplicitGC -Xss512K\-jar app.jarjava -Xms8G -Xmx8G -Xmn3G\-XX:+UseParallelGC -XX:+UseParallelOldGC\-XX:ParallelGCThreads=4\-XX:+PrintGCDetails -Xloggc:/var/log/app/gc.log\-jar app.jarjava -Xms4G -Xmx4G\-XX:+UseG1GC -XX:MaxGCPauseMillis=100\-XX:G1NewSizePercent=10-XX:G1MaxNewSizePercent=50\-XX:+PrintGCApplicationStoppedTime\-jar app.jar1.核心优先级:内存参数(-Xms/-Xmx)> 收集器参数(-XX:+UseG1GC)> GC 日志参数 > 诊断参数;
2.调优原则:
Xms=Xmx),再选收集器,最后调优收集器参数;System.gc(),避免手动触发 Full GC;3.场景适配: