【JVM】自动内存管理机制《六》---面试官问JDK中默认的垃圾收集器?

本文详细介绍了如何查看JDK1.8.0_25的默认垃圾收集器,通过命令行操作展示了ParallelScavenge+SerialOld(PSMarkSweep)收集器组合的使用,并对比了不同JDK版本的默认垃圾回收策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

导读

查看JDK1.8.0_25的默认垃圾收集器

 其他JDK版本的默认垃圾回收器呢?

 默认的收集器详解

 小结


导读

 在上篇博客中:【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时进行内存回收的线程数
GCTimeRatioGC时间占总时间的比率,默认值为99,即允许1%的GC时间。仅使用Parallel Scavenge收集器时生效
MaxGCPauseMillis设置GC的最大停顿时间。仅在使用Parallel Scavenge收集器生效
CMSInitiatingOccupancyFraction设置CMS收集器在老年代空间被使用多少后触发垃圾收集,默认值为68%,仅使用CMS收集器时生效
UseCMSCompactAtFullCollection设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片整理。仅在使用CMS收集器时生效
CMSFullGCsBeforeCompaction设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片整理。仅在使用CMS收集器时生效

 默认的收集器详解

 之前讲过,就不再赘述了:【JVM】自动内存管理机制《五》---垃圾收集器(索命黑白无常回收垃圾对象)

 小结

 到目前为止,讲完了内存区域划分,和回收分配给对象的内存,接下来讲如何给对象分配内存:【JVM】自动内存管理机制《七》---内存分配与回收策略

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值