我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息。
为了方便演示,我们使用下面的程序作为本次的演示程序。
/**
* @author chenshuyi
* @date 2018.09.30
*/
public class ClassLoadDemo {
public static void main(String[] args) {
String name = "chenshuyi";
System.out.println("Hello, I'm " + name);
}
}
跟踪类的加载和卸载 -verbose:class
我们使用下面的参数运行程序:
java -verbose:class com.chenshuyi.ClassLoadDemo > class_load_info.txt
之后我们打开 class_load_info.txt 文件。因为该文件太大,所以我们节选一部分:
...省略...
[Loaded java.util.ArrayList from /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar]
...省略...
[Loaded java.util.HashMap from /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar]
...省略...
[Loaded com.chenshuyi.ClassLoadDemo from file:/Users/yurongchan/Yosemite/Code/practice/target/classes/]
...省略...
从上面可以看到 JVM 分别加载了 ArrayList、HashMap 类,以及我们自己定义的 ClassLoadDemo 类。
跟踪类的加载 -XX:+TraceClassLoading
该参数与可以显示类的加载信息,输出的结果和 -verbose:class
一样,但比起它少了类的卸载信息。
跟踪类的卸载 -XX:+TraceClassUnloading
该参数与可以显示类的加载信息,输出的结果和 -verbose:class
一样,但比起它少了类的加载信息。
但实际上我们通过上面这个简单的例子,没有发现类的卸载信息,或许是例子太简单了,所以没有这个。
-XX:+PrintClassHistogram
该参数表示遇到 Ctrl-Break 后打印类实例的柱状信息,与 jmap -histo 功能相同。
了解了这些参数,能够让我们更好地了解哪些类已经被加载到 JVM 中,从而更好地排查问题。最后来个总结,加强记忆:
参数 | 含义 |
---|---|
-verbose:class | 跟踪类的加载和卸载 |
-XX:+TraceClassLoading | 跟踪类的加载 |
-XX:+TraceClassUnloading | 跟踪类的卸载 |
-XX:+PrintClassHistogram | 显示类信息柱状图 |
JVM系列目录
- JVM系列开篇:为什么要学虚拟机?
- JVM系列第1讲:Java 语言的前世今生
- JVM系列第2讲:Java 虚拟机的历史
- JVM系列第3讲:到底什么是虚拟机?
- JVM系列第4讲:从源代码到机器码,发生了什么?
- JVM系列第5讲:字节码文件结构
- JVM系列第6讲:Java 虚拟机内存结构
- JVM系列第7讲:JVM 类加载机制
- JVM系列第8讲:JVM 垃圾回收机制
- JVM系列第9讲:JVM垃圾回收器
- JVM系列第10讲:垃圾回收的几种类型
如果只是看,其实无法真正学会知识的。为了帮助大家更好地学习,我建了一个虚拟机群,专门讨论学习 Java 虚拟机方面的内容,每周针对我所发文章进行讨论答疑。如果你有兴趣,关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,小助手会拉你入群。
- JVM基础系列开篇:为什么要学虚拟机?
- JVM基础系列第1讲:Java 语言的前世今生
- JVM基础系列第2讲:Java 虚拟机的历史
- JVM基础系列第3讲:到底什么是虚拟机?
- JVM基础系列第4讲:从源代码到机器码,发生了什么?
- JVM基础系列第5讲:字节码文件结构
- JVM基础系列第6讲:Java虚拟机内存结构
- JVM基础系列第7讲:JVM类加载机制
- JVM基础系列第8讲:JVM 垃圾回收机制
- JVM基础系列第9讲:JVM垃圾回收器
- JVM基础系列第10讲:垃圾回收的几种类型
- JVM基础系列第11讲:JVM参数之堆栈空间配置
- JVM基础系列第12讲:JVM参数之查看JVM参数
- JVM基础系列第13讲:JVM参数之追踪类信息
- JVM基础系列第14讲:JVM参数之GC日志配置
- JVM基础系列第15讲:JDK性能监控命令