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

为何OpenJDK中存在两类相似的Hotspot JVM实现?

为什么OpenJDK里既有Hotspot目录又有java.base里的JVM相关类?

别慌,这俩根本不是两个JVM实现,是分工完全不同的上下层组件:

  • Hotspot目录:实打实的JVM核心
    这部分是用C/C++写的底层虚拟机实现,字节码解释、JIT编译、GC内存回收、线程调度这些最核心的VM功能全在这儿。你觉得它没入口点是因为JDK的启动逻辑在jdk/src/share/bin/java.c这类启动代码里,最后会加载Hotspot的核心库并初始化,它本身是个被调用的库,不是独立可执行程序。

  • java.base里的“VM类”:Java层的交互接口
    你看到的那些自称“Java VM”的类,比如java.lang.Runtime、sun.misc.Unsafe(新版本换成jdk.internal.misc.Unsafe),还有java.lang.VirtualMachine,都是Java代码写的上层接口。它们本身不实现VM功能,只是通过JNI调用Hotspot底层的Native代码,给Java程序提供操作VM的入口——比如让你获取内存信息、调用底层指令,不用自己写Native代码。

为啥要这么设计?

  • 分层解耦:底层VM专注高性能、底层优化,上层Java接口专注易用性,两边分开维护,改底层实现不影响上层Java代码,改上层API也不用动VM核心。
  • 规范兼容:Java语言规范定义了一些和VM交互的标准API,java.base里的类是这些规范的落地实现。哪怕以后换个VM(比如OpenJ9),只要遵循规范,上层Java代码照样能跑。
  • 历史延续性:JDK6还没模块化,早期就把核心Java类和Hotspot的Native实现分开维护了。JDK9搞模块化后把核心Java类归到java.base,但Hotspot作为核心组件的结构没变,一直延续到现在。

你的理解偏差

你把java.base里的Java层接口当成了JVM实现,其实它们只是调用底层VM的“门面”,真正干活的全在Hotspot的C/C++代码里,俩是上下层关系,不是两个独立的JVM。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:48:23