2012-12-18 191 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/

此外,也有可能有很多的细节变化,这可能会影响行为,根据文件没有描述或未定义。

如果不看源代码或者至少知道你在说什么样的输出差异,这些差异可能会影响你的程序。