三种方式查看 JVM 垃圾收集器

一、引言

不同版本的 JVM默认使用的垃圾收集器是不同的,目前的新生代和老年代的垃圾收集器如下图所示,新生代和老年代之间的连线表示这些垃圾收集器可以进行搭配使用

垃圾收集器的名字和 JVM 里面的参数对照表如下,即在 JVM里面并不是存储的垃圾收集器的名字,而是有一个其他的名字。它是有一个对应关系的,如下所示:

|-------------------|----------------------------------|
| 垃圾收集器类型 | JVM 参数名称 |
| Serial | def new generation |
| ParNew | par new generation |
| Parallel Scavenge | PSYoungGen |
| Parallel Old | ParOldGen |
| CMS | concurrent mark-sweep generation |
| Serial Old(MSC) | tenured generation |
| G1 | garbage-first heap |
| ZGC | |

二、方法

2.1 PrintCommandLineFlags

这种方式仅适用于 windows 平台,直接在控制台输入下面的命令行,可以从展示信息中看到 当前机器 JVM 的垃圾回收器类型

XML 复制代码
java -XX:+PrintCommandLineFlags -version
bash 复制代码
# 输入命令:java -XX:+PrintCommandLineFlags -version
C:\Users\Administrator>java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=255140800 -XX:MaxHeapSize=4082252800 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

2.2 通过 GC 日志和堆信息

默认情况下,GC 日志和 Heap 信息我们是看不到的,可以通过增加 VM 参数的方式启动。这样当 GC 发生时,我们就能看到关于垃圾回收器的相关信息了。

我们人为制造一个 full gc 的操作,然后添加 vm 参数,观察输出日志的变化,如下所示:

java 复制代码
public class Test {
	
	public static void main(String[] args) {
		List<Object> list = new LinkedList<>();
		while(true){
			list.add(new byte[1024]);
		}
	}
}
java 复制代码
-verbose:gc -XX:+PrintGCDetails

2.3 通过 jmap -heap vmid

相关推荐
刘大猫.9 分钟前
Arthas dashboard(当前系统的实时数据面板)
jvm·arthas·dashboard·当前系统的实时数据面板·dashboard命令·arthas命令
longlongqin2 小时前
JVM 内存结构?
jvm
Joeysoda11 小时前
Java数据结构 时间复杂度和空间复杂度
java·开发语言·jvm·数据结构·学习·算法
18你磊哥11 小时前
java重点学习-JVM组成
java·开发语言·jvm
蜜桃小阿雯13 小时前
JAVA开源项目 校园美食分享平台 计算机毕业设计
java·jvm·spring boot·spring cloud·intellij-idea·美食
longlongqin14 小时前
JIT(即时编译)技术
jvm
ZachOn1y20 小时前
Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)
java·jvm·后端·java-ee·团队开发·个人开发
寻求出路的程序媛1 天前
JVM —— 类加载器的分类,双亲委派机制
java·jvm·面试
深鱼~1 天前
【JVM】垃圾回收机制|死亡对象的判断算法|垃圾回收算法
jvm
Lill_bin1 天前
JVM内部结构解析
jvm·后端·spring cloud·微服务·云原生·ribbon