各位老铁,大家好。
我是小咖,今天和大家一起来唠嗑一下类的加在过程。
在我们启动Java程序的时候,入口是一个main方法,然后执行代码。
我们知道类的加载是由类加载器完成的。类加载分为:引导类加载器、扩展类加载器、应用程序类加载器,以及自定义的类加载器。
运行Java代码时,会调用C++创建引导类加载器,然后C++调用Java代码创建jvm启动器实例sun.misc.Launcher,该类用于创建其他类加载器。
详见Launcher.ExtClassLoader扩展类加载器
Launcher.AppClassLoader应用程序类加载器
JVM默认使用Launcher的getClassLoader()方法返回的类加载器AppClassLoader的实例加载我们的应用程序。
类装载分为以下 5 个步骤:
加载:根据查找路径找到相应的 class 文件然后导入;
检查:检查加载的 class 文件的正确性;
准备:给类中的静态变量分配内存空间;
解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,直接引用直接指向内存中的地址;
初始化:对静态变量和静态代码块执行初始化工作。
类装载完成,开始执行代码。
今天的分享就到这里,希望有所收获!