首页 > 其他 > 详细

查看JVM使用的默认的垃圾收集器

时间:2020-04-04 20:05:49      阅读:52      评论:0      收藏:0      [点我收藏+]

 

一、查看步骤

cmd执行命令:

java -XX:+PrintCommandLineFlags -version

输出如下(举例):

技术分享图片

 

 针对上述的-XX:UseParallelGC,这边我们引用《深入理解Java虚拟机:JVM高级特性与最佳实践》的介绍:

技术分享图片

 

也就是说,打开此开关,使用的垃圾收集器是:新生代(Parallel Scavenge),老年代(Ps MarkSweep)组合。

 

二、验证下,是不是那么回事吧

我用ide起了一个程序,然后在main中进行长时间睡眠。启动时,设置其VM 参数如下:

技术分享图片

 

然后用Jconsole连接该程序,切换到VM概要这个tab,注意下图红圈圈出来的地方:

技术分享图片

 

 结合第一步中的资料,很容易验证,使用-XX:UseParallelGC的情况下,使用的垃圾收集器为:新生代(Ps Scanvenge),老年代(Ps MarkSweep)。

但不确定 Ps MarkSweep 就是Serial Old?  设置了 -XX:+UseParalleOldGC  发现 老年代还是显示 Ps MarkSweep

 

三、Ps Scanvenge的简要介绍

技术分享图片

技术分享图片

技术分享图片

 

这边附上我的简单理解:该垃圾收集器适用于新生代,采用标记复制算法、多线程模型进行垃圾收集。

与其他新生代垃圾收集器的差别是,它更关注于吞吐量,而不是停顿时间。一般来说,需要与用户交互的

程序更关注较短的停顿时间,而如果是需要达成尽量大的吞吐量的话,则该处理器会更加适合。

其通过-XX:UseAdaptiveSizePolicy参数,可以开启其自动调节功能,适用于对垃圾收集器的调优不太了解的

用户。

 

四、Serial Old的简要介绍

技术分享图片

我的理解:和其他老年代垃圾处理器一样,都是使用的标记整理算法,(毕竟没有靠山可以担保,没法复制,只能自己整理了,哎),

采用单线程处理模型。

 

五、Serial Old和Ps MarkSweep的区别

技术分享图片

如上图所示,也说了,在实际中,(正如第二节的截图所示),实际应用中,大多使用的就是Ps MarkSweep。

Ps MarkSweep是以Serial Old为模板设计的,按照我们程序员的说法,估计是拷贝过来,改吧改吧出来的。

所以差不太多。

 

 

代码查看垃圾收集器

List<GarbageCollectorMXBean> l = ManagementFactory.getGarbageCollectorMXBeans();
for(GarbageCollectorMXBean b : l) {
    System.out.println(b.getName());
}

 

查看JVM使用的默认的垃圾收集器

原文:https://www.cnblogs.com/tiancai/p/12633199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!