jdk1.8默认垃圾回收器的组合

问题是什么?

线上运行的项目,在不指定jvm运行参数的情况下,默认的垃圾回收器的组合是什么?
针对网上一大堆的介绍,个人觉得可能是我自己没有理解吧,总感觉有一些问题,或者欠缺点什么?
网上的言论大体上有一下两种:

  1. ps + po
  2. ps + so

究竟哪个是正确的呢?
答案是:ps + po

验证

我这里有几个java进程

[root@Game-TEST ~ 00:47:06]# jps
14576 CrossFamilyTopServerStart
14352 Start
1797 jar
[root@Game-TEST ~ 00:47:25]# jinfo -flags 14352
Attaching to process ID 14352, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=264241152 -XX:MaxHeapSize=4217372672 -XX:MaxNewSize=1405616128 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88080384 -XX:OldSize=176160768 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC

可以看到这里默认的jvm运行参数为:-XX:+UseParallelGC,查看周志明老师深入理解java虚拟机中关于垃圾回收器的介绍来看,这个参数对应的垃圾回收器的组合应该为:ps + so(红色框选中的部分)
在这里插入图片描述
乍一看!这是为什么呢,不是说默认的是ps + po么?
这就涉及到jdk版本的问题了,可以看看参考资料里面的描述:大致意思就是在jdk1.8以后-XX:+UseParallelGC是默认开启的,所以垃圾回收器的组合就是ps+po,但是为什么命令行的显示来看这个参数没有被指定呢?这个。。。。。不懂,留着后面再看吧!

我们也可以用下面的指令来查看,现在想想这个应该是最直接的!

[root@Game-TEST ~ 00:55:50]# java -XX:+PrintGCDetails -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Heap
 PSYoungGen      total 75264K, used 2580K [0x000000076c380000, 0x0000000771780000, 0x00000007c0000000)
  eden space 64512K, 4% used [0x000000076c380000,0x000000076c605368,0x0000000770280000)
  from space 10752K, 0% used [0x0000000770d00000,0x0000000770d00000,0x0000000771780000)
  to   space 10752K, 0% used [0x0000000770280000,0x0000000770280000,0x0000000770d00000)
 ParOldGen       total 172032K, used 0K [0x00000006c4a00000, 0x00000006cf200000, 0x000000076c380000)
  object space 172032K, 0% used [0x00000006c4a00000,0x00000006c4a00000,0x00000006cf200000)
 Metaspace       used 2216K, capacity 4480K, committed 4480K, reserved 1056768K
  class space    used 243K, capacity 384K, committed 384K, reserved 1048576K

出现了ParOldGen这个就是po的垃圾回收器了,所以默认情况下jdk1.8的默认垃圾回收器的组合为:ps+po!

参考资料

JVM默认老年代回收是 PSMarkSweep(Serial-Old) 还是Parallel Old?
《深入理解java虚拟机》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值