一、Java类加载器
Java类加载器(Class Loader)是Java虚拟机(JVM)的一部分,负责将类的字节码加载到内存中,并将其转换为可执行的Java对象。类加载器实现了动态加载类的机制,使得Java具备了灵活性和可扩展性。
二、类加载器分类
1.启动类加载器(Bootstrap Class Loader):也称为根类加载器,它负责加载Java虚拟机的核心类库,如java.lang.Object, java.lang.String等。启动类加载器是虚拟机实现的一部分,它通常是由本地代码C或C++实现的,不是Java类。
2.扩展类加载器(Extension Class Loader):它是用来加载Java扩展类库的类加载器。扩展类库包括javax和java.util等包,它们位于jre/lib/ext目录下。
3.应用程序类加载器(App Class Loader):也称为系统类加载器,它负责加载应用程序的类。它会搜索应用程序的类路径(包括用户定义的类路径和系统类路径),并加载类文件。
4.自定义类加载器 (custom Class Loader)开发人员可以根据需要实现的类加载器。
类加载器之间从上到下有父子关系,上层是下层的父加载器
三、双亲委派原理
类加载器采用了双亲委派模型(Parent Delegation Model)来加载类。每个类加载器在尝试加载类之前,会先委托其父类加载器进行加载。只有当父类加载器无法加载该类时,当前类加载器才会尝试自己加载。这种机制确保了类的加载过程是有序的,并且可以避免类的重复加载,同时也保证了类的唯一性和安全性。
原理图:

双亲委派的好处:
1. 通过双亲委派机制,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类。
2. 通过双亲委派机制,可以保证类安全性。因为BootstrapClassLoader在加载的时候,只会加载JAVA_HOME中的jar核心类库,如java.lang.String,那么这个类是不会被加载。

被折叠的 条评论
为什么被折叠?



