JVM常见参数

这些选项控制Java HotSpot虚拟机怎么进行垃圾回收。

- -XX:+AggressiveHeap

java堆最佳化设置。设置多个参数使长时间运行过的任务使用密集的内存分配。 默认这个选项时关闭的,也就是堆不是最佳化。

- -XX:+AlwaysPreTouch

在调用main函数之前,使用所有可用的内存分页。这个选项可以用来测试长时间运行的系统,所有的内存都已被分配。默认这个选项

是关闭的,也就是不会使用所有的内存分页。

- -XX:+CMSClassUnloadingEnabled

当使用CMS垃圾收集器时,允许类卸载。这个选项模式是开启的。为了禁止类卸载,那么可以使用: -XX:-CMSClassUnloadingEnabled

- -XX:CMSExpAvgFactor=percent

指定垃圾收集消耗的时间百分比。默认这个数是25%。下面的例子设置成15%:

-XX:CMSInitiatingOccupancyFraction=percent

设置CMS收集开始的百分比。默认值是-1,任何的负值表示会使用-XX:CMSTriggerRatio选项来定义这个百分比数。

下面的例子设置成了20%,表示老年代使用20%后开始垃圾收集;

-XX:+CMSScavengeBeforeRemark

在CMS重新标记之前执行清除操作,默认这个选项是关闭的。

-XX:CMSTriggerRatio=percent

设置由-XX:MinHeapFreeRatio指定值的百分比的值。默认是80%。

下面的例子设置成了75%:

-XX:ConcGCThreads=threads

并发GC的线程数量。默认值根据cpu的数量而定。下面的例子把这个值设置为2

-XX:+DisableExplicitGC

这个选项控制显式GC,也就是调用System.gc(),默认在调用这个方法的时候就会发生gc,如果不允许显式gc,那么调用这个方法的时候,就不会发生gc行为。

-XX:+ExplicitGCInvokesConcurrent

当调用System.gc()的时候, 执行并行gc。默认是不开启的,只有使用-XX:+UseConcMarkSweepGC选项的时候才能开启这个选项。

-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

当调用System.gc()的时候, 执行并行gc。并在垃圾回收的周期内卸载类。 只有使用-XX:+UseConcMarkSweepGC选项的时候才能开启这个选项。

-XX:G1HeapRegionSize=size

当使用G1收集器时,设置java堆被分割的大小。这个大小范围在1M到32M之间。下面的例子把这个值设置成了16M。

-XX:+G1PrintHeapRegions

打印G1收集器收集的区域。默认这个选项是关闭的。

-XX:G1ReservePercent=percent

使用g1收集器时,设置保留java堆大小,防止晋升失败。范围是0到50.默认设置是10%。下面的例子把这个值设置成20%。

-XX:InitialHeapSize=size

初始化堆大小。

-XX:InitialSurvivorRatio=ratio

设置幸存区的比例。

-XX:InitiatingHeapOccupancyPercent=percent

设置进行垃圾回收的堆占用的百分比。

-XX:MaxGCPauseMillis=time

设置GC最大暂停时间。默认没有最大暂停时间。下面的例子设置最大暂停时间为500毫秒。

-XX:MaxHeapSize=size

最大堆大小。

-XX:MaxHeapFreeRatio=percent

设置堆垃圾回收后最大空闲空间比例。默认是70%。下面的例子把这个值设置成75.

-XX:MaxMetaspaceSize=size

设置最大的本地内存类员工间可用于垃圾回收。默认没有限制。下面的例子把这个值设置成256m

-XX:MaxNewSize=size

新生代最大大小。

-XX:MaxTenuringThreshold=threshold

在新生代中对象存活次数(经过Minor GC的次数)后仍然存活,就会晋升到旧生代。

-XX:MetaspaceSize=size

设置类元空间大小。

-XX:MinHeapFreeRatio=percent

堆最小空间百分比。

XX:NewRatio=ratio

设置新生代和老年代的比例。

-XX:NewSize=size

设置年轻代的大小

-XX:ParallelGCThreads=threads

并行收集线程数量。

-XX:+ParallelRefProcEnabled

如果应用有很多的Reference or finalizable objects,那么可以使用-XX:+ParallelRefProcEnabled来减少duration。

-XX:+PrintAdaptiveSizePolicy

打印自适应收集的大小。默认关闭。

-XX:+PrintGC

打印GC信息。

-XX:+PrintGCApplicationConcurrentTime

打印自从上次gc停顿到现在过去了多少时间。

-XX:+PrintGCApplicationStoppedTime

打印gc一共停顿了多长时间。

-XX:+PrintGCDateStamps

打印gc时间戳

-XX:+PrintGCDetails

打印gc详细信息

-XX:+PrintGCTaskTimeStamps

为每个独立的gc线程打印时间戳。

-XX:+PrintGCTimeStamps

打印gc时间戳

-XX:+PrintStringDeduplicationStatistics

打印字符串去重统计信息。

-XX:+PrintTenuringDistribution

打印对各代信息。

-XX:+ScavengeBeforeFullGC

在进行fullGC时先进行YGC。

-XX:StringDeduplicationAgeThreshold=threshold

字符串存活的最小年龄 ,默认是3.

-XX:SurvivorRatio=ratio

幸存代的比例。

-XX:TargetSurvivorRatio=percent

年轻代收集后,幸存代期望的比例值。

-XX:TLABSize=size

设置本地线程收集缓冲区的初始化大小。

-XX:+UseAdaptiveSizePolicy

使用自适应分代大小。

-XX:+UseConcMarkSweepGC

使用cms垃圾回收器。

-XX:+UseG1GC

使用G1垃圾回收器

-XX:+UseGCOverheadLimit

限制GC的运行时间

-XX:+UseParallelGC

使用 Parallel收集器。

-XX:+UseParallelOldGC

使用 ParallelOld垃圾回收器。

-XX:+UseParNewGC

使用ParNew垃圾回收器

-XX:+UseSerialGC

使用 Serial垃圾回收器。

-XX:+UseStringDeduplication

使用字符串去重机制。

-XX:+UseTLAB

年轻代中使用本地线程收集块

### ### 堆内存配置参数 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 文件。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值