本文共 1208 字,大约阅读时间需要 4 分钟。
Java虚拟机通过将描述类的数据从Class文件加载到内存,并进行验证、转换、解析和初始化,最终形成可直接使用的Java类类型,这一过程称为类的加载机制。Class文件不仅代表Java语言中的类或接口,其实是一串二进制字节流,可能来源于本地磁盘、网络、数据库、内存或动态生成。
类的生命周期包括七个阶段:加载、验证、准备、解析、初始化、使用和卸载。其中验证、准备和解析统称为连接阶段。需要注意的是,生命周期中的“加载”指的是将Class文件加载到内存,而不是类加载机制中的加载。
类的主动引用有六种情况:
被动引用不会引起类初始化,例如通过子类引用父类静态字段时只会初始化父类。
加载阶段完成以下三项:
验证确保Class文件符合虚拟机要求。包括:
为类静态变量分配内存并初始化为零值。注意:final static常量在编译时已转化为具体值,不会在准备阶段初始化。
待解决。
执行clinit方法,赋值静态变量并执行静态代码块。注意事项:
类加载器负责将Class文件加载到内存,全类名和类加载器共同确立唯一性。从Java虚拟机角度,存在两种加载器:引导类加载器(C++实现)和其他类加载器(Java实现,继承ClassLoader)。从程序员角度,分为启动类加载器、扩展类加载器和应用程序类加载器。
启动类加载器加载核心类库和其他加载器;扩展类加载器加载扩展目录下的类;应用程序类加载器加载用户类路径。
双亲委派机制防止核心API篡改。具体实现:
优势:确保核心类如java.lang.Object无法篡改,因为这些类由引导类加载器加载。
待解决。
转载地址:http://yxefk.baihongyu.com/