JVM 是开源代码吗?

JVM 是开源代码吗? 如果不是,我如何得到 JVM 的代码?

61658 次浏览

这完全取决于您使用哪个 JVM。

如果使用 OpenJDKJVM,则可以从 给你获得源代码。
如果使用 Kaffe JVM,则可以从 给你获取源代码。
如果使用 Sun JVM 版本6或更高版本,则可以从 给你获得源代码。

如果您使用的 Sun JVM 早于6,那么您通常可以根据学术许可获得源代码。如果使用 IBM、 Oracle、 HP 或其他 JVM,则源代码不是打开的。

2013年5月最新情况

版本6的源仍然可以通过上面的链接访问,或者可以通过 这个链接访问。后一个链接还包含一个方便的 家谱表,该表显示了 Oracle JDK 和 OpenJDK 版本之间的匹配情况。

此外,还可以找到 Java7源代码的更新版本 给你。这还包括自 GA 以来 Java7发行版的修复程序。

毫无疑问,Java8源代码可以在 给你中找到。

JVM 的核心部分在 OpenJDK 的热点模块中。但是,您需要的内容更可能位于 src.zip 中。

这些类的热点模块是

  • 大部分是用 C + + 写的
  • 并不总是那么容易理解。随着时间的推移,这种情况已经得到了改善,新的代码趋向于更好,因为他们更清楚地意识到代码将有更广泛的使用。
  • 往往不是你想要的。

出于这个原因,如果您想知道 JVM 是如何运行的,那么最好查看常用的类。例如,即使是像 lambdas 在运行时的工作原理这样低级的东西,大部分都在 src.zip 中,而在 JVM 中没有多少。

这些库的大部分源代码都是 src.zip 文件中的 JDK 提供的。您的 IDE 将自动使用它。与使用 JDK 本身相比,熟悉这些库中的类要好得多。

没有开源的 jvm,即使有也无法绕过 Oracle 愚蠢的类路径异常。简而言之,openjdk 仍然与 $$驱动的方案绑定在一起,这迫使您与商业 vm 竞争。其实和微软没什么不同,你可以在他们提供的任何操作系统下使用 C # 。Net 库是免费的,但是仍然控制着 Visual Studio,这实际上迫使最终用户使用 Windows 作为选择的环境。