JVM常见参数配置

整理了JVM一些常用的参数:

1、内存相关的参数

-XX:+/- UseTLAB:是否使用本地线程分配缓冲

-XX:+HeapDumpOnOutOfMemoryError内存对转储快照

-Xms 堆最小值

-Xmx 堆最大值(32位的windows限制每个进程的最大内存为2G)

-Xoss 本地方法栈大小

-Xss 栈容量

-Xmn 堆中年轻代的大小

-XX:PermSize 方法区大小 (HotSpot虚拟机中的永久代)

-XX:MaxPermSize 方法区最大值(在使用CGLib等字节码技术时,会使用这个参数)

-XX:MaxDirectMemorySize 本机直接内存(不设定默认预java堆最大值Xmx一样)

-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值

-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值

2、GC相关参数

UseSerialGC  虚拟机运行在Client模式下的默认值,打开此开关后,使用serial+serial old的收集器组合。

UseParNewGC 打开后,使用ParNew+SerialOld的收集器组合

UseConcMarkSweepGC 打开后,使用ParNew+CMS+Serial old(备用)

UseParallelOldGC 虚拟机在server模式下的默认值,打开后使用 Paraller Scavenge + Serial Old

SurvivorRatio 新生代中Eden区域和Survivor区域的容量比值,默认8

PretenureSizeThreshold 直接晋升到老年代的对象大小,设置这个后,大于这个参数的对象直接分配在老年代

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

UseAdaptiveSizePolicy 动态调整java堆中各个区域的大小,以及进入老年代的年龄

HandlePromotionFailure 是否允许分配担保失败

ParallelGCThreads 设置兵线GC时进行内存回收的线程数

GCTimeRatio GC时间占总时间的比率,仅在使用Parallel Scavenge收集器时生效

MaxGCPauseMillis 设置GC的最大停顿时间。仅在使用parallel scavenge收集器时生效

CMSInitiatingOccupancyFraction 设置CMS收集器在老年代空间被使用多少后触发垃圾收集。默认值为68%,仅在使用CMS收集器时生效

UseCMSCompactAtFullCollection 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理。仅在使用CMS收集器时生效

CMDFullGCBeforeCompaction 设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理,仅在使用CMS时生效


其他一些参数

java -verbose:class  在程序运行的时候有多少类被加载

java –verbose:gc  在虚拟机发生内存回收时在输出设备显示信息

java –verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息

java -XX:+HeapDumpOnOutOfMemoryError



### ### 堆内存配置参数 JVM 的堆内存是 Java 应用程序运行时的主要内存区域,用于存放对象实例。常见的配置参数包括: - **-Xms**:设置 JVM 启动时的初始堆内存大小。默认值为物理内存的 1/64,但不超过 1GB。建议在 Server 端将该值与 -Xmx 设置为相同大小,以避免频繁的内存调整 [^3]。 - **-Xmx**:设置 JVM 堆内存的最大值。该参数用于限制 JVM 可使用的最大内存,防止内存溢出。 示例: ```bash java -Xms4g -Xmx4g MyApp ``` - **-XX:MinHeapFreeRatio** 和 **-XX:MaxHeapFreeRatio**:控制堆内存的自动调整策略。当空闲内存比例超过 MaxHeapFreeRatio 时,JVM 会减小堆大小到 -Xms 指定的值 [^3]。 ### ### 垃圾收集器配置 不同的垃圾收集器适用于不同的应用场景,常见的配置参数如下: - **-XX:+UseSerialGC**:启用串行垃圾收集器,适用于单线程环境。 - **-XX:+UseParallelGC**:启用并行垃圾收集器(吞吐量优先),适用于多核服务器应用。 - **-XX:+UseConcMarkSweepGC**:启用 CMS(并发标记清除)垃圾收集器,适用于低延迟场景。 - **-XX:+UseG1GC**:启用 G1 垃圾收集器,适用于大堆内存和低延迟要求的应用。 示例: ```bash java -XX:+UseG1GC MyApp ``` ### ### GC策略配置 GC 策略决定了垃圾回收的行为和频率,常见的参数包括: - **-XX:MaxGCPauseMillis**:设置 G1 收集器的目标最大停顿时间(毫秒),JVM 会尽量满足该限制。 - **-XX:G1HeapRegionSize**:设置 G1 分区大小,默认根据堆大小自动选择。 - **-XX:ParallelGCThreads**:设置并行 GC 的线程数。 - **-XX:ConcGCThreads**:设置并发 GC 的线程数。 ### ### GC日志配置 GC 日志对于性能调优和问题排查至关重要,常用参数包括: - **-Xlog:gc***:输出 GC 日志信息。 - **-Xlog:gc*:file=filename:time**:将 GC 日志输出到文件,并记录时间戳。 - **-XX:+PrintGCDetails**:输出详细的 GC 日志。 - **-XX:+PrintGCDateStamps**:在日志中显示时间戳。 - **-XX:+UseGCLogFileRotation** 和 **-XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M**:启用日志轮转,限制日志文件数量和大小。 示例: ```bash java -Xlog:gc*:file=gc.log:time MyApp ``` ### ### CMS常用参数 CMS(Concurrent Mark Sweep)是一种低延迟的垃圾收集器,常见配置参数包括: - **-XX:CMSInitiatingOccupancyFraction**:设置老年代使用率达到多少时触发 CMS GC,默认为 68%。 - **-XX:+UseCMSInitiatingOccupancyOnly**:确保 CMSInitiatingOccupancyFraction 的设置生效。 - **-XX:+CMSScavengeBeforeRemark**:在 CMS remark 阶段前执行一次 Young GC,减少 remark 阶段的暂停时间。 ### ### G1常用参数 G1(Garbage First)是一种适用于大堆内存的垃圾收集器,常见参数包括: - **-XX:MaxGCPauseMillis=200**:设置最大 GC 停顿时间目标。 - **-XX:G1ReservePercent=10**:设置预留内存百分比,防止并发模式失败。 - **-XX:InitiatingHeapOccupancyPercent=45**:设置触发并发标记周期的堆占用阈值。 ### ### Dump日志参数配置JVM 发生内存溢出时,可以通过参数生成 dump 文件用于后续分析: - **-XX:+HeapDumpOnOutOfMemoryError**:在 OOM 时生成堆 dump 文件。 - **-XX:HeapDumpPath=./heapdump.hprof**:指定 dump 文件的保存路径。 示例: ```bash java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdump.hprof MyApp ``` ### ### 常用启动参数 除了内存和 GC 相关参数,还有一些常用的 JVM 启动参数: - **-Dproperty=value**:设置系统属性。 - **-verbose:class**:输出类加载信息。 - **-verbose:gc**:输出 GC 信息。 - **-jar**:运行可执行 JAR 文件。 - **-classpath/-cp**:指定类路径。 示例: ```bash java -Dmy.config=test -verbose:gc -cp myapp.jar com.example.Main ``` ### ### 各种场景的参数设置方式 - **开发环境**:保持默认堆大小,启用详细 GC 日志,便于调试。 - **测试环境**:根据负载模拟调整堆大小和 GC 策略。 - **生产环境**:设置 -Xms 和 -Xmx 相同,禁用 GC 自动调整,启用 G1 或 CMS,生成 OOM dump 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值