【问题标题】:JDK, JRE, Java: Version Confusion!JDK、JRE、Java:版本混乱!
【发布时间】:2011-01-14 22:20:57
【问题描述】:

虽然我(还)不是真正的 Java 开发人员,但我觉得我现在应该知道这一点,但我仍然很困惑。我的问题有两个部分:

  1. 所谓的(据我所知)“Sun JDK”、OpenJDK 和 GCJ 有什么区别

  2. 在不同的时间里,我看到以下每一个都被抛出,这让我很难理解哪些版本号实际上适用于什么。有人可以帮我解决这个问题吗?

    • Java 6
    • Java 1.6
    • JDK 6
    • JDK 1.6
    • JRE 1.6
    • JVM 11.0

注意:我确实了解 JDK(Java 开发工具包)和 Java 运行时环境之间的区别。然而,我并不完全清楚 JRE 和 JVM 之间的区别,尽管我知道 JVM 是/做什么。

【问题讨论】:

  • 仍然让我感到困惑的部分是 OpenJDK 似乎是 Oracle 的一个重点项目:openjdk.java.net/faq -- 如果这是真的,为什么 Oracle 会继续维护两个不同版本的 JDK ( OpenJDK,Oracle JDK)?

标签: java openjdk gcj


【解决方案1】:
  1. Sun JDK 由 Sun 制作,OpenJDK 是一个竞争性的开源实现。 GCJ 是 GNU java 编译器。
  2. Java 6 = Java 1.6 和 JDK 6 = JDK 1.6

详情项目1 http://en.wikipedia.org/wiki/OpenJDK https://*.com/questions/1977238/why-should-i-use-the-sun-jdk-over-the-openjdk-or-vice-versa

http://en.wikipedia.org/wiki/GNU_Compiler_for_Java

GCJ 与 Sun JDK/OpenJDK 有何关系? 我知道没有直接关系。 GCJ 是一个单独的项目。 使用一种 JDK 优于另一种的优点是什么? 如果重新分发 Sun JDK,可能会出现许可问题。我个人更信任 Sun JDK,因为它的稳定性。 OpenJDK 不是 Sun 项目吗?是和不是。这是一个社区项目。

【讨论】:

  • 你是唯一一个回答了这两个问题的人,Navi,但我想我希望得到比这更多的细节。 GCJ 与 Sun JDK/OpenJDK 有何关系?使用一种 JDK 优于另一种的优点是什么? OpenJDK 不是 Sun 项目吗?等
  • 感谢您提供的资源,但我仍然很困惑,如果 Oracle 仍然保持自己的专有实现,为什么他们会如此积极地参与 OpenJDK。如果同一家公司处于两者开发的核心,并且两者都在某种程度上是开放的,为什么我们需要一个开源和一个单独的专有实现?
  • @Brian 严格来说没有必要。但是,Sun/Oracle 无法完全开源 JDK,因为“对于一些 Sun 无权在 GPL 下以源代码形式发布的组件”。所以因为这个部门,一个分叉被创建了。
  • Sun 开始开源他们的软件——主要是 Solaris 和 Java——以求生存。
【解决方案2】:

Java 6 和 Java 1.6 是相同的。 Java 最初被命名为 Java 1.X,但随着时间的推移,Sun 营销部门发现,如果他们放弃“1”,它会更好地表明已完成的重大改进。部分。这样做的第一个版本是 Java 1.5,它被称为 Java 5。

JRE 6 是 Java 6 的消费者发行版。可以从http://java.com 轻松下载。

JDK 6 是 Java 6 的开发者发行版。它包含编译器等工具,并支持比默认 JRE 更多的文化。需要从http://javasoft.com下载。

JVM 11.0 是 Oracle JRE/JDK 中的 Java“解释器”版本(其他供应商使用不同的编号)。这类似于说 Windows Vista 真的是 Windows 6.0.6001。

【讨论】:

    【解决方案3】:
    1. 它们基本上是描述 Java 虚拟机应如何工作的同一组标准的不同实现。
    2. Java 版本控制以正常方式从 1.0 发展到 1.4,当时市场部的一些聪明人提出了将下一个版本称为“Java 5”而不是 1.5 的想法,但这当然只会造成混乱,并延续到6(1.6)系列,可能会持续一段时间。我不知道 JVM 11.0 可能是什么。 (你确定它不是 1.1.0 吗?我知道这很远,但谁知道呢。)

    还有JVM和JRE的区别。严格来说JVM只是解释Java字节码的机器,而一个JRE还包含了所有的标准类库、资源文件、dlls(sos)等等。

    【讨论】:

      【解决方案4】:

      多年来,Sun have made some changes to the naming conventions 为他们的编程语言。原来你有jdk1.1等等。在 jdk1.2 他们决定把它改成 Java 2。所以你会看到一些关于 Java 2 的旧书。

      然后由于某种神秘的原因,它又回到了 jdk1.3,然后是 jdk1.4。当 jdk1.5 发布时,他们有意识地再次更改名称。所以我们有了 Java 5。既然他们决定坚持使用这个,那么您有以下内容:

         jdk1.5 = Java 5
         jdk1.6 = Java 6
         jdk1.7 = Java 7
      

      和(也许)等等。

      希望这可以解释其中的一部分。在您的问题中 Java6 == Java 1.6 == JDK 6 == JDK 1.6。

      至于 JVM 与 JRE。 JRE 包含 JVM 以及运行 Java 程序所需的类库和任何其他工具。 JVM 只是解释您的字节码并在主机上执行它的程序。

      【讨论】:

        【解决方案5】:

        请注意,GCJ 不是经过认证的 JVM。它是 GNU Classpath for Java 项目,在 GNU 许可下具有部分 Java 兼容性。你应该避开它,除非你确定它满足你的需要并且你有理由不能使用另一个完整的 Java 实现。

        【讨论】: