zoukankan      html  css  js  c++  java
  • Java类装载器小记

    类装载器的作用就是将编译后的字节码文件(.class)装入JVM(生成.class文件在内部的组件)。

    其工作过程:

    1.装载阶段:查找目标文件(.class),并导入该文件。

    2.链接阶段:首先验证字节码文件的正确性;校验通过后为静态变量分配内存空间;符号引用解析为直接引用

    注解:符号引用为被调用类的类名,直接引用就是类的内存地址)

    3.初始化:初始化静态变量、块。

    装载阶段的工作由ClassLoader(运行时系统组件)及其子类完成。

    虚拟机在运行时产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)

    这三者存在层次关系,根装载器是扩展装载器的父类,扩展装载器是系统装载器的父类,这里需要注意的是根装载器是由C++写的,在java中看不到他。

    其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载Classpath路径下的类包。

    此外可由ClassLoader中getParent()方法来查看当前装载器的父类,如果父类为根装载器,返回的结果是 null值。

    下面介绍JVM装载类的机制:

    JVM采用“全盘负责委托机制”,其中 全盘负责 就是一个ClassLoader装载一个类时不仅装载该类同时装载该类的的依赖和引用(除非你显示的使用另外一个ClassLoader来装载)。委托机制 就是 先委托父类装载器来寻找目标类并完成装载工作,如果父类寻找失败,才由当前装载器在自己的类路径寻找目标类并完成装载工作。这么做可以防止出现这样的情况 (有人编写了一个恶意的基础类(如java.lang.String)并装载到JVM中)。

  • 相关阅读:
    Bootstrap3.0学习第八轮(工具Class)
    dependencies与dependencyManagement的区别
    灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
    Linux平台安装MongoDB
    ubuntu 该软件包现在的状态极为不妥 error
    oracle vm突然黑屏了
    Oracle VM VirtualBox各种显示模式切换 热键
    where后一个条件和多个条件的查询速度
    String特殊值的判断方式
    将中文标点符号替换成英文标点符号
  • 原文地址:https://www.cnblogs.com/shuoli/p/7306683.html
Copyright © 2011-2022 走看看