📝个人主页:五敷有你
🔥系列专栏:JVM
⛺️ 稳中求进,晒太阳
类加载器
类加载器,classloader,是Java虚拟机提供给应用程序去实现获取嘞和接口字节码数据的技术。
类加载器的应用场景
- SPI机制,类的热部署,Tomcat类的隔离
- 面试题:什么是类的双亲委派机制,怎么打破双亲委派机制,自定义类加载器
- 解决线上问题
分类
Java代码实现,Java虚拟机底层源码实现
类加载器的设计JDK8和8之后的版本差别较大,JDK8及之前的版本中默认的类加载器有如下几种:
类加载器的详细信息可以通过classloader命令查看
classloader - 查看 classloader 的继承树,urls,类加载信息, 使用classloader去getResource
启动类加载器
启动类加载器(Bootstrap ClassLoader)是由Hotspot虚拟机提供的,使用C++编写的类加载器
默认加载Java安装目录/jre/lib下的类文件,比如rt.jar 、tools.jar 、 resources.jar
通过启动类加载器去加载用户jar包:
- 放入jre/lib下进行拓展
- 不推荐,尽可能不要去更改JDK安装目录中的内容,会出现即使放进去由于文件名不匹配的问题也不会正常加载
- 使用参数进行拓展
- 推荐,使用-Xbootclasspath/a:jar包目录/jar包名 进行拓展
扩展类加载器&应用程序类加载器
拓展类加载器和应用程序类加载器都是JDK中提供的,使用Java编写的类加载器
他们的源码都位于sun.misc.Launcher中,是一个静态内部类,继承自URLClassLoader。具备通过目录或者指定jar包将字节码文件加载到内存中。
拓展类加载器(Extension Class Loader)是JDK中提供的,使用Java编写的类加载器。
默认加载Java安装目录/jre/lib/ext下的类文件
类加载器的加载路径可以通过classloader -c hash 值查看