Java教程

从JDK源码查看类加载过程

本文主要是介绍从JDK源码查看类加载过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java代码执行过程

执行Java代码的过程: 执行Java.exe调用JVM.dll创建Java虚拟机 -> 调用由c++编写的引导类加载器,该类加载器会加载核心类库 -> 调用sun.misc.Launcher的构造方法会创建Launcher类对象,在该构造方法中会创建扩展类加载器和应用类加载器
image
执行过程如下图所示
image
因为Java类加载模式是懒加载,所以并不会在一开始就将所用类一次性加载到JVM中,会根据双亲委派机制对类进行加载。

各种类加载器

引导类加载器: 用于加载核心类库,比如rt.jar、或String.class,引导类加载器为最上层加载器,加载的目录为\JDK\1.8\jre\lib
扩展类加载器:用于加载扩展类包,扩展类加载器在引导类加载器下层,加载目录为JDK\jre\lib\ext
应用类加载器:用于加载用户自定义的类,加载目录为target目录下的class文件。
自定义类加载器: 用户自定义类加载器,加载目录可以自定义。

类加载的过程

加载:将class文件以二进制数组读取到内存中。
验证:校验class文件的字节码是否符合规则。
初始化:给静态变量分配内存并设置默认值。
解析:将符号引用转换为直接引用,该阶段会将静态符号引用转换为内存地址值用于执行,这个过程被称为静态链接,动态链接是指在程序执行过程中进行符号引用转换。
初始化:为静态变量赋值并执行静态语句块。

符号引用:符号就是在Java文件

这篇关于从JDK源码查看类加载过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!