You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenJDK 20中Platform ClassLoader具体加载哪些类与模块?

问题解答

结论:该说法是正确的,但需结合JVM类加载的懒加载机制与模块分工来理解

首先明确两个核心逻辑:

  1. JVM类加载采用懒加载机制:只有当类被主动引用时,对应的类加载器才会加载该类所属的模块/包,所以空程序中Platform ClassLoader没有加载任何内容是正常现象。
  2. Bootstrap ClassLoader与Platform ClassLoader的分工边界:
    • Bootstrap ClassLoader(启动类加载器)负责加载JVM启动必需的核心类库,比如java.lang、java.util、java.util.logging这类最基础的API——这些是JVM运行的底层依赖,启动时就会加载,且由于它是C++实现的底层加载器,返回的ClassLoader对象为null。
    • Platform ClassLoader(平台类加载器)负责加载Java SE平台中不属于启动必需,但开发者在业务开发中可能用到的公共API模块——这些模块属于Java SE规范的一部分,但不是JVM启动的依赖项,会在首次被引用时才触发加载。

具体属于Platform ClassLoader加载范畴的模块/包

常见的包括但不限于:

  • Java SE扩展API模块:
    • java.sql(JDBC数据库访问相关)
    • java.naming(JNDI命名服务相关)
    • java.xml及javax.xml.*(XML处理全系列API)
    • java.desktop(AWT/Swing图形界面相关)
    • java.rmi(远程方法调用相关)
    • java.security.jgss(安全认证相关)
  • JDK特定平台模块:
    • jdk.httpserver(内置HTTP服务器)
    • jdk.crypto.ec(加密扩展模块)
    • jdk.xml.dom(DOM XML处理实现)

结合测试案例的补充说明

  • 当你引用java.sql.Connection时,触发了Platform ClassLoader加载java.sql模块,所以能看到该类的加载器是jdk.internal.loader.ClassLoaders$PlatformClassLoader,且getDefinedPackages()返回了java.sql包。
  • java.util.logging.ConsoleHandler属于java.logging模块,该模块是JVM启动必需的核心日志组件,由Bootstrap ClassLoader加载,所以返回的ClassLoader为null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:03:31