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

Java 使用非Sun JRE/JDK的动机是什么?,java,Java,这个问题让我思考,假设有一个Sun JDK可用,我为什么还要使用其他东西呢?使用不同的编译器有什么好的技术原因吗?好吧,我确信人们没有意识到这一点,但是Eclipse有自己的编译器。因此,当您使用Eclipse时,您使用的是nun Sun(Oracle)JDK 使用它也有很多好处。首先,Eclipse实际上内置了一些编译器。IMO提供的最大好处是在您键入时提供红色下划线 Eclipse编译器所做的另一件事是“编译”非编译代码。因此,如果您运行一段代码,并且从未遇到无法编译的代码,那么代码将毫无错

这个问题让我思考,假设有一个Sun JDK可用,我为什么还要使用其他东西呢?使用不同的编译器有什么好的技术原因吗?

好吧,我确信人们没有意识到这一点,但是Eclipse有自己的编译器。因此,当您使用Eclipse时,您使用的是nun Sun(Oracle)JDK

使用它也有很多好处。首先,Eclipse实际上内置了一些编译器。IMO提供的最大好处是在您键入时提供红色下划线


Eclipse编译器所做的另一件事是“编译”非编译代码。因此,如果您运行一段代码,并且从未遇到无法编译的代码,那么代码将毫无错误地运行。否则会出现
NotYetCompiledException
。(或者类似的东西)

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

等一下,如果您使用JRockIt或其他JRE,您将失去可移植性,无论商业广告如何告诉您:它永远都不是100%可移植的,也不是100%标准的

事实上,很多人认为让你转换拥抱的JRE部分,扩展和消灭策略,有时是解决问题的“唯一的可重构的方式”。


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

很多人回答的问题与你问的不同。用于编译代码的JDK与用于运行代码的JVM不同

因为大多数优化都是在JIT时进行的,所以编译器生成的代码的质量不是很重要。这就留下了使用特定JDK的理由:

  • 编译性能。IBM Jikes曾经是一个非常快的编译器
  • 错误报告。内置在IDE中的编译器通常具有更好的错误报告功能
  • 标准遵从性。例如,IBM曾经在StringBuilder中提供了一个额外的重载方法。如果在编译时选择了该重载,那么您的代码在Sun JVM上运行时将失败

  • 在不相信这个问题属于这里的情况下,但在1.4之前的黑暗时期,IBM JDK实际上比Sun one快得多。jikes编译器规定。许可/分发协议因不同供应商而异……而且,您不是指Oracle JDK;)标题与问题的主体不一致。这个问题看起来真的很暗,我的意思是下面的说法不是真的“内置在IDE中的编译器通常有更好的错误报告。”好吧,很公平。但是在普通命令行编译的情况下,使用其他东西是否有很好的技术理由?@Dave,很遗憾,我不能这么说。我不知道。你说Eclipse内置了一些编译器是什么意思?有许多API(高级AST、低级AST、内部AST)、许多自定义选项(什么是警告、什么是错误),但我只知道一个编译器(符号解析器、字节码生成器等)。@Tom-是的,但无论如何JRockit不是Sun,而是BEA。@duffymo有什么区别?世界上没有太阳或东亚银行(在世界上的大部分地区)。无论自那以后发生了什么样的合并活动,它们的起源都是不变的。唯一不重要的方法是,Oracle是否将这两种技术合并在一起,使它们成为一种技术而不是两种技术。你知道已经发生了吗?如果没有,在运行WebLogic时仍然可以在Sun和JRockit JVM之间进行选择。Oracle的两个JVM(HotSpot和JRockit)尚未合并。“使用不同的编译器是否有很好的技术原因?”-是的,有。它给出了选择非Sun JVM的一个原因:在WebLogic上部署时性能更好。我唯一看不到的是你的回答,巴克曼,只有一个否决票和一个无用的评论。让我们看看你的答案。根据Darron的说法,“用于编译代码的JDK与用于运行代码的JVM不同。”??!!,只是复制到这里,以防止进一步编辑。谁投票给这个答案的?@Raul Darron是对的。当您在Eclipse中编译代码时,您使用的是Eclipse编译器,当您运行它时,您将使用另一个VM(Sun、IBM、JRockit等)。@Barthelemy我不同意使用从执行环境以外的其他来源提供的编译器是一个很好的做法,但这只是我的建议。