【JVM】类加载器

    xiaoxiao2022-07-02  105

    目录

     

    JVM体系结构

    java类的三种状态

    java类的生命周期

    类加载器

    分类:

    源码:

    双亲委派加载机制


    JVM体系结构

     

    java类的三种状态

    SOURCE:源码状态(静态)

    CLASS:二进制字节码文件状态(静态)

    RUNTIME:运行时状态(加载到JVM中的状态)

    从CLASS——RUNTIME的过程需要类加载器

     

    java类的生命周期

    当程序使用某个类,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来对该类进行初始化。如无意外,JVM会连续完成这三个步骤,所有有时也成为类加载或类初始化。 

    类加载: 将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说,当程序使用任何类时,系统都会为之创建一个java.lang.Class对象。

    系统中所有类实际上也是对象,他们都是java.lang.Class的实例

    由类加载器完成的。

    类的连接: 连接负责把类的二进制数据合并到JRE中,分为3阶段:

    验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致(确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全)

            文件格式验证、元数据验证、字节码验证、符号引用验证

    准备:类准备阶段则负责为类的类变量分配内存,并设置默认初始化

            为类变量(static修饰的变量)分配内存并设置类变量初始值(通常情况下数据类型的值为0)的阶段,这些变量所使用的内存都将在方法区中进行分配。不包括实例变量(实例变量在对象实例化时随着对象一起分配在Java堆中)

     

    解析:将类的二进制数据中的符号引用替换成直接引用

    类的初始化: 主要对类变量或其他资源进行初始化。

     

    类加载器

    类加载器:ClassLoader将类的class文件读入内存,并为之创建一个java.lang.Class对象

    分类:

     

    源码:

    双亲委派加载机制

            某个特定的类加载器在接到加载类的请求时,首先将加载任务委派给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

    特点:

    父类能加载的不给子类加载;这个类加载过,就不能再加载。

    优点:

    自带优先级;是一种安全机制,程序安全是JDK的事(程序员写了不安全的程序,JDK有责任不让他运行),文件安全是系统的事;如果自己写了一个java.lang.Object的类,将不会被加载运行

     

    最新回复(0)