java类加载器
来源:互联网 发布:加工中心手动编程自学 编辑:程序博客网 时间:2024/06/07 10:58
类加载器
1、类加载器的分类
启动类加载器(Bootstrap ClassLoader): 主要负责加载lib目录中的,或是-Xbootclasspath参数指定的路径中的,并且可以被虚拟机识别(仅仅按照文件名识别的)的类库到虚拟机内存中。它加载的是System.getProperty("sun.boot.class.path")所指定的路径或jar。
扩展类类加载器(Extension ClassLoader):主要负责加载libext目录中的,或者被java.ext.dirs系统变量所指定的路径中的所有类库。它加载的是
System.getProperty("java.ext.dirs")所指定的路径或jar。
应用程序类加载器(Application ClassLoader):也叫系统类加载器,主要负责加载ClassPath路径上的类库,如果应用程序没有自定义自己类加载器,则这个就是默认的类加载器。
它加载的是System.getProperty("java.class.path")所指定的路径或jar。
2、类加载器的特点
1)运行一个程序时,总是由Application Loader(系统类加载器)开始加载指定的类。
2)在加载类时,每个类加载器会将加载任务上交给其父,如果其父找不到,再由自己去加载。
3)Bootstrap Loader(启动类加载器)是最顶级的类加载器了,其父加载器为null.
3、类加载器的双亲委派模型
类加载器双亲委派模型的工作过程是:如果一个类加载器收到一个类加载的请求,它首先将这个请求委派给父类加载器去完成,每一个层次类加载器都是如此,则所有的类加载请求都会传送到顶层的启动类加载器,只有父加载器无法完成这个加载请求(即它的搜索范围中没有找到所要的类),子类才尝试加载。
下面是一个类加载器双亲委派模型,这里各个类加载器并不是继承关系,它们利用组合实现的父类与子类关系。
4、类加载的几种方式
1)命令行启动应用时候由JVM初始化加载,加载含有main的主类。
2)通过Class.forName()方法动态加载类,默认会执行初始化块。如果指定了ClassLoader,则不会执行初始化块。
3)通过ClassLoader.loadClass()方法动态加载类,不会执行初始化块。
5、类加载实例
当在命令行下执行:java HelloWorld(HelloWorld是含有main方法的类的Class文件),JVM会将HelloWorld.class加载到内存中,并在堆中形成一个Class的对象HelloWorld.class。
基本的加载流程如下:
1)寻找jre目录,寻找jvm.dll,并初始化JVM;
2)产生一个Bootstrap Loader(启动类加载器);
3)Bootstrap Loader自动加载Extended Loader(标准扩展类加载器),并将其父Loader设为BootstrapLoader。
4)Bootstrap Loader自动加载AppClass Loader(系统类加载器),并将其父Loader设为ExtendedLoader。
5)最后由AppClass Loader加载HelloWorld类。
- Java类加载器
- java类加载器
- java类加载器
- Java类加载器
- java类加载器
- Java类加载器
- Java 类加载器
- java类加载器
- java类加载器
- Java 类加载器
- -java 类加载器
- Java-类加载器
- Java类加载器
- Java 类加载器
- Java 类加载器
- java类加载器
- java类加载器
- Java-----类加载器
- 字符编码
- hdu 5147 树状数组
- 对枚举值(Enum)进行位操作(AND & OR)
- Android Activity和Intent机制学习笔记
- MVC中的分部视图
- java类加载器
- 正则表达式
- android动画(一)Interpolator
- C/C++中的void和void*
- Java中的参数传递方式
- 调用dcrf32.dll头文件,函数的作用说明
- php高级程序设计2
- 沙河地址
- Adobe Appilcation Extension Project 自定义项目工程