【发布时间】:2011-01-02 19:44:42
【问题描述】:
JVM 是开源代码吗?如果没有,如何获取JVM的代码?
【问题讨论】:
-
JVM 是一个规范!其中有不同的实现
JVM 是开源代码吗?如果没有,如何获取JVM的代码?
【问题讨论】:
在这里查看热点 JVM:http://openjdk.java.net/groups/hotspot/
【讨论】:
src\share\native\java\lang\Thread.c后发现,原生方法interrupt0的实现是在JVM_interrupt中挖的。我在哪里可以找到它的来源?是来自热点吗?
这完全取决于你使用的 JVM。
如果你使用OpenJDK JVM,那么你可以从here获取源代码。
如果你使用 Kaffe JVM,你可以从here获取源码。
如果您使用 Sun JVM 版本 6 或更高版本,则可以从here 获取源代码。
如果您使用早于 6 的 Sun JVM,那么您通常可以在学术许可下获得源代码。如果您使用 IBM、Oracle、HP 或其他 JVM,则源代码未打开。
2013 年 5 月更新
仍然可以通过上述链接访问第 6 版源,也可以通过 this link 访问。后一个链接还包括一个方便的 genealogy 表,该表显示了 Oracle JDK 和 OpenJDK 版本如何相互匹配。
此外,可以在here 找到更新版本的 Java 7 源代码。这还包括自 GA 以来对 Java 7 版本的修复。
毫无疑问,Java 8 源代码可以在 here 找到。
【讨论】:
JVM的核心部分在OpenJDK的热点模块中。但是,您需要的内容更有可能在 src.zip 中。
这些类之外的热点模块是
因此,如果您想了解 JVM 是如何运行的,最好查看常用的类。例如,即使是像 lambdas 在运行时真正如何工作这样低级别的东西,大部分都在 src.zip 中,而在 JVM 中却很少。
大多数库的源代码都随 src.zip 文件中的 JDK 一起提供。您的 IDE 将自动使用它。熟悉这些库中的类比使用 JDK 本身要好得多。
【讨论】:
没有开源 jvm,即使你无法绕过 Oracle 愚蠢的类路径异常。简而言之,openjdk 仍然与 $$ 驱动的方案相关联,迫使您与商业虚拟机抗衡。与 Microsoft 没有什么不同,您可以在他们甚至免费提供 .net 库的任何操作系统下使用 C#,但保持对 Visual Studio 的控制,这实际上迫使最终用户使用 Windows 作为所选环境。
【讨论】: