`

JAVA 类装载器ClassLoader

    博客分类:
  • Java
阅读更多

类装载器就是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。在java中,类装载器把一个类装入JVM中,要经过一下步骤:

1、装载:查找和导入Class文件;
2、链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的:
a)校验:检查载入的Class文件数据的正确性;

b)准备:给类的静态变量分配存储空间;

c)解析:将符号引用转化成直接引用;
3、初始化:对类的静态变量、静态代码块执行初始化工作。


类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器ExrClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。其中,根装载器不是ClassLoader子类,它使用C++编写,因此我们在Java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载ClassPath路径下的类包。

三个类装载器存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下,使用AppClassLoader装载响应程序的类。


JVM装载类时使用“全盘负责委托机制”,“全盘负责”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,该类所依赖及引用的类也由这个CladdLoader载入;“委托机制”是指先委托父装载器寻找目标,只有在找不到的情况下才从自己的类路径中查找并装载目标类。这一点是从安全角度考虑的,试想如果有人编写了一个恶意的基础类(如:java.lang.String)并装载到JVM中将会引起多么可怕的后果。但是由于有了“全盘负责委托机制”,java.lang.String永远是由根装载器来装载的,这样就避免了上述事件的发生。

分享到:
评论

相关推荐

    [浅析J2EE应用服务器的JAVA类装载器]python回朔异常的模块.docx

    【浅析J2EE应用服务器的JAVA类装载器】 Java类装载器机制是Java语言灵活性的关键组成部分,尤其在J2EE应用服务器中扮演着重要角色。理解这一机制有助于开发者更好地部署和管理应用程序,解决可能出现的部署问题。 ...

    Java的类装载器和命名空间

    在Java编程语言中,类装载器(ClassLoader)和命名空间是理解Java运行时环境的重要概念。它们共同确保了程序的正确性和安全性。类装载器负责将类文件加载到Java虚拟机(JVM)中,而命名空间则帮助组织和管理这些类,...

    Java深度历险(2)--深入类装载器

    1. **Bootstrap ClassLoader**(启动类装载器):这是JVM自带的类装载器,用于加载核心类库(如`java.lang.*`)。它没有父类装载器。 2. **Extension ClassLoader**(扩展类装载器):它通常用来加载`JAVA_HOME/lib/...

    Java虚拟机类装载的原理及实现

    所有JVM都内置了一个特殊的类装载器——根装载器(Bootstrap ClassLoader),它负责装载Java核心类库。当需要装载非设计时已知的类时,则需要使用用户自定义的类装载器。 #### 实例演示 以下是一个简单的示例,...

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...

    java之jvm学习笔记五(实践写自己的类装载器)

    Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、扩展类装载器(Extension ClassLoader)和应用程序类装载器(Application ClassLoader)。它们共同协作,根据类的全限定名(包括包名和...

    Java虚拟机类装载:原理、实现与应用

    装载阶段涉及寻找并导入类或接口的二进制数据,通常由类装载器(ClassLoader)执行。链接阶段则包括校验、准备和解析,校验确保二进制数据的正确性,准备阶段为类的静态变量分配内存并初始化,解析则将符号引用转化...

    jvm类装载器原理

    在Java中,ClassLoader是一个抽象类,位于`java.lang`包中,它是所有类装载器的基类。理解ClassLoader的关键在于掌握几个核心方法: 1. `loadClass(String name, boolean resolve)`:这是类装载的入口点。`name`...

    Java虚拟机类装载:原理、实现与应用.doc

    在实际开发中,类装载器的层次结构是关键,包括引导类装载器(Bootstrap ClassLoader)、扩展类装载器(Extension ClassLoader)和应用程序类装载器(Application ClassLoader),它们共同构成了双亲委派模型,保证...

    深入JVM内核—原理、诊断与优化视频教程-6. 类装载器

    在Java虚拟机(JVM)中,类装载器(ClassLoader)是至关重要的组成部分,它负责查找和加载Java类到JVM内存中。本教程聚焦于深入理解JVM内核,特别是类装载器的原理、诊断与优化。在这个第六部分中,我们将探讨以下几...

    Java虚拟机类装载.doc

    在Java中,类装载器 把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化。其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的。各个步骤的主要工作如下: * ...

    JAVA虚拟机的类装载机制的原理分析与应用研究.pdf

    在Java中,类装载器是分层的,由Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader构成,它们遵循双亲委托模型。当一个类装载器收到加载类的请求时,它首先会委托给父类装载器,只有当父类装载器无法...

    Java虚拟机类装载机制

    在Java中,类的装载主要由ClassLoader及其子类来实现。ClassLoader是一个抽象类,它有多个子类,如BootstrapClassLoader(引导类加载器)、ExtensionClassLoader(扩展类加载器)和AppClassLoader(应用程序类加载器...

    java ClassLoader机制及其在OSGi中的应用

    1. BootstrapClassLoader(启动类加载器):它是JVM的基础,由C++实现,不继承自`java.lang.ClassLoader`。BootstrapClassLoader负责加载JVM的核心类库,包括rt.jar、charsets.jar等,这些库位于JDK安装目录的lib下...

    Java类文件动态装载

    Java类的装载过程主要由类加载器(ClassLoader)来完成,这是一个关键组件,它负责查找、加载和初始化类。Java类加载器分为系统类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用...

    利用类装载器动态加载类并启动类

    1. **定义类装载器**:继承`java.lang.ClassLoader`类,并重写`findClass`方法。 2. **加载解密后的类**: - 使用`FileInputStream`读取解密后的`.class`文件。 - 将读取到的字节流转换为字节数组。 - 调用`...

    Java classloader和namespace详细介绍

    Java类装载器(ClassLoader)是Java平台中一个至关重要的组件,它负责查找和加载Java类的字节码到JVM中。Java类装载器分为三个主要的层次:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader...

Global site tag (gtag.js) - Google Analytics