26

我的公司拥有大量遗留 Java 代码库,我们的许多客户都运行 WebSphere 和 WebLogic。我们正在考虑开始使用 Scala,但无法确认 Scala (2.9.X) 可以很好地与 IBM 的 JDK(和 BEA 的 JRockit)配合使用。

由于这些 JVM 通过了TCK,我会说它应该可以正常工作,但考虑到这些年来我在使用不同 JVM 时遇到的各种问题,我有点紧张。将 scala 与其他 JVM 一起使用时,是否有任何需要注意的问题?

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

欢迎任何战争故事、链接和建议。

4

3 回答 3

13

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

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

但是,如果您没有运行最新版本的 JDK,您可能会看到一些问题。

JVM 之间的通信非常好,我会考虑在其自己的 JVM 中运行 Scala 以隔离您可能遇到的任何问题。

于 2011-08-31T09:18:11.630 回答
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应该是兼容的——并对其进行了测试。但是,当出现问题时,会采取行动确保事情顺利进行。

于 2011-08-31T16:22:18.377 回答
4
  1. 我什么都想不出来。

  2. 编译器应该没什么区别,事实上如果scalac在不同的VM上运行会产生不同的字节码,那肯定是一个bug。

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

不过我同意,如果能从 IBM 或 Azul 等第三方供应商处获得许可,以便将这些平台纳入测试,那就太好了。

于 2011-08-31T09:31:23.367 回答