JVM配置参数详解

本文详细介绍了Java堆内存参数的设置,包括初始堆(Xms),最大堆(Xmx),线程堆栈(Xss),年轻代(Xmn)等,以及各种收集器(如SerialGC,ParNewGC,CMS,G1GC)的使用和配置,以及垃圾回收统计信息和并发收集器的设置策略。

一、堆设置

· -Xms :初始堆大小

 初始堆大小,默认值为操作系统内存的1/64

根据应用环境实效性情况和并发要求来定初始堆的大小,比如服务启动时就会热加载庞大的数据,初始堆就要设置大些,如果项目独享服务器资源,可以调成与最大值一样;比如操作系统内存8g,最小值设置4G,最大值设置4G,这也是为了避免空闲堆在40%~70%波动时频繁调整堆内存大小。

· -Xmx :最大堆大小

最大堆大小,默认最大内存为操作系统内存的1/4

· -Xss:设置每个线程的堆栈大小。

JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大 小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成, 经验值在3000~5000左右

· -Xmn:堆内存的年轻代大小

堆内存最大值和年轻代的差值就是老年代的大小。单位为k(K)或者m(M),必须为1M或者1024K的倍数 例子:-Xmn10m

· -XX:NewSize=n :设置年轻代大小

· -XX:NewRatio=n: 设置年轻代和年老代的比值。

 如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

· -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。

如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

· -XX:PermSize=n:设置持久代最小值

· -XX:MaxPermSize=n:设置持久代最大值(jdk1.8时没有了永久代而是元空间)

-XX:MetaspaceSize,元数据初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量 的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值

-XX:MaxMetaspaceSize,元数据最大空间,默认是没有限制的

除了上面两个指定元数据空间大小的选项以外,还有两个与 GC 相关的属性:

-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比。
当进行过Metaspace GC之后,会计算当前Metaspace的空闲空间比,如果空闲比小于这个参数,那么虚拟机将增长Metaspace的大 小。在本机该参数的默认值为40,也就是40%。设置该参数可以控制Metaspace的增长的速度,太小的值会导致Metaspace增长的缓 慢,Metaspace的使用逐渐趋于饱和,可能会影响之后类的加载。而太大的值会导致Metaspace增长的过快,浪费内存。

-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比。
当进行过Metaspace GC之后, 会计算当前Metaspace的空闲空间比,如果空闲比大于这个参数,那么虚拟机会释放Metaspace的部 分空间。在本机该参数的默认值为70,也就是70%。

-XX:MaxMetaspaceExpansion=N Metaspace增长时的最大幅度。

-XX:MinMetaspaceExpansion=N Metaspace增长时的最小幅

二、收集器设置

-XX:+UseSerialGC:设置串行收集器:

默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应 参数。虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial+Serial Old的收集器组合进行内存回收

-XX:+UseParNewGC:

设置年轻代为并行收集,可与CMS收集同时使用。打开此开关后,使用ParNew+Serial Old的收集器组合进行 内存回收。

-XX:+UseParallelGC:

设置并行收集器。虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge+Serial Old(PS MarkSweep)的收集器组合进行内存回收。

-XX:+UseParalledlOldGC:

设置并行年老代收集器。打开此开关后,使用Parallel Scavenge +Parallel Old的收集器组合进行内存回 收。

-XX:+UseConcMarkSweepGC:

设置并发收集器(CMS)。打开此开关后,使用ParNew+CMS+Serial Old的收集器组合进行内存回 收。Serial Old收集器将作为CMS收集器出现Concurrent Mode Failure失败后的后备收集器使用。

-XX:+UseG1GC:

使用G1收集器 -XX:UseAdaptiveSizePolicy:动态调整Java堆中各个区域的大小以及进入老年代的年龄。

-XX:HandlePromotionFailure:

是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survior区的所有对象 都存活的极端情况

三、垃圾回收统计信息设置

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:PrintHeapAtGC:

打印GC前后的详细堆栈信息

-Xloggc:filename:

把相关日志信息记录到文件以便分析。 -verbose:gc:

在启动参数中加上 -verbose:gc 当发生gc时,可以打印出gc相关的信息. -Xlog:gc*:打印出GC的详细信息

四、并行收集器设置

-XX:ParallelGCThreads=n:

设置并行GC时进行内存回收的线程数。 -XX:MaxGCPauseMillis=n:设置并行收集时最大停顿时间,仅在使用Parallel Scavenge收集器时生效。

-XX:GCTimeRatio=n:

GC时间占总时间的比率,默认值为99,即允许1%的GC时间。公式为1/(1+n),仅在使用Parallel Scavenge 收集器时生效

五、并发收集器设置

-XX:CMSInitiationgOccupancyFraction:

设置CMS收集器在老年代空间被使用多少后触发垃圾收集。jdk1.5之前是68%,jdk1.6 之后是92%,仅在使用CMS收集器时生效。

-XX:UseCMSInitiatingOccupancyOnly:

仅使用阈值检查机制,不使用动态检查机制,通常与 XX:CMSInitiationgOccupancyFraction搭配使用。

-XX:+CMSIncrementalMode:

设置为增量模式。适用于单CPU情况。 -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数-并行收集线程数。

-XX:ConcGCThreads=n

并发垃圾收集器使用的线程数量. 默认值随JVM运行的平台不同而不同。一般为XX:ParallelGCThreads的 1/4。

-XX:G1ReservePercent=n

设置堆内存保留为天花板的总量,以降低提升失败的可能性. 默认值是 10.

-XX:G1HeapRegionSize=n
使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小。 默认值将根据 heap size 算出最优解, 最 小值为 1Mb, 最大值为 32Mb。

-XX:UseCMSCompactAtFullCollection:

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

-XX:CMSFullGCsBeforeCompaction:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ldwtxwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值