Scala在专有的JVM上表现如何?

25

我的公司有一个庞大的遗留Java代码库,许多客户使用WebSphere和WebLogic。我们正在考虑开始使用Scala,但一直无法确认Scala(2.9.X)与IBM的JDK(以及BEA的JRockit)是否兼容。

由于这些JVM通过了TCK测试,我认为它应该可以正常工作,但是考虑到我多年来在不同JVM上遇到的各种问题,我有点紧张。在使用其他JVM时,有什么需要注意的地方吗?

  1. 是否需要使用(或避免使用)任何编译器标志?
  2. 我应该在热点或客户机的JVM上使用Scala编译代码?
  3. 在不同JVM上使用不同版本的Scala / Java编译的JAR混合使用会有哪些问题?

欢迎分享任何故事、链接和建议。

3个回答

13

无论您使用哪个JVM,Scala编译器应该生成相同的字节码。我希望Scala能在所有三个平台上运行,但HotSpot已经尝试优化动态语言,可能会稍微好一些。(可能不用太担心)

近年来,这些平台之间的差异越来越小,在不久的将来,我预计它们都将直接基于OpenJDK(因为IBM现在同意支持OpenJDK)。自从Oracle拥有了两者,JRockit和Hotspot团队已经合并了一段时间。

然而,如果您没有运行最新版本的JDK,则可能会出现一些问题。

JVM之间的通信非常良好,我建议在其自己的JVM中运行Scala以隔离您可能担心的任何问题。


5

是的,Scala可以在非Sun JVM上运行。例如,以下是源代码中的两个注释:

 //print SourceAnnotation in a predefined way to insure
 // against difference in the JVMs (e.g. Sun's vs IBM's)

    // on IBM J9 1.6 do not use ForkJoinPool

这种情况并不多见。毕竟,各种JVM都应该是兼容的,并经过测试以确保兼容性。但是,如果出现问题,就会采取措施确保一切正常运行。


4
  1. 我想不到任何内容。

  2. 编译器不应该有区别,实际上,如果在不同的虚拟机上运行scalac会生成不同的字节码,那么肯定是一个bug。

  3. 您应该始终使用与编译时相同版本的Scala运行Scala代码。默认情况下,2.x上编译的代码不能在2.x + 1上运行。但是,在2.x.y上编译的代码应该可以在2.x.y+1上运行。

尽管如此,我同意从IBM或Azul等第三方供应商处获得许可以将这些平台包含在测试中。


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