首先说一下关于jdk8的jvm默认垃圾收集器是什么的问题,网上看了很多这个的帖子,感觉很懵逼,大部分都是猜的,实践者很少。所以我还是秉承别废话,上干货的传统。
1、首先要明确一点,既然是默认,那么在使用jvm时,应用启动对应的jvm参数必须是默认的,不然查了半天都乱了
2、执行
java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=1055594816 -XX:MaxHeapSize=16889517056 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC java version "1.8.0_251" Java(TM) SE Runtime Environment (build 1.8.0_251-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
-XX:+UseParallelGC 这个就是使用的垃圾收集器,看到这个有人会疑问,这个是老年代收集器,还是年轻代收集器,别急,我一开始也疑问,后来看到相关帖子说,这个可以激活
UseParallelOldGC(老年代收集器),同样如果设置了UseParallelOldGC,同样会激活UseParallelGC 也就是说,如果定义一个,那么另一个也就确定了。那么到底是不是呢,必杀器来了。
3、使用 jinfo -flag UseParallelOldGC id 注意此id为应用服务的id 如果查看结果有 + 号说明是启用 ,如果是 - 则是未启用,到此查看默认收集器肯定能确定了。
[root@localhost /]# jinfo -flag UseParallelOldGC 4074
-XX:+UseParallelOldGC
明显是启用状态
4、最后总结一下:
七大垃圾回收器 Serial、ParNeW、Parallel Scavenge、 Serial Old、 Parallel Old、 CMS、 G1
盗图一张
参考:https://www.jianshu.com/p/ad98b85bb420