
🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
| 专栏名称 | 专栏介绍 |
| 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 | |
| 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! | |
| 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 | |
| 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 | |
| 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 | |
| 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

JVM 参数是控制和优化 Java 虚拟机运行行为的关键工具。下面这张表格汇总了核心的 JVM 参数,方便你快速查阅。
| 参数类别 | 核心参数示例 | 主要作用 |
|---|---|---|
| 内存设置 |
| 控制堆、栈、元空间等内存区域的大小 |
| GC 设置 |
| 选择垃圾回收器并调整其行为 |
| 监控/日志 |
| 生成GC日志、内存溢出时自动转储堆快照 |
| 其他配置 |
| 设置JVM运行模式、系统属性等 |
💾 内存参数详解
内存参数用于配置JVM各内存区域的大小,是性能调优的基石。
-
堆内存(Heap):这是JVM中最大的一块内存区域,用于存储对象实例。
-
-Xms<size>:设置堆的初始大小。例如-Xms512m表示初始堆为512MB。建议生产环境与-Xmx设成相同值,避免运行时动态调整带来的性能波动。 -
-Xmx<size>:设置堆的最大大小。例如-Xmx4g表示最大堆为4GB。这是防止java.lang.OutOfMemoryError: Java heap space错误的关键参数。 -
-Xmn<size>:设置年轻代(Young Generation)的大小。年轻代是大部分对象创建和消亡的区域。合理设置对Minor GC频率有重要影响。Sun官方推荐为整个堆的1/4到1/3。
-
-
非堆内存:
-
-Xss<size>:设置每个线程的栈大小。例如-Xss256k。栈大小影响可创建的线程数量,过小可能导致StackOverflowError,过大则浪费内存。 -
-XX:MetaspaceSize=<size>和-XX:MaxMetaspaceSize=<size>:设置元空间(Metaspace)的初始和最大大小。元空间在JDK 8中取代了永久代(PermGen),用于存储类的元数据。例如-XX:MaxMetaspaceSize=512m。如果应用动态生成大量类(如使用CGLib),需关注此区域。
-
-
比例参数:
-
-XX:NewRatio=<n>:设置年轻代与老年代的比例。例如-XX:NewRatio=2表示年轻代:老年代 = 1:2。 -
-XX:SurvivorRatio=<n>:设置Eden区与Survivor区的比例。例如-XX:SurvivorRatio=8表示 Eden:Survivor = 8:1:1(每个Survivor占1/10)。
-
🔄 垃圾回收(GC)参数详解
垃圾回收参数用于选择回收器和调整回收策略,对应用吞吐量和响应时间有决定性影响。
-
选择垃圾回收器:
-
-XX:+UseG1GC:启用 G1 垃圾回收器。适用于大内存(如超过4G)和对延迟敏感的应用,是JDK 9及以后的默认回收器。 -
-XX:+UseParallelGC:启用 Parallel Scavenge 回收器(吞吐量优先)。适合后台计算、数据处理等注重吞吐量的场景。 -
-XX:+UseConcMarkSweepGC:启用 CMS 回收器(低延迟优先)。适用于Web服务等对响应时间要求高的场景,但JDK 8之后已不推荐,被G1取代。
-
-
调整GC行为:
-
-XX:MaxGCPauseMillis=<n>:设置期望的最大GC停顿时间目标(毫秒)。例如-XX:MaxGCPauseMillis=200。这是一个“软目标”,JVM会尽力达成但不保证。 -
-XX:ParallelGCThreads=<n>:设置并行GC时的线程数。默认值与CPU核心数相关。
-
📊 监控与故障排除参数
这些参数帮助你在开发和生产环境中洞察JVM内部状态,快速定位问题。
-
GC日志记录:
-
-XX:+PrintGCDetails:打印详细的GC日志信息。 -
-Xloggc:<file>:将GC日志输出到指定文件。例如-Xloggc:/var/log/gc.log。 -
JDK 9+ 统一日志:推荐使用
-Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=10M,功能更强大,格式更统一。
-
-
内存溢出诊断:
-
-XX:+HeapDumpOnOutOfMemoryError:当发生 OutOfMemoryError 时,自动生成堆转储文件(Heap Dump)。这是分析内存泄漏的利器。 -
-XX:HeapDumpPath=<path>:指定堆转储文件的保存路径。例如-XX:HeapDumpPath=/path/to/dumps/。
-
-
其他监控:
-
-XX:+PrintFlagsFinal:打印所有JVM参数的最终值,包括被修改过的和默认值,非常有用。
-
⚙️ 其他重要参数
-
-server:启用 服务器模式。JVM会进行更多优化,适合长时间运行的服务端应用。64位JVM默认启用。 -
-D<name>=<value>:设置系统属性。例如-Dfile.encoding=UTF-8。
🛠️ 参数配置示例与实践建议
-
生产环境Web服务器(JDK 11+)示例:
java -server \ -Xms4g -Xmx4g \ # 堆内存固定为4G,避免动态调整 -Xmn1g \ # 年轻代1G -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \ # 元空间 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps/ \ # OOM时转储 -Xlog:gc*:file=/path/to/logs/gc.log:time,uptime,level,tags:filecount=5,filesize=10M \ # 统一GC日志 -jar your-application.jar -
排查OOM问题示例:
java -Xms512m -Xmx512m \ # 限制堆大小,更容易重现问题 -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=./ \ # 堆转储文件保存在当前目录 -XX:OnOutOfMemoryError="kill -3 %p" \ # 发生OOM时执行命令(如发送信号) -jar app.jar -
实践建议:
-
-Xms和-Xmx设置为相同值,可以避免JVM在运行过程中动态调整堆大小带来的性能开销。 -
优先使用 G1垃圾回收器(
-XX:+UseG1GC),它在大多数场景下能较好地平衡吞吐量和延迟。 -
务必配置
-XX:+HeapDumpOnOutOfMemoryError,以便在出现内存问题时能够有据可查。 -
使用 JDK 9+ 的统一日志系统(
-Xlog:gc*...)来记录GC活动,它比老式的-XX:+PrintGC系列参数更灵活和强大。
-
💎 总结
有效运用JVM参数是Java应用性能调优和稳定运行的关键。建议你根据应用的具体特点(如内存占用模式、对延迟或吞吐量的要求)和环境(如JDK版本、硬件资源),有针对性地进行调整和测试。
希望这份详解能帮助你更好地理解和运用JVM参数。如果你有特定的应用场景或遇到了具体问题,欢迎提出,我们可以进一步探讨。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙


被折叠的 条评论
为什么被折叠?



