Java是一种动态解释型语言,类(class)只有被加载到JVM中后才能运行。每当一个Java程序运行时,都会有一个对应的JVM实例,只有当程序运行结束后,这个JVM才会退出。JVM实例通过调用类的main()方法来启动一个Java程序。当运行指定程序时,JVM将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成一个完整的Java应用程序。
类的加载方式分为隐式加载和显式加载,隐式加载指的是程序在使用new等方式创建对象时,会隐式地调用类的加载器把对应的类加载到JVM中。显示加载指的是通过直接调用class.forName()方法来把所需的类加载到JVM中。
类的加载的主要步骤分为如下3步:
(1)装载,根据查找路径找到对应的class文件,然后导入
(2)链接,可以分为3小步:
a.检查,检查待加载的class文件的正确性
b.准备,给类中的静态变量分配存储空间
c.解析,将符号引用转换成直接引用
(3)初始化,对静态变量和静态代码块执行初始化工作
补充:对于将符号引用转换成直接引用:
在java中,一个java类将会编译成一个class文件。在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool(假设)来表示Tool类的地址。而在类装载器装载People类时,此时可以通过虚拟机获取Tool类 的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址。
JVM加载class文件的一些理解
最新推荐文章于 2022-08-08 10:25:51 发布