目录
导读
在上篇博客中:【JVM】自动内存管理机制《五》---垃圾收集器(索命黑白无常回收垃圾对象),我们了解了各种垃圾收集器,那么大家有没有想过,我们的JDK中默认用的哪种垃圾收集器?
查看JDK1.8.0_25的默认垃圾收集器
打开控制台,在控制台中输入一下命令:
java -XX:+PrintCommandLineFlags -version
64位windows可以看到下面的输出
-XX:InitialHeapSize=199345920 -XX:MaxHeapSize=3189534720 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b18) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
上面所有输出的关键的参数是:
-XX:+UseParallelGC
该参数的说明:
UseParallelGC | 虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge+Serial Old(PS MarkSweep)的收集器组合进行内存回收 |
可以到官方网站看下对应的说明:https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
打开控制台,在控制台中输入一下命令:java -XX:+PrintGCDetails -version ,打印出GC的详细信息
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Heap
PSYoungGen total 57344K, used 2949K [0x0000000780a00000, 0x0000000784a00000, 0x00000007c0000000)
eden space 49152K, 6% used [0x0000000780a00000,0x0000000780ce16a8,0x0000000783a00000)
from space 8192K, 0% used [0x0000000784200000,0x0000000784200000,0x0000000784a00000)
to space 8192K, 0% used [0x0000000783a00000,0x0000000783a00000,0x0000000784200000)
ParOldGen total 131072K, used 0K [0x0000000701e00000, 0x0000000709e00000, 0x0000000780a00000)
object space 131072K, 0% used [0x0000000701e00000,0x0000000701e00000,0x0000000709e00000)
Metaspace used 2257K, capacity 4480K, committed 4480K, reserved 1056768K
class space used 244K, capacity 384K, committed 384K, reserved 1048576K
其他JDK版本的默认垃圾回收器呢?
建议大家实操: 可以用命令查看
对应下表:垃圾收集相关的常用参数
参数 | 描述 |
---|---|
UseSerialGC | 虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收 |
UseParNewGC | 打开此开关后,使用ParNew + Serial Old的收集器组合进行内存回收 |
UseConcMarkSweepGC | 打开此开关后,使用ParNew + CMS + Serial Old的收集器组合进行内存回收。Serial Old收集器将作为CMS收集器出现Concurrent Mode Failure失败后的后备收集器使用 |
UseParallelGC | 虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge + Serial Old(PS MarkSweep)的收集器组合进行内存回收 |
UseParallelOldGC | 打开此开关后,使用Parallel Scavenge + Parallel Old 的收集器组合进行内存回收 |
SurvivorRatio | 新生代中Eden区域与Survivor区域的容量比值,默认为8,代表Eden : Survivor=8:1 |
PretenureSizeThreshold | 直接晋升到老年代的对象大小,设置这个参数后,大于这个参数的对象将直接在老年代分配 |
MaxTenuringThreshold | 晋升到老年代的对象年龄。每个对象在坚持过一次Minor GC之后,年龄就增加1,当超过这个参数值时就进入老年代 |
UseAdaptiveSizePolicy | 动态调整Java堆中各个区域的大小以及进入老年代的年龄 |
HandlePromotionFailure | 是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况 |
ParallelGCThreads | 设置并行GC时进行内存回收的线程数 |
GCTimeRatio | GC时间占总时间的比率,默认值为99,即允许1%的GC时间。仅使用Parallel Scavenge收集器时生效 |
MaxGCPauseMillis | 设置GC的最大停顿时间。仅在使用Parallel Scavenge收集器生效 |
CMSInitiatingOccupancyFraction | 设置CMS收集器在老年代空间被使用多少后触发垃圾收集,默认值为68%,仅使用CMS收集器时生效 |
UseCMSCompactAtFullCollection | 设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理。仅在使用CMS收集器时生效 |
CMSFullGCsBeforeCompaction | 设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。仅在使用CMS收集器时生效 |
默认的收集器详解
之前讲过,就不再赘述了:【JVM】自动内存管理机制《五》---垃圾收集器(索命黑白无常回收垃圾对象)
小结
到目前为止,讲完了内存区域划分,和回收分配给对象的内存,接下来讲如何给对象分配内存:【JVM】自动内存管理机制《七》---内存分配与回收策略