Android反射-JVM的加载机制

注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。

本篇文章内容来自于
夯实JAVA基本之二 —— 反射(1):基本类周边信息获取

目录

  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对象时就会被卸载,结束类的生命周期。如果再次用到就再重新开始装载、链接和初始化的过程。
注意:类只会被装载一次!!!!利用装载的类可以实例化出各种不同的对象!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容