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

1813

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



