堆栈参数分配
-Xss:每个线程的栈大小,针对的是单个线程。 当这个参数越大,每个线程可以分配的线程栈就越多,但是整个jvm能够开启的线程就越少,反之则是线程更多,但是每个线程的线程栈更少。
-Xms: 设置堆的初始化可用大小,默认是物理内存的1/64
-Xmx: 设置堆的最大可用内存大小,默认是物理内存的1/4
-Xmn:新生代的大小
-XX:NewRatio: 默认是2,代表新生代是老年代的一半,占整个堆内存的1/3
-XX:SurvivorRatio: 默认是8,表示一个Survivor和Eden区的比例是1:8,所以整个Survivor区占堆内存的2/10,Eden占8/10
关于方法区(元空间)的参数
-XX:MaxMetaspaceSize : 设置元空间的最大值,默认是-1,则不限制元空间的大小。
-XX:MetaspaceSize:元空间的初始大小,默认是21M,
内存分配
-XX:+/-UseTLAB: 线程栈中预分配内存大小,默认是Eden区的1%
-XX:+UseCompressedOops : 指针压缩,默认开启. 如果禁用,使用-XX:-UseCompressedOops
-XX:+DoEscapeAnalysis: 逃逸分析,默认开启
-XX:+EliminateAllocations : 标量替换
对象内存分配
-XX:+PrintGCDetails: 打印GC日志
-XX:+UseAdaptiveSizePolicy: 默认开启,会导致年轻代8:1:1比例自动变化。禁止使用-XX:-UseAdaptiveSizePolicy
-XX:PretenureSizeThreshold:设置大对象的大小,超过直接进入老年代。只能Serial和parNew两个垃圾收集器
== -XX:MaxTenuringThreshold== :设置分代年龄进入老年代的阈值。 默认15次,CMS默认6次
-XX:TargetSurvivorRatio: 一批对象总大小大于S0或者S1区域的百分比时,对象直接进老年代。默认50%,数值就写50的数字代表百分比
-XX:-HandlePromotionFailure: 老年代担保机制
垃圾回收器
Serial收集器: -XX:+UseSerialGC(年轻代) -XX:+UseSerialOldGC(老年代)
Parallel Scavenge收集器: -XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代) 无法和CMS垃圾回收器使用
ParNew收集器: -XX:+UseParNewGC
CMS收集器: -XX:+UseConcMarkSweepGC(老年代)
CMS相关参数
-XX:+UseConcMarkSweepGC:启用cms
-XX:ConcGCThreads:并发的GC线程数
-XX:+UseCMSCompactAtFullCollection:FullGC之后做压缩整理(减少碎片)
-XX:CMSFullGCsBeforeCompaction:多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一次 (代表做了几次fullGC后进行碎片压缩整理,和上面的配合使用)
-XX:CMSInitiatingOccupancyFraction: 当老年代使用达到该比例时会触发FullGC(默认是92,这是百分比)
-XX:+UseCMSInitiatingOccupancyOnly:只使用设定的回收阈值(-XX:CMSInitiatingOccupancyFraction设定的值),如果不指定,JVM仅在第一次使用设定值,后续则会自动调整
-XX:+CMSScavengeBeforeRemark:在CMS GC前启动一次minor gc,目的在于减少老年代对年轻代的引用,降低CMS GC的标记阶段时的开销,一般CMS的GC耗时 80%都在标记阶段
-XX:+CMSParallellnitialMarkEnabled:表示在初始标记的时候多线程执行,缩短STW
-XX:+CMSParallelRemarkEnabled:在重新标记的时候多线程执行,缩短STW;
G1收集器参数设置
-XX:+UseG1GC: 使用G1收集器
-XX:ParallelGCThreads: 指定GC工作的线程数量
-XX:G1HeapRegionSize: 指定分区大小(1MB~32MB,且必须是2的N次幂),默认将整堆划分为2048个分区
== -XX:MaxGCPauseMillis: 目标暂停时间(默认200ms)==
-XX:G1NewSizePercent: 新生代内存初始空间(默认整堆5%)
-XX:G1MaxNewSizePercent: 新生代内存最大空间 60%默认
-XX:TargetSurvivorRatio: Survivor区的填充容量(默认50%),Survivor区域里的一批对象(年龄1+年龄2+年龄n的多个年龄对象)总和超过了Survivor区域的50%,此时就会把年龄n(含)以上的对象都放入老年代
-XX:MaxTenuringThreshold: 最大年龄阈值(默认15)
相对重要的三个参数:
-XX:InitiatingHeapOccupancyPercent: 老年代占用空间达到整堆内存阈值(默认45%),则执行新生代和老年代的混合收集(MixedGC),比如我们之前说的堆默认有2048个region,如果有接近1000个region都是老年代的region,则可能就要触发MixedGC了
-XX:G1MixedGCLiveThresholdPercent: (默认85%) region中的存活对象低于这个值时才会回收该region,如果超过这个值,存活对象过多,回收的的意义不大。
-XX:G1MixedGCCountTarget: 在一次回收过程中指定做几次筛选回收(默认8次),在最后一个筛选回收阶段可以回收一会,然后暂停回收,恢复系统运行,一会再开始回收,这样可以让系统不至于单次停顿时间过长。
(整个删选回收阶段是分阶段的,整个过程中gc线程和用户线程交替在执行,gc先清理一部分垃圾后交给用户线程进行业务处理,再STW进行gc清理,主要是为了用户体验度,所以会是多次)。
-XX:G1HeapWastePercent(默认5%): gc过程中空出来的region是否充足阈值,在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他Region,然后这个Region中的垃圾对象全部清理掉,这样的话在回收过程就会不断空出来新的Region,一旦空闲出来的Region数量达到了堆内存的5%,此时就会立即停止混合回收,意味着本次混合回收就结束了。