You need to enable JavaScript to run this app. HotSpot JVM中rt.jar的加载原理、时机及对应源码位置咨询
优惠活动
大模型
产品
解决方案
定价
更多

HotSpot JVM中rt.jar的加载原理、时机及对应源码位置咨询

HotSpot JVM 中 rt.jar 的加载机制说明

适用范围:该逻辑为JDK 8及更早版本HotSpot的专属实现,JDK 9及之后模块系统已完全替代rt.jar的类库组织形式,不存在独立的rt.jar加载流程

具体加载时机

  • rt.jar的路径挂载动作发生在虚拟机核心全局初始化阶段,启动时序早于应用类加载器实例创建、主类加载的全流程
  • 完整启动时序参考:初始化运行时全局环境 → 装配启动类加载器的类搜索路径(完成rt.jar路径的登记) → 创建应用类加载器实例并建立双亲委派委托链 → 加载程序入口主类
  • 注意:rt.jar不会被一次性全量加载进内存,仅完成路径登记后,当第一个被引用的核心类(比如java.lang.Object)需要加载时,才会按需从rt.jar中读取对应类的字节码

核心加载实现逻辑

  • 路径装配环节:HotSpot会结合JDK安装目录结构、用户传入的-Xbootclasspath等启动参数,拼出rt.jar的绝对路径(默认路径为<JDK_HOME>/jre/lib/rt.jar),将其加入启动类加载器的专属搜索列表,该列表与应用类加载器的搜索路径完全隔离
  • 类匹配读取环节:当启动类加载器需要加载目标类时,会遍历bootstrap搜索列表,通过jar包内置的索引信息快速定位对应class文件的存储位置,直接读取原始字节码,不走应用类的通用校验流程
  • 类标记环节:从rt.jar中加载完成的类会被打上“bootstrap类来源”的标记,在后续安全权限检查中自动获得最高优先级的信任级,跳过常规的签名、包边界校验

可查阅的实现代码位置

  • 启动类加载器搜索路径装配、rt.jar路径定位的核心实现:src/hotspot/share/classfile/classLoader.cpp 下的setup_bootstrap_search_path()方法,同目录下systemDictionary.cpp中包含类加载触发的关联逻辑
  • 从jar包中读取类字节码、通过索引定位class位置的实现:src/hotspot/share/classfile/jarLoader.cpp
  • 类加载器初始化的触发时机逻辑:src/hotspot/share/runtime/threads.cpp 中VM核心线程初始化完成后的全局初始化流程

常见认知纠偏:不少教程会描述“JVM启动时就把整个rt.jar加载到内存”,该说法不符合实际实现——整个启动流程仅会完成rt.jar的路径挂载,不会遍历读取jar内的所有内容,全量加载几十M的rt.jar带来的内存开销在实际运行中完全没有必要。


内容的提问来源于stack exchange,提问作者Amos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 20:27:02