上篇文章粗略介绍了jdk8及以下版本中的常见的垃圾回收器:垃圾收集器,这篇文章来列一下在对应的收集器都有哪些参数配置。
通用配置
选项 | 描述 | 使用示例 |
-Xms | 设置Java堆的初始大小。当可用的Java堆区内存小于40%时,JVM就会将内存调整到选项-Xmx所允许的最大值 | -Xms100M |
-Xmx | 设置Java堆的最大值。当可用的Java堆区内存大于70%时,JVM就会将内存调整到选项-Xms所指定的初始值。与-Xms设置为一样的话可以避免堆自动扩展带来的性能开销。 | -Xmx300M |
-Xss | 设置栈容量大小。每个线程都拥有一个栈,生命周期与线程相同,每个方法的调用都会创建一个栈帧。在堆容量确定的情况下,栈容量越大意味着能建立的线程越少。 | -Xss2M |
-Xmn | 设置新生代的大小。-Xmn的内存大小为Eden+2个Surivivor空间的值,官方建议配置为整个堆的3/8。 | -Xmn100M |
-XX:NewSize | 设置新生代的初始大小。和-Xmn等价,推荐使用-Xmn,相当于一次性设定了NewSize与MaxNewSize的内存大小。 | -XX:NewSize=100M |
-XX:MaxNewSize | 设置新生代的最大值 | -XX:MaxNewSize=100M |
-XX:NewRatio | 新生代(Eden+2个Surivivor空间)与老年代(不包括永久代)的比值 | -XX:NewRatio=4,表示新生代与老年代所占的比值为1:4 |
-XX:SurivivorRatio | Eden与一个Surivivor的比值大小。默认为8:1,即Eden占8/10。 | -XX:SurvivorRatio=8 |
-XX:PermSize | 设置非堆内存(方法区,永久代)的初始大小。方法区主要存放Class相关信息,如类名、访问修饰符、常量池、字段描述等。 | -XX:PermSize=10M |
-XX:MaxPermSize | 设置非堆内存(方法区,永久代)的最大值 | -XX:MaxPermSize=50M |
-XX:MaxDirectMemorySize | 设置本机直接内存大小。一般通过Unsalf类来操作直接内存。 | -XX:MaxDirectMemorySize=100M |
-XX:PretenureSizeThreshold | 设置对象超过指定字节大小时直接分配到老年代 | -XX:PretenureSizeThreshold=3145728 |
-XX:+HandlePromotionFailure | 是否允许新生代收集担保失败。 | -XX:+HandlePromotionFailure |
-XX:ParallelGCThreads | 设置并行GC进行内存回收的线程数 | -XX:ParallelGCThreads=4 |
-XX:MaxTenuringThreshold | 晋升到老年代的对象年龄。每次Minor GC之后,存活年龄就加1,当超过这个值时进入老年代。默认为15 | -XX:MaxTenuringThreshold=15 |
-XX:+HeapDumpOnOutOfMemoryError | 内存溢出时Dump出当前的内存堆转储快照以便事后进行分析 | -XX:+HeapDumpOnOutOfMemoryError |
-XX:+PrintGCDetails | 发生垃圾收集时打印详细回收日志, | -XX:+PrintGCDetails |
XX:+PrintGCDateStamps | 输出GC时的时间戳 | XX:+PrintGCDateStamps |
XX:+PrintHeapAtGC | 在进行GC的前后打印出堆的信息 | XX:+PrintHeapAtGC |
-XX:+PrintGCApplicationStoppedTime | 输出GC造成应用暂停的时间 | -XX:+PrintGCApplicationStoppedTime |
-Xloggc | 日志文件的输出路径 | -Xloggc:./logs/gc.log |
-XX:+DisableExplicitGC | 是否关闭手动System.gc | -XX:+DisableExplicitGC |
Serial收集器
选项 | 描述 | 使用示例 |
-XX:+UseSerialGC | 开启Serial收集器。 | -XX:+UseSerialGC |
ParNew收集器
选项 | 描述 | 使用示例 |
-XX:+UseParNewGC | 开启ParNew收集器。 | -XX:+UseParNewGC |
Parallel Scavenge收集器
选项 | 描述 | 使用示例 |
-XX:+UseParallelGC | 开启Parallel Scavenge收集器。 | -XX:+UseParallelGC |
-XX:MaxGCPauseMillis | 最大GC停顿时间(毫秒),虚拟机将尽可能保证回收停顿时间不超过设定值。 | -XX:MaxGCPauseMillis=10 |
-XX:GCTimeRatio | 垃圾收集时间占总时间的比值,相当于吞吐量的倒数。 | -XX:GCTimeRatio=99 |
-XX:+UseAdaptiveSizePolicy | 自适应调节策略,当打开这个参数之后, | -XX:+UseAdaptiveSizePolicy |
Serial Old收集器
选项 | 描述 | 使用示例 |
-XX:+UseSerialOldGC | 开启Serial Old收集器。 | -XX:+UseSerialOldGC |
Parallel Old收集器
选项 | 描述 | 使用示例 |
-XX:+UseParallelOldGC | 开启Parallel Old收集器。 | -XX:+UseParallelOldGC |
CMS收集器
选项 | 描述 | 使用示例 |
-XX:+UseConcMarkSweepGC | 开启CMS收集器。 | -XX:+UseConcMarkSweepGC |
-XX:CMSInitiatingOccupancyFraction | 由于CMS收集存在浮动垃圾,CMS不能等到老年代用尽才进行回收, | -XX:CMSInitiatingOccupancyFraction=70 |
-XX:+UseCMSInitiatingOccupancyOnly | 开启固定老年代使用率的回收阈值, | -XX:+UseCMSInitiatingOccupancyOnly |
-XX:+UseCMSCompactAtFullCollection | 开启对老年代空间进行压缩整理(默认开启)。 | -XX:+UseCMSCompactAtFullCollection |
-XX:CMSFullGCsBeforeCompaction | 设置执行多少次不压缩的Full GC后,紧接着就进行一次压缩整理 | -XX:CMSFullGCsBeforeCompaction=5 |
-XX:+CMSScavengeBeforeRemark | 执行CMS 重新标记(remark)之前进行一次Young GC, | -XX:+CMSScavengeBeforeRemark |
G1 收集器
选项 | 描述 | 使用示例 |
-XX:+UseG1GC | 开启G1收集器。 | -XX:+UseG1GC |
-XX:MaxGCPauseMillis | 设置最大GC停顿时间。这是一个软性指标, JVM 会尽量去达成这个指标。 | -XX:MaxGCPauseMillis=10 |
-XX:InitiatingHeapOccupancyPercent | 启动并发GC周期时的堆内存占用百分比。G1用它来触发并发GC周期,基于整个堆的使用率而不只是某一代内存的使用比。 | -XX:InitiatingHeapOccupancyPercent=70 |
-XX:ParallelGCThreads | 设置垃圾收集器在并行阶段使用的线程数,默认值随JVM运行的平台不同而不同。 | -XX:ParallelGCThreads=4 |
-XX:ConcGCThreads | 并发垃圾收集器使用的线程数量。默认值随JVM运行的平台不同而不同。 | -XX:ConcGCThreads=4 |
-XX:G1ReservePercent | 设置预留堆大小百分比,防止晋升失败,默认值是 10。 | -XX:G1ReservePercent=20 |
-XX:G1HeapRegionSize | 指定每个heap区的大小,默认值将根据 heap size 算出最优解。 | -XX:G1HeapRegionSize=16M |
-XX:InitialSurvivorRatio | 设置Survivor区的比例,默认为5。 | -XX:InitialSurvivorRatio=10 |
-XX:+PrintAdaptiveSizePolicy | 打印自适应收集的大小。默认关闭。 | -XX:+PrintAdaptiveSizePolicy |
-XX:G1MixedGCCountTarget | 混合GC数量,默认为8。 | -XX:G1MixedGCCountTarget=8 |