类加载--jvm的加载、链接和初始化

一、加载

JVM将Java类的二进制形式加载到内存中,并且可以将它缓存在内存中,以备将来再次使用这个类。如果没有找到指定的类,就会抛出一个错误,进程就在这里结束了。

二、链接

在这个阶段需要做三件事:验证、准备和解析。验证的意思是,JVM会根据Java变成语言和JVM的语义要求检查这个二进制形式。假如你篡改编译后的类文件,那么这个类文件可能就不再有效了。

准备工作是为执行准备特定的类。这包括这个类的静态变量和其他数据分配内容空间。

解析是检查特定的类是否引用了其他类/接口,以及是否也能找到和加载其他的类/接口。这个检查将针对被引用的类/接口递归进行加载、链接和初始化。

三、初始化

在这最后一步中,JVM会利用所赋的值或者默认值将静态变量初始化,并执行静态的初始化程序(static块中的代码)。初始化发生在执行main方法之前。但是,在可以初始化指定的类之前,它的父类必须先初始化。如果还没有加载和链接父类,JVM就会先加载和链接父类。同样,当父类要初始化时,父类的父类也要先初始化。这个过程是递归进行的,直到初始化的类称为层次结构中最上面的类为止。



发布了40 篇原创文章 · 获赞 22 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章