注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。
本篇文章内容来自于
夯实JAVA基本之二 —— 反射(1):基本类周边信息获取
目录
- JVM的加载机制【两个阶段】
--1.1 编译(阶段一)
--1.2 运行(阶段二)【三个步骤】
----1.2.1 装载
----1.2.2 链接
----1.2.3 初始化
1. JVM的加载机制
即JVM是如何将我们写的类对应的java文件加载到内存中的。
//举例用到的类
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.setName("cat");
}
public static class Animal{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
在拿到一个java源文件后,如果要经过源码编译,要经过两个阶段:
1.1 编译(阶段一)
javac Main.java
执行后在同一目录下生成Main.class和Main$Animal.class。
1.2 运行(阶段二)
java Main
在这一阶段,又分为三个小阶段:装载,链接,初始化
1.2.1 装载
类的装载是通过类加载器完成的。
加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这个类的java.lang.Class对象。用来封装数据。
但是同一个类只会被类装载器装载一次,记住:只装载一次!
1.2.2 链接
链接就是把二进制数据组装为可以运行的状态。
链接分为校验,准备,解析这3个阶段。
- 校验一般用来确认此二进制文件是否适合当前的JVM(版本)。
- 准备就是为静态成员分配内存空间,并设置默认值。
- 解析指的是转换常量池中的代码作为直接引用的过程,直到所有的符号引用都可以被运行程序使用(建立完整的对应关系)。
1.2.3 初始化
初始化就是对类中的变量进行初始化值。
完成之后,类型也就完成了初始化,初始化之后类的对象就可以正常使用了。
直到一个对象不再使用之后,将被垃圾回收。释放空间。
当没有任何引用指向Class对象时就会被卸载,结束类的生命周期。如果再次用到就再重新开始装载、链接和初始化的过程。
注意:类只会被装载一次!!!!利用装载的类可以实例化出各种不同的对象!