美文网首页
使用 -XX:+TraceClassLoading 选项观察类加

使用 -XX:+TraceClassLoading 选项观察类加

作者: jyjz2008 | 来源:发表于2019-04-07 15:34 被阅读0次

参考文章

深入理解Java虚拟机(第2版)

  1. 第 68 页和第 212 页提到了 -XX:+TraceClassLoading 选项
  2. 第 7 章描述了“虚拟机类加载机制”

思路

开启 -XX:+TraceClassLoading 选项后,可以看到有哪些类被加载。
如果在程序运行过程中,可以有明显的暂停(例如等待用户数输入),那么应该就可以看到哪些类是刚刚被加载的。

基于上述思路,我们可以在程序运行时等待用户输入,每当用户输入一个回车后,程序中就加载一个新的类。具体的代码请参见下文。

实战

  1. 找一个临时目录 d,在目录 d 执行如下命令
    mkdir -p com/coder/rising
  2. 创建源文件: 在目录 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 {
}
  1. 编译: 在目录 d 执行如下命令
    javac com/coder/rising/ClassLoading.java

  2. 运行: 在目录 d 执行如下命令
    java -XX:+TraceClassLoading -cp . com.coder.rising.ClassLoading

  3. 第一次按回车,看到 One 这个类被加载

    第一次按回车之后
  4. 第二次按回车,看到 Two 这个类被加载

    第二次按回车之后
  5. 第三次按回车,看到 Three 这个类被加载

    第三次按回车之后

相关文章

网友评论

      本文标题:使用 -XX:+TraceClassLoading 选项观察类加

      本文链接:https://www.haomeiwen.com/subject/dzjsiqtx.html