【JVM】类加载器

📝个人主页:五敷有你

🔥系列专栏: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包:

  1. 放入jre/lib下进行拓展
    1. 不推荐,尽可能不要去更改JDK安装目录中的内容,会出现即使放进去由于文件名不匹配的问题也不会正常加载
  2. 使用参数进行拓展
    1. 推荐,使用-Xbootclasspath/a:jar包目录/jar包名 进行拓展

扩展类加载器&应用程序类加载器

拓展类加载器和应用程序类加载器都是JDK中提供的,使用Java编写的类加载器

他们的源码都位于sun.misc.Launcher中,是一个静态内部类,继承自URLClassLoader。具备通过目录或者指定jar包将字节码文件加载到内存中。

拓展类加载器(Extension Class Loader)是JDK中提供的,使用Java编写的类加载器。

默认加载Java安装目录/jre/lib/ext下的类文件

类加载器的加载路径可以通过classloader -c hash 值查看

相关推荐
色空大师7 分钟前
23种设计模式
java·开发语言·设计模式
闲人一枚(学习中)8 分钟前
设计模式-创建型-建造者模式
java·设计模式·建造者模式
2202_7544215426 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介28 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习29 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose31 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热32 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余34 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp34 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang36 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型