Java虚拟机30个常用知识点之5——类加载器

当我们执行java程序的时候,并不是直接加载包含main方法的那个类,而是先由bootstrap classloader加载rt.jar及其他相关class文件,rt.jar中的class文件是java程序最常用的java文件,然后ext classloader会加载一些扩展类文件,最后呢就是app classloader类加载用户自己的类文件,从包含main方法的那个类文件开始加载。

双亲委派模型

简单来说就是每个类文件都会有一个类加载器,每个类加载器都会有一个父类加载器(bootstrap classloader除外),每当类加载器要加载类的请求时,会先将加载类的请求交给它的父类处理,这里面有递归关系,父类处理不了(在其处理范围内未找到该类),就一层一层的将加载请求传回来。

为什么要这么做

首先,我们要知道不同的类加载器加载的类是不同的,即使加载的是同一个类。若没有这种机制,app1 classloader加载的java.lang.Object类和app2 classloader加载的java.lang.Object类就是不同的,这显然是不对的。而运用双亲委派模型这种机制,就可以保证java.lang.Object类最终都是由bootstrap classloader加载的,这就保证了java.lang.Object类的一致性。

 

 

你可能感兴趣的:(Java虚拟机30个常用知识点之5——类加载器)