JVM学习笔记一:类加载器以及双亲委派机制
同事看到我在写这个推荐给我看一篇博客,推荐给大家https://blog.csdn.net/briblue/article/details/54973413。嗯,这篇博客关于ClassLoder这方面写的太详细了,很多地方我甚至都没接触到,要学的还很多啊,所以我就不继续写了。
这几天毕设答辩结束,准备把自己所学知识整理回顾下,所以懒惰的博主突然勤奋了起来。
1。首先介绍下类的唯一性:
对于任意一个类,都需要由加载它的类加载器和类的全限定名一同确定其在Java虚拟机中的唯一性。
换句话说就是,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那这两个类就必定不相等。
这里所指的“相等”,包括Class对象的equals()方法,isAssignableFrom()方法、isInstance()方法的返回结果,也包括使用instanceof关键字做对象所属关系判定等情况。
2。三种系统系统的类加载器:
3。双亲委派模型工作原理:
1.当Application ClassLoader收到一个类尽在请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Extenstion ClassLoader去完成。
2.当Extenstion ClassLoader收到一个类尽在请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Bootstrap ClassLoader去完成。
3.如果Bootstrap ClassLoader加载失败(在<JAVA_HOME>\lib下没有找到所需类),就会让Extenstion ClassLoader尝试加载。
4.如果Extenstion ClassLoader加载失败,就会让Application ClassLoader尝试加载。
5.如果Application ClassLoader加载失败,就会让自定义加载器去尝试加载。
6.如果都加载失败,就会抛出ClassNotFoundException异常。
4。双亲委派模型工作过程
1.