我的公司拥有庞大的遗留Java代码库,我们的许多客户都运行WebSphere和WebLogic。我们正在考虑开始使用Scala但是无法确认Scala(2.9.X)与IBM的JDK(以及BEA的JRockit)运行良好。
由于这些JVM通过TCK,我会说它应该可以正常工作,但考虑到我多年来与不同JVM的各种问题,我有点nervous。与其他JVM一起使用scala时是否有任何问题需要注意?
欢迎任何战争故事,链接和建议。
答案 0 :(得分:13)
无论您使用何种JVM,Scala编译器都应生成相同的字节代码。我希望Scala可以在所有三个平台上运行,但是HotSpot已经尝试针对动态语言进行优化,并且可能稍好一些。 (可能不足以担心)
近年来,这些平台之间的差异越来越小,并且在不久的将来我希望它们都直接基于OpenJDK(因为IBM已经同意现在支持OpenJDK)JRockit和Hotspot团队已合并为自Oracle拥有这两者以来的一段时间。
但是,如果您没有运行最新版本的JDK,则可能会出现一些问题。
JVM很好地相互交流,我会考虑在自己的JVM中运行Scala,以隔离您可能遇到的任何问题。答案 1 :(得分: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 假设兼容 - 并对其进行测试。但是,在出现问题的同时,采取行动确保事情顺利进行。
答案 2 :(得分:4)
我无法想到。
编译器不应该有所作为,事实上如果在不同的VM上运行scalac
会生成不同的字节码,那肯定是一个错误。
您应始终使用与其编译的相同版本的Scala运行Scala代码。在2.x上编译的代码默认情况下不会在2.x + 1上运行。编译在2.x.y上的代码应该在2.x.y + 1上运行。
我同意,从IBM或Azul等第三方供应商那里获得许可证以便将这些平台纳入测试中会很不错。