【问题标题】:Does Scala work well on proprietary JVM's?Scala 在专有 JVM 上运行良好吗?
【发布时间】:2011-08-31 09:05:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: scala jvm jrockit


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      是的,Scala 可以在非 Sun JVM 上运行。例如,考虑源代码中的这两个 cmets:

       //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应该 是兼容的——并对其进行了测试。但是,当出现问题时,会采取行动确保事情顺利进行。

      【讨论】:

        【解决方案3】:
        1. 我什么都想不到。

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多