Java ClassLoader的一些事
来源:互联网 发布:lazada卖家数据分析 编辑:程序博客网 时间:2024/05/16 00:44
在Java中,存在着类加载的机制。
对于类加载器的使用,这里我说明几点:
1、类加载器的类型主要分为四类:
【1】Bootstrp loader :
Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib
,-Xbootclasspath
参数指定的路径以及%JAVA_HOME%/jre/classes
中的类。
【2】ExtClassLoader
Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrp loader.ExtClassLoader是用Java写的,
具体来说就是 sun.misc.Launcher$ExtClassLoader,ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext
,此路径下的所有
classes目录以及java.ext.dirs
系统变量指定的路径中类库。
【3】AppClassLoader
Bootstrp loader加载完ExtClassLoader后,就会加载AppClassLoader,并且将AppClassLoader的父加载器指定为 ExtClassLoader。
·AppClassLoader也是用Java写成的,它的实现类是 sun.misc.Launcher$AppClassLoader,另外我们知道ClassLoader中有个
getSystemClassLoader
方法,此方法返回的正是AppclassLoader.AppClassLoader主要负责加载classpath所指定的位置的类或者
是jar文档,它也是Java程序默认的类加载器。
【4】用户自定义的类加载器
类加载的过程:ClassLoader.loadClass(String name, boolean resolve)
1、Class<?> c = findLoadedClass(name);
检查已经被加载的类,如果没有被加载过则会往下继续执行,如果被加载过,就直接返回已经加载过的类。
2、if (parent != null)
{
c = parent.loadClass(name, false);
} else {
c = findBootstrapClassOrNull(name);
}
判断该加载器的parent是否为空,
如果不为空,则调用父类的loadClass函数;
如果为空,则即为findBootstrapClassOrNull(name);判断是否已经被Bootstrp loader 加载。
3、如果以上均未加载成功,则findClass(name)
ps:不同加载器加载的同一个类是不相同的,不同类加载器加载的具有集成关系的类是可以转换的。
- Java ClassLoader的一些事
- classLoader 反射的一些文章
- Java的Classloader
- Java的Classloader
- Java的ClassLoader
- java的ClassLoader
- Java的ClassLoader机制
- Java的Classloader机制。
- java ClassLoader的学习
- Java的ClassLoader
- Java 的 ClassLoader 机制
- Java的classLoader学习
- java JVM的classloader
- java的ClassLoader简介
- ClassLoader与Ant的一些问题
- 一些classloader的资料,来自javaeye
- ClassLoader的工作原理(Java中和Andriod中的一些区别)
- Java的ClassLoader机制分析
- oracle数据库操作
- jQuery 操作DOM总结,DOM Core操作,HTML-DOM操作和CSS-DOM操作
- 数据预处理
- SQLite简单理解常用方法与相关类
- HDU 1162 Eddy's picture
- Java ClassLoader的一些事
- NYOJ 58 最少步数(广搜入门经典)
- 软件构架、架构和框架的区别
- Ubuntu16.04 GCC5.4.0降级到GCC5.3.0
- OpenCV read video
- 华为OJ 初级:人民币转换
- linux shell 自动输入y/yes
- js改变style样式和css样式
- 操作系统读书笔记(4)