`
xiaobian
  • 浏览: 588207 次
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA类装载器

阅读更多
顾名思义,类装载器是用来把类 (class) 装载进 JVM 的。 JVM 规范定义了两种类型的类装载器:启动内装载器 (bootstrap) 和用户自定义装载器 (user-defined class loader) 。

 

JVM 的类动态装载技术能够在运行时刻动态地加载或者替换系统的某些功能模块 , 而不影响系统其他功能模块的正常运行。

 

装载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造代表这个类或是这个接口的 class 对象的过程,其中类或接口的名称是给定了的。当然名称也可以通过计算得到,但是更常见的是通过搜索源代码经过编译器编译后所得到的二进制形式来构造。

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

  装载:查找和导入类或接口的二进制数据;

  链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;

  校验:检查导入类或接口的二进制数据的正确性;

  准备:给类的静态变量分配并初始化存储空间;

  解析:将符号引用转成直接引用;

  初始化:激活类的静态变量的初始化 Java 代码和静态 Java 代码块。

 

bootstrap 是 JVM 自带的类装载器,用来装载核心类库,如 java.lang.* 等。由例 1 可以看出, java.lang.Object 是由 bootstrap 装载的。

 

Java 提供了抽象类 ClassLoader ,所有用户自定义类装载器都实例化自 ClassLoader 的子类。

System Class Loader 是一个特殊的用户自定义类装载器,由 JVM 的实现者提供,在编程者不特别指定装载器的情况下默认装载用户类。系统类装载器可以通过 ClassLoader.getSystemClassLoader() 方法得到。

 

例 1 ,测试你所使用的 JVM 的 ClassLoader

/*LoaderSample1.java*/

public class LoaderSample1

{

       public static void main(String[] args)

       {

              Class c;

              ClassLoader cl;

             

              cl = ClassLoader.getSystemClassLoader();

              System.out.println(cl);

             

              while (cl != null)

              {

                     cl = cl.getParent();

                     System.out.println(cl);         

              }

 

              try

              {

                     c = Class.forName(“java.lang.Object”);

                     cl = c.getClassLoader();

                     System.out.println(“java.lang.Object’s loader is ” + cl);

 

                     c = Class.forName(“LoaderSample1”);

cl = c.getClassLoader();

                     System.out.println(“LoaderSample1’s loader is ” + cl);

              }

              catch (Exception e)

              {

                     e.printStackTrace();

}

       }

}

 

在我的机器上 (Sun Java 1.4.2) 的 运行结果

sun.misc.Launcher$AppClassLoader@1a0c10f

sun.misc.Launcher$ExtClassLoader@e2eec8

null

java.lang.Object's loader is null

LoaderSample1's loader is sun.misc.Launcher$AppClassLoader@1a0c10f

 

第一行表示,系统类装载器实例化自类 sun.misc.Launcher$AppClassLoader

第二行表示,系统类装载器的 parent 实例化自类 sun.misc.Launcher$ExtClassLoader

第三行表示,系统类装载器 parent 的 parent 为 bootstrap

第四行表示,核心类 java.lang.Object 是由 bootstrap 装载的

第五行表示,用户类 LoaderSample1 是由系统类装载器装载的
分享到:
评论

相关推荐

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

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

    java类装载器学习一、类加载器的基本概念

    类装载器学习一、类加载器的基本概念 类装载器学习一、类加载器的基本概念 类装载器学习一、类加载器的基本概念

    java类加载器实例

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

    java类装载

    java类装载介绍,介绍了java装载类的先后顺序

    Java的类装载器和命名空间

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

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

    ### Java深度历险(2)--深入类装载器 #### 前言 在现代软件开发领域,特别是使用Java这样的高级编程语言时,“动态性”是一个非常重要的概念。它指的是程序能够在运行时根据需要加载、卸载或替换部分代码的能力。这...

    WAS+V7+理解类装入器-红皮书.pdf

    3. **应用程序类装载器(Application Class Loader)**:它是默认的应用程序类装载器,负责加载用户类路径(`java.class.path`)中定义的类。用户可以通过环境变量`CLASSPATH`来控制哪些类路径被包含在内。应用程序类...

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

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

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

    例如,我们可以创建一个类装载器,专门用于加载网络上的类,或者加载特定目录下的类文件,从而实现动态扩展应用程序的功能。 在实际应用中,类装载机制使得Java应用程序能够灵活地加载不同版本的库,或者在运行时...

    jvm类装载器原理

    Java的JVM(Java Virtual Machine)类装载器是Java运行时系统的重要组成部分,负责在程序运行期间查找并加载类的二进制数据。理解类装载器的工作原理对于优化Java应用性能和实现动态加载类至关重要。 装载过程包括...

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

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

    java中的四个核心概念_.docx

    Java类装载器分为两类:启动类装载器和用户定义的类装载器。启动类装载器是JVM的一部分,负责加载Java API和其他基础类。用户定义的类装载器可以自定义加载方式,如从网络加载class文件。用户定义的类装载器是用...

    Java虚拟机类装载机制

    Java虚拟机类装载机制是Java运行环境中的核心组成部分,它负责将类的字节码从磁盘、网络等不同来源加载到JVM中,并进行一系列处理以使类能够被正确地使用。类装载机制的目的是为了实现代码的动态加载和运行时的灵活...

    Java类装载过程_.docx

    在这个阶段,JVM会通过类装载器寻找并加载类的二进制数据。这通常是从类路径(Classpath)中获取的,例如`.class`文件。装载过程包括: - 二进制数据流生成:通过类路径查找指定类的`.class`文件,读取其二进制数据...

    Java虚拟机类装载.doc

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

    Java四大核心技术思想详解.doc

    Java类装载器体系结构设计灵活,支持不同类型的类装载器来适应不同的应用场景。主要分类包括: 1. **启动类装载器(Bootstrap Class Loader)**:它是JVM的一部分,负责加载Java核心库,如`rt.jar`。这些库通常位于...

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

    - 系统类装载器是JVM内置的,用于加载Java标准库的类。 理解类装载机制对于优化程序性能、实现动态加载、插件系统以及增强程序的灵活性具有重要意义。例如,通过自定义类装载器,开发者可以在运行时替换或添加新的...

Global site tag (gtag.js) - Google Analytics