【笔记】深入理解 java 虚拟机---类加载器

什么是类加载器。

通过一个全限定名去找到一个类的二进制字节流。


一个类如果是通过不同的加载器去加载的话。得到的类是不想等的。

确定一个类的唯一性,要保证 类相同、类的加载器相同。

如下:


【笔记】深入理解 java 虚拟机---类加载器_第1张图片

我们自己写的一个 classloder和  虚拟机自带的classloader。分别去加载 app这个类。

得到结果

class com.dongdao.App

false。


双亲委派模型。

java 中的 加载器可以分为 3 大类。

Bootstarp ClassLoader。启动类加载器。用来加载 \java_home\lib下的jar。

Extension ClassLoader 。 扩展类加载器。用来加载  \java_home\lib\ext。

Application Classloader 。 系统类加载器。我们程序中的clsaaLoader 就是用的这个加载器。跟我们开发最贴近。



【笔记】深入理解 java 虚拟机---类加载器_第2张图片


为什么要用到双亲委派模型?

因为,上面我们讲到,确定一个类的唯一性要保证,类相同,加载器相同。

双亲委派模型的工作机制是: 一个类要被加载,必须先让其父类的加载器进行加载,如果加载失败,则才让子类加载。

假设,我们要加载 java.lang.Object,如果使用双亲机制,最终都是用bootstarpClassLoader 进行加载,因此object在虚拟机中是同一个类。相反,不使用双亲机制,使用不同的加载器去加载object,生成的object 也是不同的,java 体系的最基本行为都不能保证。

你可能感兴趣的:(【笔记】深入理解 java 虚拟机---类加载器)