2011-08-31 59 views
25

我的公司擁有很大的遺留Java代碼庫,我們的許多客戶運行WebSphere和WebLogic。我們正在考慮開始使用Scala,但一直無法證實Scala(2.9.X)與IBM的JDK(以及BEA的JRockit)的配合良好。Scala是否在專有的JVM上運行良好?

由於這些JVM的經過TCK我會說,這應該只是工作,但由於我曾與不同的JVM多年來的各種問題,我有點nervous。在其他JVM上使用scala時有沒有什麼值得注意的地方?

  1. 任何使用(或避免)的編譯器標誌?
  2. 我應該使用Scala在熱點或客戶JVM上編譯代碼嗎?
  3. 混合使用不同版本的Scala/Java在不同JVM上編譯JAR的問題?

歡迎任何戰爭故事,鏈接和建議。

回答

13

無論您使用的是什麼JVM,Scala編譯器都應該生成相同的字節碼。我希望Scala可以在所有三種平臺上運行,但HotSpot已經嘗試針對動態語言進行優化,可能會稍微好一些。 (可能不足以擔心)

近年來,這些平臺之間的差異越來越小,並且在不久的將來,我預計它們都將直接基於OpenJDK(因爲IBM已同意支持OpenJDK)自Oracle擁有這兩個版本以來,JRockit和Hotspot團隊已經合併了一段時間。

但是,如果您未運行最新版本的JDK,則可能會看到一些問題。

JVM彼此交談得非常好,我會考慮在自己的JVM中運行Scala以隔離您可能遇到的任何問題。

4
  1. 沒什麼我能想到的。

  2. 編譯器不應該有所作爲,實際上如果在不同的虛擬機上運行scalac會生成不同的字節碼,那肯定是一個bug。

  3. 您應該始終運行與編譯的Scala版本相同的Scala代碼。在2.x編譯的代碼默認不會在2.x + 1上運行。但是,在2.x.y上編譯的代碼應該在2.x.y + 1上運行。

我同意,雖然從第三方供應商(如IBM或Azul)獲得許可證以將這些平臺包含在測試中會很好。

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是假設是兼容的 - 並測試它。但是,問題出現時,採取行動確保事情順利進行。

相關問題