使用非Sun JRE/JDK的动机是什么?

5

这个问题让我想到,如果有Sun JDK可用,为什么要使用其他编译器?是否有使用不同编译器的好的技术原因?


1
我不认为这个问题适合在这里讨论,但在1.4之前的黑暗时期,IBM JDK实际上比Sun JDK更快。而且jikes编译器也很出色。 - Paul Tomblin
许可/分发协议因不同供应商而异... - chrismh
还有,你是不是指的是Oracle JDK ;) - jamiebarrow
标题与问题主体不一致。 - Thorbjørn Ravn Andersen
这个问题看起来确实很棘手,我的意思是以下说法不正确:“集成到IDE中的编译器通常具有更好的错误报告功能。” - Raul Lapeira Herrero
Jikes因其bug浪费了我很多时间,最终公司放弃了它。在开发过程中编译时间并不重要 - 通常一次只需要编译几个Java文件 - 我没有任何记忆认为Jikes更快。 - irreputable
4个回答

1

嗯,我相信人们并没有意识到,但是Eclipse有自己的编译器。因此,当您使用Eclipse时,您正在使用一个非Sun(Oracle)JDK。

使用它有很多优点。首先,Eclipse实际上内置了几个编译器。在我看来,提供最大好处的是提供红色下划线的编译器,它会随着您的输入而提供代码建议。

Eclipse编译器的另一件事是'编译'无法编译的代码。因此,如果您运行一段代码,从未遇到过无法编译的代码,那么该代码将在没有错误的情况下运行。否则,您会得到一个NotYetCompiledException。(或类似的结果)


好的,说得对。但是在普通的命令行编译的情况下,是否有使用其他工具的充分技术理由呢? - Dave
@Dave,很抱歉我无法回答那个问题。我不知道。 - jjnguy
Eclipse内置了几个编译器是什么意思?有许多API(高级AST,低级AST,内部AST),许多自定义选项(什么是警告,什么是错误),但我只知道一个编译器(符号解析器,字节码生成器等)。 - Barthelemy

1
很多人回答的问题与你所问的不同。用于编译代码的JDK与用于运行代码的JVM是不同的。
因为大多数优化发生在JIT,所以编译器生成的代码质量并不是非常重要。这就留下了使用特定JDK的原因:
  1. 编译性能。曾经IBM Jikes是一个非常快的编译器。
  2. 错误报告。集成在IDE中的编译器通常具有更好的错误报告功能。
  3. 符合标准。例如,曾经IBM在StringBuilder中提供了一个额外的重载方法。如果在编译时选择了该重载,则您的代码将在Sun JVM上运行时失败。

根据Darron的说法,“用于编译代码的JDK与运行代码的JVM不同。”?!我只是复制了它以防止进一步编辑。谁投票支持了这个答案? - Raul Lapeira Herrero
1
@Raul Darron是正确的。当你在Eclipse中编译代码时,你使用的是Eclipse编译器,而当你运行它时,你会使用另一个虚拟机(Sun、IBM、JRockit等)。 - Barthelemy
@Barthelemy 我不同意使用来自于执行环境之外的编译器是一个好习惯,但这只是我的个人观点。 - Raul Lapeira Herrero

0
如果你是WebLogic用户,JRockit就非常有意义了。它是一个很棒的JVM。不过我不确定它是否在所有操作系统上都能运行。

1
无论自合并活动以来发生了什么,起源都没有改变。唯一的失败之处在于,如果Oracle将两者合并为一种技术而不是两种技术,则它就不重要了。你知道这是否已经发生了吗?如果不知道,在运行WebLogic时仍然可以选择Sun和JRockit JVM之间的选择。 - duffymo
Oracle的两个JVM(HotSpot和Jrockit)尚未合并。 - Darron
只是因为有人给它点了踩,我就给它点个赞。JRockit是一个合理的选择。我们曾经在编译器课程中比较过IBM、JRockit和Sun JDK的性能,结果发现对于长时间运行的应用程序,JRockit比Sun JDK快得多(虽然差距不大),而IBM JDK则是另一个级别的。 - Barthelemy
@Andy,这个回答没有回答问题。 - BacMan
1
“使用不同的编译器有好的技术原因吗?” - 是的,确实有。它给出了选择非Sun JVM的一个原因:在部署到WebLogic时性能更好。我没有看到你的回答,BacMan,只有一个反对票和无用的评论。让我们看看你的答案。 - duffymo
显示剩余6条评论

0

等一下,如果你使用JRockIt或任何其他JRE,你将失去可移植性,无论商业广告告诉你什么:它从来不是100%的可移植性,也不是100%的标准。

实际上,许多人认为让你切换JRE是“拥抱、扩展和淘汰”策略的一部分,有时是“唯一推荐的方法”来解决问题。

http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish

承诺,我几年前也遭受过这种痛苦并为此付出了代价 :(


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接