`

虚拟机类加载机制(三)类加载器

 
阅读更多

定义

实现了“通过一个类的全限定名来获取描述此类的二进制字节流”动作的代码模块被称为“类加载器”。

 

对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。换句话说,如果要比较两个类是否相同,只有在这两个类都是由同一个类加载器加载的前提下才有意义。否则,即使这两个类是出自同一份Class文件,但由不同的加载器加载,那么这两个类必定不相等(包含Class对象的equals(),isAssignableFrom(),isInstance()方法的返回结构,也包含使用instanceof关键字做对象所属关系判定等)。

 

双亲委派模型

从Java虚拟机的角度来看,只存在两种类型的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++实现(仅限于Hot Spot虚拟机),是虚拟机的一部分;另一种是其他所有类的类加载器,这些类加载器都有Java语言实现,独立与虚拟机之外,并且全部继承自抽象类java.lang.ClassLoader。

 

绝大部分的Java程序都会使用到的三种系统提供的类加载器有:

  • 启动类加载器(Bootstrap ClassLoader):这个类加载器负责将存放在 <JAVA_HOME>/lib 目录中的,或者被-Xbootclasspath参数指定的路径中的,并且是被虚拟机识别的(仅按文件名识别,比如rt.jar)类库加载加载到虚拟机内存中。启动类加载器无法被Java程序直接引用。
  • 扩展类加载器(Extension ClassLoader):这个加载器由sun.misc.Launcher$ExtClassLoader实现,负责加载 <JAVA_HOME>/lib/ext 中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库,开发者可以直接使用类扩展加载器。
  • 应用程序类加载器(Application ClassLoader):这个类加载器由sun.misc.Launcher$AppClassLoader实现。这个类加载器是由ClassLoader中getSystemClassLoader()方法的返回值,所以一般也称之为系统类加载器。负责加载用户类路径(ClassPath)上指定的类库,开发者可以直接使用此类加载器,如果系统中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。


 

双亲委派模型要求除了顶层的启动类加载器之外,其他类加载器必须有父类加载器。这里的父子关系一般不会使用继承手段实现,而是使用组合,以复用父类加载器代码。

 

双亲委派模型的工作过程是:如果一个类加载器收到了类的加载请求,它首先不会自己去尝试加载,而是先把请求传递给父类去完成,每一层的类加载器都是如此。只有当父类反馈说自己无法完成加载请求(在它的搜索范围内没找到所需要的类)时,子类加载器才会尝试加载。

 

使用双亲委派模型的优点
 

  • 大小: 93.9 KB
分享到:
评论
2 楼 chinaemerson 2013-05-24  
eyeit2000 写道
这么简洁

哦哦,早上写的,存在草稿里了……
1 楼 eyeit2000 2013-05-24  
这么简洁

相关推荐

    Java虚拟机类加载机制浅谈

     虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、准备、解析和初始化,终会形成可以被虚拟机使用的Java类型,这是一个虚拟机的类加载机制。Java中的类是动态加载的,只有在运行期间使用到该类的...

    ClassLoader类加载机制

    类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。

    JVM 运行时数据区域,垃圾回收机制,类加载机制三大功能详解.docx

    VM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 运行时数据区域: 在运行时数据区里存储类Class文件元数据...类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域

    深入理解java类加载机制

    此外,我们还会探讨Java程序的类加载器和双亲委派机制,以及自定义类加载器和类卸载的实现原理和应用方法。 总的来说,本资源将为Java程序员提供全面的Java字节码和类加载原理和实践经验。通过学习本资源,开发人员将...

    解析Java虚拟机中类的初始化及加载器的父委托机制共14页

    解析Java虚拟机中类的初始化及加载器的父委托机制共14页.pdf.zip

    类加载机制1

    简介类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1

    深入研究Java 的类加载机制

    Java 类的动态装载机制是Java 虚拟机的一项核心技术,可以在运行时刻动态地加载或替换系统的 某些功能模块,而不影响系统其它功能模块的正常运行。介绍了Java 虚拟机中类的动态装载机制的原理、实现 及应用,分析了...

    详解JAVA类加载机制(推荐)

    JAVA源码编译由三个过程组成: 1、源码编译机制。 2、类加载机制 ...系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类,当运行某个java程序时,会启动一个java虚拟机进程,两次运行

    【JVM】类加载器与双亲委派模型

    类加载器在加载阶段,会将class文件加载进方法区。有关类加载的全过程,可以先参考我的另外一篇文章类的奇幻漂流——类加载机制探秘 类加载器的类型 类加载器有以下种类: ...由于启动类加载器涉及到虚拟机本

    深入浅出类加载机制

    类加载器2.1 类加载器种类2.1.1 Java虚拟机自带的类加载器2.1.2 用户自定义的类加载器2.2 双亲委派机制2.2.1 为什么要有双亲委派机制2.2.2 可不可以自定义一个String/Object类?2.3 破坏双亲委派2.3.1 为何要破坏...

    java虚拟机知识点整理

    虚拟机类加载机制 编译期编译优化 运行期优化 高效并发-java内存模型与线程 线程安全与锁优化 1 标记-清除算法:首先标记所有需要回收的对象(引用计数或可达性分析算法标记),在标记完成后统一回收所有被标记的对象...

    java虚拟机知识汇总

    对Java虚拟机的类加载机制,内存分配,类变量的存储,类加载器,内存分配以及回收的一个整个流程的汇总。实战内容丰富

    JAVA虚拟机精讲

    Mark-Sweep)收集器和G1(Garbage-First)收集器)、类加载机制,以及HotSpot VM 基于栈的架构模型和执行引擎(解释器的工作流程、JIT 编译器的工作流程、分层编译策略、热点探测功能)等技术。

    Java类加载机制浅析

    所谓类加载机制就是 虚拟机把Class文件加载到内存 并对数据进行校验,转换解析和初始化 形成可以虚拟机直接使用的Java类型,即java.lang.Class   1、装载(Load)  查找和导入class文件 (1)通过一个类的全限定名

    java虚拟机2021面试题第三季

    4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类加载和运行时扩展。 5. JIT编译:JVM还具备即时编译(Just-In-Time Compilation)的能力,它可以根据运行时...

    Java虚拟机精讲.高翔龙.带书签完整版.pdf

    Mark-Sweep)收集器和G1(Garbage-First)收集器)、类加载机制,以及HotSpot VM 基于栈的架构模型和执行引擎(解释器的工作流程、JIT 编译器的工作流程、分层编译策略、热点探测功能)等技术。

    JAVA虚拟机全面理解.docx

    其中基础结构层包括Java虚拟机的所有基本功能,如内存管理、线程管理、类加载机制等;执行引擎层则负责解释Java字节码并执行;应用层则提供了与具体应用相关的功能,如安全管理器、垃圾收集器等。

    Java虚拟机

    第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测...

    JVM解毒——类加载子系统

    带着问题,尤其是面试问题的学习才是最高效的。...Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制

Global site tag (gtag.js) - Google Analytics