当前位置:首页 > 虚拟机 > 正文

深入理解jvm虚拟机 第三版


一、深入理解JVM之ClassLoader

编写Java程序时,必须使用javac命令将.java后缀的文件编译为.class文件。然后,JVM通过执行.class文件来执行您编写的程序。.class文件?
需要类加载器。

在jdk中找到er文件。该文件是JVM的可执行实例。此类中有一个getLauncher()方法。

它返回一个启动器。

ExtClassLoader和AppClassLoader是在调用构造方法时初始化的(在BootstrapClassLoader之前,因为它是在创建Java虚拟机之后加载的)。

您可以通过单击get来查看这些项目是从ExtClassLoader实例中获取的。所以这也印证了上面画的图。

加载步骤:

找到ClassLoader。AppClassLoader的一个示例是:

我无法从AppClassLoader检索findClass()方法,因此请查找:要查看每个加载器的公共父类URLClassLoader,可以在这里查看findClass()方法。

findClass方法的作用是从指定路径查找并返回传入文件名的.class文件。该方法的主要逻辑在run()方法中。

如上所示,要实现一个classLoader,只需要继承ClassLoader类并重写findClass和loadClass方法即可。

在桌面上创建了一个名为Test的Java文件,并使用javac命令进行了编译。

执行结果:

在执行结果中可以看到自定义类加载器完成了指定文件的加载,并正确执行了方法。