2012-12-18 137 views
-3

我在兩臺機器上運行相同的代碼。一個(窗口7 64)用途:Java兼容性

java version "1.7.0" 
java<TM> SE Runtime Environment <build 1.7.0-b147> 
Java HotSpot<TM> 64-Bit Server VM <build 21.0-b17, mixed code> 

,另一個(64的Linux)使用:

java version "1.6.0_10" 
Java(TM) SE Runtime Environment (build 1.6.0_10-b33) 
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode) 

我得到不同的輸出。我認爲這是虛擬機,因爲我複製了.class文件,運行這些文件,仍然得到不同的輸出。 任何人都可以告訴可能導致這種情況的原因嗎?

編輯:

的代碼是在http://pastebin.com/5EmYFkYn

,因爲它是這兩個機器之間的輸出應該運行之間變化中,但不作爲顯着。

+10

你能告訴我們你的輸出嗎?你得到了什麼輸出以及你期望的輸出?還有代碼? –

+0

@PradeepSimha該代碼大約600行,並使用指數分佈模擬服務器/客戶端。我應該在這裏粘貼嗎? – Shmoopy

+4

如果你在同一臺機器上運行你的代碼兩次,你會得到完全相同的輸出嗎?仿真聽起來像它有一些隨機的方面,因此你永遠不會期望相同的輸出。 – jlordo

回答

2

在同一個Linux機器上,我得到Java 6 update 31和〜3.8 with Java 7 update 7的約1.78。

但是,如果我得到new Random(1)或其他數字的隨機種子,我會得到相同的結果。例如1對於第三個數字總是產生〜0.79。

查看隨機種子的創建代碼,代碼是完全不同的,我懷疑nextDouble()不是隨機的,因爲它應該是,即你的值應該變化更多,它應該很重要種子被設置。


我每次用相同版本的Java在同一臺機器上運行它時,會得到不同的結果。很可能是因爲代碼中有隨機元素。

499470 0 3.7783771731449503 10000.355400975242 0.07565041858446288 42 
499430 0 3.8374792234448916 10001.384837656298 0.07684781955465791 53 
499604 0 3.868284648304009 10000.698947869778 0.07743242690681965 57 
499114 0 3.822480313596936 10001.023197561686 0.07659315164172079 46 
500030 0 3.8653339884104576 10000.112232176294 0.077302909223347 43 

由於在同一臺機器上運行不同,所以我希望它們在不同的機器和不同版本的Java上有所不同。

我仍然會認真考慮獲得Java 7以上版本的新版本,而不是Java 7的「無更新」版本或四年前的Java 6版本。

+0

感謝您的測試。 Linux上的第三個輸出(〜3.77)大約是1.15。這非常重要。 – Shmoopy

+0

在Java 6 update 31和〜3.8上使用Java 7 update 7,在同一Linux機器上得到約1.78。 –

+0

如果我在兩個版本中都得到了帶有「新Random(1)」的種子,我得到了〜0.79。我會看看如何計算種子。 –

0

一個機器上運行的Java 6,其他Java 7中有這些版本之間的許多變化:

http://openjdk.java.net/projects/jdk7/features/

此外,也有可能有很多的細節變化,這可能會影響行爲,根據文件沒有描述或未定義。

如果不看源代碼或者至少知道你在說什麼樣的輸出差異,這些差異可能會影響你的程序。