• 类加载机制


    类加载的三个阶段

    加载
      jvm通过类加载器把java文件加载到内存中并生成一个class文件。
    连接
      验证:class文件被加载进来之后,java虚拟机规范就会校验文件类容,来判断文件是否符合语法规范。
      准备:语法校验成功之后,就会给这个类、变量分配内存、赋予虚拟机初始值。
      解析:就是将符号引用转换为直接引用的过程。
    初始化
      和准备阶段的赋值不一样,主要是程序对类的变量指定代码初始值,执行静态代码块。

    类加载的时机

      1 创建类的实例,也就是new一个对象
      2 访问类或接口的静态变量、静态方法时
      3 反射(Class.forName("com.lyj.load"))
      4 初始化一个类的子类(会首先初始化子类的父类)

    类加载器种类

    启动类加载器(Bootstarp ClassLoader)
    负责加载JRE的核心类库,如JRE目标下的rt.jar, charsets.jar等

    扩展类加载器(Extension ClassLoader)
    负责加载JRE扩展目录ext中jar类包

    系统类加载器(Application ClassLoader)
    负责加载ClassPath路径下的类包

    用户自定义加载器(User ClassLoader)
    负责加载用户自定义路径下的类包

    类加载机制

    缓存机制:
      所有加载过的Class都会被缓存,下次需要用到时直接去缓存区拿,拿不到的时候才去读取类的二进制数据并转成Class对象缓存起来。所以修改了Class后,必须重新启动JVM,程序所做的修改才会生效的原因。
    全盘负责机制:
      当一个类加载器负责一个类的加载时,该类所依赖的和引用的其他类也将由该类加载器负责载入,除非显示声明。
    双亲委派机制:
      下图是类加载器的父子关系,首先会尝试让顶级父加载器加载,当父加载器无法加载的时候才一级一级往下分发,直到被加载成功为止。
    双亲委派的优点:
      1. 沙箱安全机制
      2. 避免类的重复加载
      比如jdk的java.lang包下有String类,如果我们在自己的程序里面也定义一个String类,这时候由于双亲委派机制,先让启动类加载器加载,此时jdk的String类就被加载成功了,而我们的String类由于和jdk的同名,将不会被系统类加载器加载。从安全上来看避免了有人恶意篡改系统代码。

  • 相关阅读:
    20145322《信息安全系统设计基础》第13周学习总结
    20145310《信息安全系统设计基础》实验五 网络通信
    《信息安全系统设计基础》实验四 外设驱动程序设计
    《信息安全系统设计基础》实验二 固件设计
    《信息安全系统设计基础》实验三报告
    20145321《信息安全系统设计基础》第14周学习总结
    20145321 《信息安全系统设计基础》第13周学习总结
    《信息安全系统设计基础》实验五报告
    20145321 《信息安全系统设计基础》第12周学习总结
    《信息安全系统设计基础》实验四报告
  • 原文地址:https://www.cnblogs.com/wlwl/p/11324387.html
Copyright © 2020-2023  润新知