23

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

  1. 所谓的(正如我所见)“Sun JDK”、OpenJDK 和 GCJ之间有什么区别?

  2. 在不同的时间,我看到以下每一个都被抛出,这使得理解哪些版本号实际适用于什么变得非常混乱。有人可以帮我解决这个问题吗?

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

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

4

5 回答 5

11
  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://stackoverflow.com/questions/1977238/why-should-i-use-the-sun-jdk-over-the-openjdk-or-反之亦然

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

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

于 2011-01-14T22:28:31.870 回答
10

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。

于 2011-01-14T22:27:07.463 回答
4
  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)等。

于 2011-01-14T22:28:44.253 回答
3

多年来,Sun对其编程语言的命名约定进行了一些更改。原来你有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 只是解释您的字节码并在主机上执行它的程序。

于 2011-01-14T22:26:30.147 回答
1

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

于 2011-01-15T00:26:17.737 回答