jvm(6)类加载机制

一.类加载机制概述

    虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,解析,初始化,最终形成可以被虚拟机直接使用的类型



二.什么情况下类不被加载?


    1.通过子类引用父类的静态字段,子类不会被初始化

    2.通过数组定义来引用类

    3.调用类的常量


三.类加载的过程?

    1.加载

        (1)通过类的权限定名获取类的二进制流

        (2)将这个字节流代表的静态数据结构转化为方法区的运行时数据结构(类比将spring xml中配置的<bean>转化为真正的bean)

        (3)在内存中生成一个代表这个类的class对象,作为这个类的各种数据的访问入口

  2.连接(和加载的过程并行执行)

        (1)验证:确保class文件的字节流中包含的信息符合当前虚拟机的要求    

        (2)准备:为类变量分配内存并设置初始值(方法区)

        (3)解析:解析阶段是虚拟机将常量池中的符号引用替换为直接引用的过程


3.初始化

    只有在使用的时候才会被初始化(new 的时候)


四.类加载器分类

    启动类加载器:由C++实现,是虚拟机的一部分,用于加载javahome下lib下的类

    扩展类加载器:加载javahome下/lib/etc目录下的类

    应用程序类加载器:加载用户类路径上所指定的类库


五.双亲委派模型

    

    优点:使java类伴随类加载器具备了带有优先级的层次关系,确保了虚拟机先从最核心的API开始查找,防止不可信的类扮演被信任的类



猜你喜欢

转载自blog.csdn.net/qq_34645958/article/details/80873880