bilibili-深入理解JVM 虚拟机 学习笔记
JVM学习笔记 1
JVM学习笔记 2
JVM学习笔记 3
JVM学习笔记 4
JVM学习笔记 5
P16_类加载器重要方法详解(16)
public abstract class ClassLoader {
// ...
protected Class<?> findClass(String name) throws ClassNotFoundException {
throw new ClassNotFoundException(name);
}
// ...
}
ClassLoader 是一个抽象类,用户自定义类加载器必须继承 ClassLoader 类,其中最重要的就是重写 findClass() 方法
;
我们在实现 findClass 时,可以使用 ClassLoader 中 defineClass
方法获取 Class 对象;
认真
看看 ClassLoader 的 defineClass 的 JavaDoc 文档
P17_类加载器双亲委托机制实例深度剖析(17)
认真
看看 ClassLoader 的 loadClass 的 JavaDoc 文档
package new_package.jvm.p16;
public class MyClassLoaderTest {
public static void main(String[] args) throws Exception {
ClassLoader classLoader = new MyClassLoader();
Class clazz = classLoader.loadClass("MD5Util");
System.out.println(clazz.hashCode());
ClassLoader classLoader2 = new MyClassLoader();
Class clazz2 = classLoader2.loadClass("MD5Util");
System.out.println(clazz2.hashCode());
}
}
在这种情况,同一个类会加载两次;
命名空间:
- 每个类加载器都有自己的命名空间,命名空间由该类加载器和所有父加载器所加载的类组成;
- 在同一个命名空间中
不会存在
类的完整名称完全相同的两个类 - 在不同的命名空间中有
可能
会出现完整名称完全相同的两个类
P18_类的命名空间与卸载详解及jvisualvm使用(18)
类的卸载:
- 当一个类被加载、连接和初始化后,它的生命周期就开始了;
- 当类的 Class 对象不再被引用,即不可到达时, Class 对象就会结束生命周期,类在方法区中的数据也会被卸载,从而类的生命周期;
- 一个类何时结束其生命周期,取决于代表它的 Class 对象何时结束生命周期;
- 由用户自定义的类加载器所加载的类是可以被卸载的;
jvisualvm