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对象,然后通过这个不同的实例对象加载同名的类。

原文地址:https://www.cnblogs.com/caobojia/p/6852410.html