JVM调优常用参数

本文深入探讨了Java虚拟机内存配置与管理的关键参数,包括堆内存、新生代、老年代等设置,以及如何通过调整相关参数实现内存优化,减少内存泄漏与提升应用性能。

1、非XX参数

参数

默认值

说明

Xmx

 

堆最大内存

Xmn

 

新生代的最大内存

Xms

 

堆的初始内存

Xloggc:file

 

输出GC文件

 

 

2、远程调试参数

参数

默认值

说明

-Dcom.sun.management.jmxremote

 

 

-Dcom.sun.management.jmxremote.port

 

端口号

-Dcom.sun.management.jmxremote.authenticate=false

 

 

-Dcom.sun.management.jmxremote.ssl=false

 

 

-Djava.rmi.server.hostname=192.168.1.12

 

 

 

 

3、内存调试参数

参数

默认值

说明

HeapDumpOnOutOfMemoryError

关闭

在发生内存溢出异常时是否生成堆转储快照,关闭则不生成。

PrintGCDetails

关闭

打印GC的详细信息

PrintGCTimeStamps

关闭

打印GC停顿耗时

 

 

 

4、内存管理公共参数

参数

默认值

说明

AggressiveOpts

 

打开点性能的编译器优化,预计将在即将发布的默认。 5.0更新6推出)。

CompileThreshold

 

 

DisableExplicitGC

关闭

忽略来自System.gc()方法触发的垃圾回收

 

 

 

MaxHeapFreeRatio

70

Xmx大于Xms时,堆可以动态收缩和扩展,这个参数控制收缩比率

MaxTenuringThreshold

15

晋升到老年代的对象年龄。每个对象在坚持过一次Minor GC之后,年龄加1。当超过该参数就进入老年代。

MinHeapFreeRatio

40

Xmx大于Xms时,堆可以动态收缩和扩展,这个参数控制收缩比率

 

 

 

NewRatio

8

新生代与老年代的比例

 

 

 

PretenureSizeThreshold

无默认值

直接晋升到老年代的对象大小,设置该参数后,大于该参数的对象将直接在老年代分配。

ParallelGCThreads

 

 

SurvivorRatio

8

新生代中EdgeSurvivor的比例

ThreadStackSize

 

 

 

一、CMS方案

1、  相关参数

 

参数

默认值

说明

UseConcMarkSweepGC

False

当ture时,启用CMS做为GC方案

UseCMSCompactAtFullCollection

true

完成GC后,是否进行一次碎片整理。

CMSMaxAbortablePrecleanTime

5000

 

CMSFullGCsBeforeCompacion

进行若干次GC后,进行一次碎片整理。 

CMSClassUnloadingEnabled

 

 

CMSInitiatingOccupancyFraction

68

老年代空间占用多少后触发GC。

CMSParallelRemarkEnabled

 

降低标记停顿

  CMSInitiatingPermOccupancyFraction92 方法区达到多少触发GC.

 

 

<think>好的,我需要回答用户关于JVM常用参数的问题。用户已经提供了四个引用,我需要仔细分析这些引用中的信息,并结合用户之前的问题来组织答案。首先,用户之前的问题是关于Java面试常见问题,其中涉及了JVM常用参数,现在用户进一步询问具体的参数列表及作用。根据引用[1]提到JVM参数汇总,引用[4]详细列出了几个关键参数-Xms、-Xmx等。引用[3]和[2]也提到了方法和工具,但用户现在需要的是参数列表,所以重点应放在引用[1]和[4]上。 接下来,我需要整理这些参数,并分类说明。常见的参数可以分为堆内存设置、新生代配置、垃圾回收器选择、其他参数等。例如,-Xms和-Xmx控制堆的初始和最大大小,这在引用[4]中被提到。新生代相关的参数-XX:NewSize和-XX:SurvivorRatio也需要解释。此外,垃圾回收器相关的参数-XX:+UseG1GC,以及辅助参数-XX:+PrintGCDetails,这些可能在引用[1]或[2]中有涉及。 需要注意的是,用户要求使用中文回答,并且数学表达式要用$...$格式。例如,在解释SurvivorRatio时,可能需要用比例表达式,如Eden:S0:S1=8:1:1,但这里不需要数学公式,所以可能不需要使用LaTeX。不过如果有涉及计算的地方,比如堆大小的比例,可以适当使用。 另外,用户希望生成相关问题,我需要根据JVM的主题,提出几个相关的问题,比如如何选择垃圾回收器、的步骤、如何分析内存泄漏等。这些问题应涵盖的不同方面,帮助用户进一步学习。最后,确保回答结构清晰,分点列出参数,每个参数的作用和示例都要明确。同时,正确添加引用标识,例如参数说明来自引用[4]的,在末尾添加[^4],来自引用[1]的添加[^1]等。需要检查引用是否准确,避免错误归属。 可能遇到的挑战是确保所有重要参数都被涵盖,并且分类合理。例如,除了堆和新生代参数,还有元空间、垃圾回收日志等参数也需要包括进去。需要参考提供的引用,确保没有遗漏关键点,同时保持回答简洁易懂。</think>### JVM常用参数列表及作用 以下是JVM的核心参数及其作用分类整理,结合性能化实践和内存管理需求[^1][^4]。 --- #### **1. 堆内存设置** - **`-Xms`** - **作用**:设置JVM初始堆大小(默认物理内存的1/64)。 - **示例**:`-Xms512m`(初始堆512MB)。 - **`-Xmx`** - **作用**:设置JVM最大堆大小(默认物理内存的1/4)。 - **示例**:`-Xmx2048m`(最大堆2GB)。 - **建议**:`-Xms`和`-Xmx`通常设为相同值,避免堆动态扩容导致性能波动[^4]。 --- #### **2. 新生代(Young Generation)配置** - **`-XX:NewSize`** / **`-XX:MaxNewSize`** - **作用**:设置新生代初始大小和最大大小。 - **`-XX:NewRatio`** - **作用**:设置老年代与新生代的比例(默认2,即老年代占2/3,新生代占1/3)。 - **示例**:`-XX:NewRatio=1`(老年代和新生代各占50%)。 - **`-XX:SurvivorRatio`** - **作用**:设置Eden区与Survivor区的比例(默认8,即Eden:S0:S1=8:1:1)。 - **示例**:`-XX:SurvivorRatio=4`(Eden:S0:S1=4:1:1)[^4]。 --- #### **3. 垃圾回收器选择** - **`-XX:+UseG1GC`** - **作用**:启用G1垃圾回收器(适合大堆、低延迟场景)。 - **`-XX:+UseParallelGC`** - **作用**:启用并行垃圾回收器(吞吐量先)。 - **`-XX:+UseConcMarkSweepGC`** - **作用**:启用CMS垃圾回收器(低停顿时间,已废弃,建议改用G1)。 --- #### **4. 元空间(Metaspace)配置** - **`-XX:MetaspaceSize`** - **作用**:设置元空间初始大小(默认约21MB)。 - **`-XX:MaxMetaspaceSize`** - **作用**:设置元空间最大大小(默认无限制,建议根据应用设置)。 --- #### **5. 其他关键参数** - **`-XX:+HeapDumpOnOutOfMemoryError`** - **作用**:在OOM时自动生成堆转储文件(用于分析内存泄漏)。 - **`-XX:HeapDumpPath`** - **作用**:指定堆转储文件路径。 - **示例**:`-XX:HeapDumpPath=/logs/heapdump.hprof`。 - **`-XX:+PrintGCDetails`** - **作用**:打印GC详细日志(用于分析GC频率和停顿时间)。 - **`-Xss`** - **作用**:设置单个线程的栈大小(默认1MB,需根据线程数整)[^1][^4]。 --- #### **示例配置** ```shell java -Xms2g -Xmx2g -XX:NewRatio=1 -XX:SurvivorRatio=4 -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar ``` - **说明**:设置堆大小为2GB,新生代与老年代各占50%,Eden区占比80%,使用G1回收器并限制最大GC停顿时间为200ms[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值