参考文章
- 第 68 页和第 212 页提到了
-XX:+TraceClassLoading
选项 - 第 7 章描述了“虚拟机类加载机制”
思路
开启 -XX:+TraceClassLoading
选项后,可以看到有哪些类被加载。
如果在程序运行过程中,可以有明显的暂停(例如等待用户数输入),那么应该就可以看到哪些类是刚刚被加载的。
基于上述思路,我们可以在程序运行时等待用户输入,每当用户输入一个回车后,程序中就加载一个新的类。具体的代码请参见下文。
实战
- 找一个临时目录
d
,在目录d
执行如下命令
mkdir -p com/coder/rising
- 创建源文件: 在目录
d
执行如下命令
touch com/coder/rising/ClassLoading.java
将如下内容保存在ClassLoading.java
中
package com.coder.rising;
import java.util.Scanner;
public class ClassLoading {
private static Scanner scanner = new Scanner(System.in);
/**
* 提示用户输入一行文字(其实只按回车即可)并等待用户输入
*/
private static void promptAndWait() {
System.out.println("请按回车");
scanner.nextLine();
}
public static void main(String[] args) throws Exception {
promptAndWait();
// 第一次按回车后,可以看到 One 这个类被加载
Object o = new One();
promptAndWait();
// 第二次按回车后,可以看到 Two 这个类被加载
o = new Two();
promptAndWait();
// 第三次按回车后,可以看到 Three 这个类被加载
o = new Three();
}
}
class One {
}
class Two {
}
class Three {
}
-
编译: 在目录
d
执行如下命令
javac com/coder/rising/ClassLoading.java
-
运行: 在目录
d
执行如下命令
java -XX:+TraceClassLoading -cp . com.coder.rising.ClassLoading
-
第一次按回车,看到
One
这个类被加载
第一次按回车之后
-
第二次按回车,看到
Two
这个类被加载
第二次按回车之后
-
第三次按回车,看到
Three
这个类被加载
第三次按回车之后
网友评论