学习java、Android也有差不多半年时间了,是时候记录一下学习过程中的心得和经验,这篇文章就是简单描述一下JVM加载class文件的机制。
Java中的类加载器实质上也是类,功能是把类载入jvm中,值得注意的是jvm的类装载器并不是一个,而是三个: 1. BootstrapLoader 启动类装载器 : 每个Java虚拟机实现都必须有一个启动类装载器。它只负责在系统类(核心Java API的class文件)的安装路径中查找要装入的类。这个装载器的实现由C++ 所撰写而成,是JVM实现的一部分。 2. ExtClassLoader 扩展类装载器:负责除核心Java API以外的其它class文件的装载。例如、用于安装或下载标准扩展的class文件,在类路径中发现的类库的class文件,用于应用程序运行的class文件等等。 3. AppClassLoader 用户自定义类装载器:负责除核心Java API以外的其它class文件的装载。这里有一点需要注意:自定义类装载器并非由应用程序员自己实现,它也是JVM
当我们使用命令来执行某一个Java程序(比如Test.class)的时候:java Test (1) java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这才是真正的 Java 虚拟机器 , 最后加载动态库,激活 Java 虚拟机器。 (2) 虚拟机器激活以后,会先做一些初始化的动作,比如说读取系统参数等。一旦初始化动作完成之后,就会产生第一个类装载器 ―― BootstrapLoader(启动类装载器 ) 。 (3) Bootstrap Loader 所做的初始工作中,除了一些基本的初始化动作之外,最重要的就是加载 Launcher.java 之中的 ExtClassLoader(扩展类装载器) ,并设定其 Parent 为 null ,代表其父加载器为 BootstrapLoader 。 (4) 然后 Bootstrap Loader 再要求加载 Launcher.java 之中的 AppClassLoader(用户自定义类装载器 ) ,并设定其 Parent 为之前产生的 ExtClassLoader 实体。这两个加载器都是以静态类的形式存在的。这里要注意的是, Launcher
新闻热点
疑难解答