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

  • 相关阅读:
    SQL 操作总结
    WaitHandle.WaitOne的第二参数
    java泛型测试
    生成商品静态页的类和方法
    CodeSmith4.1在控制台根据模板生成文件
    Eclipse中最常用的热键
    struts2的struts.properties配置文件详解 (转)
    eclipse rcp 多线程
    eclipse RPC加载Spring 容器
    使用Apache+tomcat比单独使用tomcat能带来什么样的好处及坏处
  • 原文地址:https://www.cnblogs.com/shuoli/p/7306683.html
Copyright © 2011-2022 走看看