zoukankan      html  css  js  c++  java
  • 类加载器

    User java.lang.Class

      所有的类都是Class类的对象
    类加载:

      由.java源文件编译生成.class二进制字节码文件

      当运行时,首先Java虚拟机会将本地/网络阐传输.class文件加载到内存当中,那么加载的过程就叫做类加载

    类加载的过程

      

      加载过程:将.class文件通过IO流的方式加载到内存当中

        将.class文件字节码内容加载到内存当中

        先会将静态数据转换成方法区中的运行的数据结构

        在堆内存当中生成一个代表这个类的Class对象,这个Class类的对象就是作为方法区数据访问的入口 Class.forName(com.wdksoft.User);

      链接过程:

        验证阶段:验证字节码文件的准确性,包含文件格式,元数据,符号引用,字节码等等

        准备阶段:给类中的静态变量分配内存,并赋予初始值

        解析阶段:将虚拟机常量池的符号引用替换成字节引用的过程

      初始化过程:初始化过程就会对类中的静态变量初始化为指定的值,执行静态代码块,执行构造

      使用过程
      卸载过程

    类加载时机

      创建类的实例,也就是new一个对象

      访问某个类或接口的静态变量,或者对该静态变量赋值

      调用类的静态方法

      反射(Class.forName("com.lyj.load"))

      初始化一个类的子类(会首先初始化子类的父类)

      JVM启动时标明的启动类,即文件名和类名相同的那个类

      

       

    类加载器的种类

      引导类加载器:负责加载JRE核心类库,jre包下rt.jar,charsets.jar等,C++语言编写,无法直接访问

      扩展类加载器ExtClassLoader:负责加载JRE扩展目录ext中的jar包

      系统类加载器AppClassLoader:负责加载classPath路径下的类包

      自定义类记载器:负责加载用户自定义下的类包

      实现自定义类加载器:extends ClassLoader,重写loadClass方法进行类的加载


    三.类加载机制(重点)
      全盘负责委托机制
        当进行类加载的时候,如果手动指定了ClassLoader,那么该类所依赖和引用的类也由这个类加载器进行加载
        User->UserParent
        指定User使用特定的类加载器,那么跟User类有依赖和引用关系的类也用这个类加载器进行加载

      双亲委派机制

        java类随着它的加载器一起具备了一种带有优先级的层次关系.

      


      指先委托父类加载器寻找目标类,如果父类加载器无法进行类的加载则子类加载器自身处理

      沙箱安全机制:自定义的String.class不会被加载,这样可以防止核心API库被随意篡改
      避免类重复加载:当附加在其加载了该类是,就没有必要子类加载器也进行加载

      如何破坏双亲委派机制
        为什么要破坏双亲委派机制:父加载器需要委托子加载器在其进行加载

    如何破坏:
      重写ClassLoad类中的loadClass方法,指定加载哪一个类
      手动调用系统类加载器
        Thread.currentThread().getContextClassLoader();
      重写findClass

    监控类加载过程
      在当前启动类当中加入-verbose:class参数,启动则可以看到整个类加载的过程

    热部署
      时时检测类,如果类发生更改则自动进行重新编译,编译之后重新加载该类

  • 相关阅读:
    linux环境下安装nginx步骤
    时间戳—时间互转 java
    redis配置中踩过的坑
    在Windows端安装kafka 提示错误: 找不到或无法加载主类 的解决方案
    Windows平台kafka环境的搭建
    在windows上搭建redis集群(redis-cluster)
    身份证号打码隐藏
    PIL获取图片亮度值的五种方式
    Python文件排序
    PIL
  • 原文地址:https://www.cnblogs.com/whtt/p/12470705.html
Copyright © 2011-2022 走看看