介绍
Java程序运行在Java虚拟机(JVM)。这意味着编译程序是使用硬件和操作系统的二进制格式来表示,通常(但不一定)存储在一个文件,称为类文件格式。
特别是,一个Java程序不是一个单一的可执行文件,而是由许多单独的类文件,每一种都对应于一个单独的Java类。
此外,这些类文件不是一次性加载到内存,而是按需加载,所需的程序。类加载器是JVM类加载到内存的一部分。
Java类加载器是用Java语言编写的本身。这意味着很容易创建自己的类加载器,而不必了解JVM的细节。
类加载器
有两种类型的类装入器:引导类装入器提供的Java虚拟机,和用户定义的类装入器。每一个用户定义的类装入器是一个抽象类的类加载器的一个子类的实例。
当JVM启动时,三个类加载器使用:
- 引导类装入器
- 扩展类加载器
- 系统类装入器
核心Java librarieslocated引导类装入器装入的< JAVA_HOME > / lib
目录中。这类装入器,它是核心JVM的一部分,是用原生代码写的。
扩展类装入器装入的扩展目录中的代码(< JAVA_HOME > / lib / ext,或任何其他java.ext指定的目录。dirs系统属性)。它是由sun.misc实现。发射器美元ExtClassLoader类。
系统类装入器装入的代码在java.class找到。路径,它映射到系统类路径变量。它是由sun.misc实现。发射器美元AppClassLoader类。
应用程序实现子类的类加载器来扩展Java虚拟机的方式动态地加载类。
当用户定义的类装入器L加载C类,第一,它会检查是否已经加载的类。如果没有加载和L C有父类加载器,L将责任委托给它的父类加载器,我的父母也这样做。如果没有加载和L C没有父母,我将委托义务引导类装入器。当我的父母类C和引导类加载器加载失败,会引起异常。然后我将加载C类本身。
代码:
资源
类加载器http://docs.oracle.com/javase/7/docs/api/index.html
类文件格式http://docs.oracle.com/javase/specs/jvms/se7/html/jvms - 4. - html
Java虚拟机规范——“加载、链接和初始化”http://docs.oracle.com/javase/specs/jvms/se7/html/jvms - 5. - html