类加载

类加载是JVM把.class文件加载进内存的一种机制,在加载完之后,会生成可以直接被JVM使用的Java类型。

 

所以类加载所做的事情就是如何把.class文件逐步解析成可以被直接使用的Java类型。

它主要分为3个大步骤,分别是加载、连接和初始化。连接又分为3个小步骤,分别是检验、准备和解析。

 

在加载的部分,JVM会通过.class文件的全限定类名来加载此类的二进制字节流,并且在内存中生成一个Class模板对象,作为方法区中这个类的访问入口。

 

在连接的验证阶段,顾名思义就是要验证是否合法,验证的是Class文件字节流中包含的信息是否符合JVM的要求,并且不会威胁到JVM的安全。

它包括几种验证,

文件格式的验证:保证输入的字节流能正确地解析

元数据的验证:是否存在父类,父类的继承链是否正确,抽象类是否实现了其父类或接口之中要求实现的所有方法,字段、方法是否与父类产生矛盾等。

字节码验证:确定程序语义是合法的、符合逻辑的

符号运用验:保证在解析阶段,符号引用可以转化为直接引用。

 

在准备阶段,主要是为类变量分配内存并设置初始值

 

在解析阶段,JVM将常量池内的符号引用替换为直接引用。(这是因为在引用未被分配内存之前并不知道具体将会处于哪块内存,因此暂时用符号引用来代替。在确认所处内存位置之后需要转化为直接引用)

 

最后进行初始化,在初始化阶段,才真正开始执行类中定义的 Java 程序代码。

 

posted @ 2021-04-05 13:26  缘未到  阅读(3)  评论(0编辑  收藏  举报