JAVA类加载机制

1. 加载:通过类加载器把 .class 文件读入到一个字节数组,然后产生Class对象。

    a ) Bootstrap ClassLoader:负责加载存放在jre\lib下,或被-Xbootclasspath参数指定的路径中的,并且能被虚拟机识别的类库(如rt.jar,所有的java.*开头的类)。启动类加载器是无法被Java程序直接引用的。

    b )Extension ClassLoader:负责加载jre\lib\ext目录中,或者由java.ext.dirs系统变量指定的路径中的所有类库(如javax.*开头的类),开发者可以直接使用扩展类加载器。它的父加载器是 Bootstrap ClassLoader。

    c ) Application ClassLoader:负责加载用户类路径(环境变量classpath)所指定的类或者系统属性 java.class.path 所指定的目录中的类,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。它的父加载器是Extension ClassLoader。

    d ) User-defined ClassLoader:负责用户指定类的加载,继承在Application ClassLoader。

 

2. 验证一共有四个步骤:

    a)文件格式的验证:验证文件格式符合Java类的文件格式规范,确保进入内存方法区的字节流符合规范。

    b)元数据的验证:语法分析确保符合Java语法规范。

    c)字节码验证:对类的方法进行验证,确保不会对JVM产生安全危害。

    d)符号引用验证:为解析阶段符号引用转变为直接引用做准备。对常量池中的各种符号引用做匹配性校验。

 

3. 准备:

    为静态变量分配内存并设置默认的初始值。

 

4. 解析:

    将符号引用替换为直接引用。

 

5. 类初始化:

    a)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类。

    b)如果类中存在初始化语句,就依次执行这些初始化语句。

你可能感兴趣的:(java,ClassLoader,Class,机制)