首页 > 代码库 > classLoader的工作机制
classLoader的工作机制
ClassLoader的主要方法
1.loadClass(String name) 给定一个类名,记载一个类。
2.defineClass(byte[] b, int off, int len) 根据给定的字节数组定义一个类
3.findClass(String name) 查找一个类
4.findLoadedClass(String name),寻找一个被加载的类。
ClassLoader的等级加载机制
整个JVM提供三层ClassLoader
1.Bootstrap ClassLoader (启动类加载器),主要记载jvm自身记载所需要的类,这个classloader完全是由jvm自身控制的。别人也访问不到这个类。
2.ExtClassLoader (扩展类加载器), 服务于system.getProperty("java.ext.dirs")中。
3.AppClassLoader,服务于system.getProperty("java.class.path")中。
我们在应用中提取的顶级classloader顶级父类是ExtClassLoader 。当试图获取一个类的classloader时,获取的是null,意味着是启动类加载器。
Classloader的双亲委托模式
在类记载的时候,系统会判断当前的类是否已经被加载,如果已经被加载,就会直接返回可用的类,否则就会尝试加载,再尝试加载时,会尝试双亲处理,如果双亲请求失败,则会自己处理。
实现类的热部署
JVM表示一个类是否是同一个类有两个条件:
1.类的完整类名是否一样。
2.砍价在这个类的classloader是否是一样的。
所以实现类的热部署可以创建不同的classloader对象,然后通过这个不同的实例对象加载同名的类。
classLoader的工作机制