Java类加载和卸载的跟踪

博客搬家自https://my.oschina.net/itsyizu/blog/

什么是类的加载和卸载

Java程序的运行离不开类的加载,为了更好地理解程序的执行,有时候需要知道系统加载了哪些类。一

为什么要跟踪

般情况下,系统加载的类存在于文件系统中,以jar文件或者class文件的形式存在,可以直接在通过文件系统查看。但是在动态代理、AOP等编程过程中国,系统会在运行过程中动态地生成某些类,这些类相对比较隐蔽,无法通过文件系统找到,为此,虚拟机提供了类的加载|卸载跟踪参数来帮助我们进行程序的调试。

如何跟踪

使用下面的参数来同时跟踪类的加载和卸载

-verbose:class

也可以单独使用下面参数来跟踪类的加载

-XX:+TraceClassLoading

也可以单独使用下面参数来跟踪类的卸载

-XX:+TraceClassUnloading

代码来帮忙

下面的程序是一个java的反射的例子,执行这个程序时,使用-verbose:class参数来跟踪类的加载和卸载

public class SpyUnloadClass  {

    public static void main(String[] args) {
    Class<?> demo1 = null;
    Class<?> demo2= null;
    Class<?> demo3 = null;
    try {
        // 一般尽量采用这种形式
        demo1 = Class.forName("PartionOnStack");
    } catch (Exception e) {
        e.printStackTrace();
    }
    demo2 = new PartionOnStack().getClass();
    demo3 = PartionOnStack.class;

    System.out.println("类名称   " + demo1.getName());
    System.out.println("类名称   " + demo2.getName());
    System.out.println("类名称   " + demo3.getName());
    }

}

执行结果如下图所示:

image

JDK工具的使用

Java虚拟允许程序猿在运行程序时打印和查看系统中的类的分布情况,在系统启动时加参数

-XX:+PrintClassHistogram
然后在java的控制台下按下Ctrl+Break(键盘右上角)组合键,控制台就会显示当前类的信息

image

posted @ 2017-02-18 23:56  shugen  阅读(667)  评论(0编辑  收藏  举报