虚拟机类加载机制:把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。
在Java语言中,类型的加载、连接、初始化过程都是在程序运行期间完成的,并为其带来了高度灵活性,动态加载。
- 类加载的时机:
类的生命周期:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolvtion)、初始化(Initialization)、使用(Using)、卸载(Unloading) - 类加载过程:
- 加载:1.通过一个类的全限定名来获取定义该类二进制字节流。2.将二进制字节流所代表的静态存储结构转化为方法区的运行时数据结构。3.生成对应的Class对象。
- 验证:确保Class文件对应的二进制字节流当前的信息符合当前虚拟机的要求,确保安全。
- 准备:正式为类变量分配内存并设置类变量初始值(通常为零值),在方法区中。
- 解析:虚拟机将常量池中的符号引用替换为直接引用。
- 初始化:clinit()
- 类加载器:
- 类与类加载器:对于任意一个类,在虚拟机方法区内存中都需要其类加载器与其本省来确定。
- 双亲委派模型:类加载器类型:1.启动类加载器(Bootstrap Classloader) 2.扩展类加载器(Extention ClassLoader) 3.应用程序类加载器(Applicarion ClassLoader)
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层次的类加载
器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法完成这个加载请求时,子类加
载器才会尝试自己去加载。