-3

我在两台机器上运行相同的代码。一(Windows 7 64)使用:

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>

另一个(linux 64)使用:

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

运行之间的输出应该会有所不同,但不会像这两台机器之间那样剧烈。

4

2 回答 2

2

我在同一个 Linux 机器上使用 Java 6 更新 31 和 Java 7 更新 7 获得 ~1.78 和 ~3.8。

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 6 版本更新的 Java 版本。

于 2012-12-18T16:11:50.887 回答
0

其中一台机器运行 java 6,另一台运行 java 7。这些版本之间有许多变化:

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

此外,可能有很多细节更改可能会影响文档中未描述或未定义的行为。

如果不查看源代码或至少不知道您在谈论哪种输出差异,就不可能知道这些差异中的哪些可能会影响您的程序。

于 2012-12-18T15:59:09.587 回答