`

Java Class Loader

阅读更多

Java中有三种ClassLoader

 

1. Bootstrap class loader:

    用于加载java语言规范所定义的标准库的类,比如String,ArrayList,Object等。   

    它通常是在虚拟机种用本地代码(如C)实现,在系统中用null表示。

    这里之所以返回null,与其说是技术原因,到不如说更多得是出于安全考虑。

    试想,如果我们能够获得这个ClassLoader的引用,那么我们就可以自由的加载或卸载语言标准类的实现了。

 

2. Extension class loader:

    负责加载Java语言可选实现的类。

    我机器上的"Java环境中安装的可选包(optional package)"在这个路径中:

    D:\DevelopingTools\Java\jdk1.6.0\jre\lib\ext

    因此这里面的java包中的类,都会由Extension class loader来加载。

    另外:sun,ibm等不同厂商的扩展包会不同。

 

3. Application class loader:

   剩下的,由我们写的,或者由我们引用的类,也就是CLASSPATH上的类有这个加载器加载。

   有时候也称为system class loader,Java程序可以通过调用java.lang.getSystemClassLoader()获得它的引用。

 

上面的讨论也说明了 Java中获取classpath路径下的资源文件 这篇blog中的原因。

应外,关于这些加载器的关系以及调用次序可以参考这篇blog Java Class Loader

 

这里给出一段测试代码来解释这三个ClassLoader(By L同学),跑在sun jdk 1.6上:

 

public class TestClassLoader {
	public static void main(String[] args) {
		Object o = new Object();
		System.out.println(o.getClass().getClassLoader());
		System.out.println(sun.security.pkcs11.Secmod.class.getClassLoader());
		System.out.println(TestClassLoader.class.getClassLoader());
	}
}
 

他的输出为:

 

写道
null
sun.misc.Launcher$ExtClassLoader@3e25a5
sun.misc.Launcher$AppClassLoader@1a46e30
 

 

 

 

 

分享到:
评论
1 楼 wjason 2010-01-15  
liuzm 写道
不错,等哈试试看看
有空来我这坐坐  http://www.liuzm.com


一定 

相关推荐

    java class loader(JAVA类加载器)

    遇到类冲突、类找不到等问题时,可通过设置JVM参数`-verbose:class`来查看类加载的详细信息,或者使用JDK的`jmap -histo`命令分析内存中的类加载情况。 8. **线程安全** 类加载过程中的某些步骤,如加载和初始化...

    Java Class Loader总结.doc

    System.out.println("parent class loader: " + cl.getParent()); cl = cl.getParent(); } ``` 这段代码会打印出当前的类加载器以及它们的父加载器。通常,你会看到AppClassLoader(系统类加载器)、...

    java class加密保护工具

    本工具是对java class文件进行加密保护的工具!本工具全面支持linux/unix/windows操作系统。 众所周知,java编译后的class文件是一种中间字节字文件, 很容易被反编译工具反编译,而传统的java源代码保护方法基本都是...

    java 类加载器 class loader

    创建自定义类加载器通常需要继承`java.lang.ClassLoader`,重写`findClass()`或`loadClass()`方法,从而控制类的查找和加载过程。这使得开发者能够在运行时根据需要加载特定的类,比如从网络、数据库或其他非传统...

    java class加密保护(完全免费) v2.1

    本工具是对java class文件进行加密保护防止反编译的工具!本工具全面支持linux/unix/windows操作系统。 继推出v1.0版本后,获得了用户大量的支持与的反馈,我们再次推出本v2.0版,对加密算法进行了更大的改进,安全...

    JDK17-security-developer-guide.pdf

    JVM 负责执行 Java 字节码,Java Class Loader 负责加载类文件,而 Java Security Manager 则负责实施安全策略。 Java 安全协议 Java 安全协议是指 Java 平台使用的安全协议,包括 SSL/TLS、HTTPS 等。这些协议...

    JDK19-jdk-migration-guide.pdf

    * Java Class Loader:Java Class Loader 负责加载和管理 Java 类文件。 * Java Native Interface(JNI):JNI 是 Java 平台标准版提供的一种机制,用于将 Java 代码与 native 代码集成。 4.Java 平台标准版的新...

    javagui开发俄罗斯方块游戏.doc

    2. Java Class Loader: Class Loader 负责加载和链接 Java 字节码,提供了类加载和解析的功能。 3. Java Native Interface(JNI): JNI 是 Java 平台和 native 代码之间的接口,提供了 Java 和 native 代码之间的...

    JDK9-JSE-Tools Reference-319.pdf

    本手册还涵盖了 Java SE 9 中的其他工具和命令,例如 Java 任务计划器(java)、Java Class Loader(java.lang.ClassLoader)等。 在本手册中,我们将详细介绍每个工具和命令的使用方法、参数设置和示例代码,以...

    loader in java houtian

    Java加载器(Loader)是Java虚拟机(JVM)的核心组成部分,主要负责将类的字节码文件加载到JVM中并转换为运行时的数据结构。在深入理解这个概念之前,我们首先要明白Java的类加载机制。Java的类加载过程包括加载、...

    Java虚拟机class文件原理

    Java虚拟机(JVM)的Class文件原理是Java程序运行的基础。Java中的所有类都必须先被装载到JVM中才能被执行,这个过程由JVM内的类装载器(ClassLoader)来完成。类装载器的工作是将类文件从硬盘读取到内存中,使得JVM...

    认识Java的Class类.doc

    Java的Class类是Java反射机制的核心,它代表了Java中的每一个类和接口。Class类的主要功能是提供关于类的信息,包括类的结构、属性、方法等。以下是对Java Class类的详细说明: 1. **Class类对象的创建**:在Java中...

    loaderrunner测试脚本

    - `public class Actions { ... }` 主类定义,包含了所有的成员变量和方法。 #### 四、核心方法解析 1. **`init()`**:初始化方法负责加载配置文件、登录系统、初始化参数等基础工作。 - **配置加载**:`load_...

    class-loader测试工程

    在Java编程语言中,类加载器(Class-Loader)是一个至关重要的组件,它负责加载类到JVM(Java虚拟机)中。这个“class-loader测试工程”可能是一个专门设计用于研究和理解Java类加载机制的项目。在Java中,类加载...

    class loader

    ### 动态类加载在Java虚拟机中的应用 #### 概述 动态类加载是Java虚拟机(JVM)的一项核心特性,它为Java平台带来了强大的功能:即能够在运行时安装软件组件。这一机制不仅提高了系统的灵活性,还优化了资源管理。...

    深入java虚拟机(inside the java virtual machine)

    The Class Loader Architecture The Java Class File The Java API The Java Programming Language Architectural Tradeoffs Future Trends On the CD-ROM The Resources Page 2 Platform independence Why ...

    在Java的反射中,Class.forName和Class

    `Class.forName`实际上依赖于当前线程的上下文类加载器(Context Class Loader)。如果类已经加载,`forName`会直接返回该类的`Class`对象;否则,它会使用当前线程的上下文类加载器来加载类。而`ClassLoader`通常...

Global site tag (gtag.js) - Google Analytics