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中)。

  • 相关阅读:
    数据集冲突
    苹果如何设计iPad的商业模式
    IT部门应如何制定技术路线图
    关于软件测试
    c#写文件
    正则表达式语法及常用表达式。
    使用Mysql的Replication功能实现数据库同步
    CMMI=大象关冰箱?
    asp.net 中RegularExpressionValidator的bug|IE的bug?
    Singleton 模式的Java和C#的实现方法
  • 原文地址:https://www.cnblogs.com/shuoli/p/7306683.html
Copyright © 2011-2022 走看看