【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 值查看

相关推荐
非优秀程序员1 天前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻1 天前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
文丑颜不良啊1 天前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang1 天前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪1 天前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息1 天前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼1 天前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff1 天前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff1 天前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
SL_staff1 天前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品