13

我是 java 平台的绝对 n00b 我想知道我是否需要更改我的代码中的任何内容以获得 64 位 JRE 的好处?

还是当我用“java -d64”启动它时它会以某种涡轮模式运行?

非常感谢您的帮助

4

9 回答 9

13

我以前的版本,虽然不是假的,但很快就被过度简化了。

从 32 位更改为 64 位不会自动使您的应用程序运行得更快,在某些情况下可能会导致相反的结果。在“消极”方面,在 JVM 中取消引用内存指针可能需要比 32 位指针更长的时间,64 位指针。与 2 GB 堆相比,16 GB 堆的完整垃圾收集和压缩可能需要更长的时间。

积极的一面:64 位处理器指令比 32 位处理器指令更有效。64 位 JVM 将使您的堆大小比 32 位的 4 GB 大 2 ^ 32 倍,略小于 4 GB。(如果你买得起这么大的 RAM)如果你的堆大小小于 4 GB,一些 JVM 可以使用压缩引用,从而为你提供 64 位指令的优势,而无需支付 64 位取消引用的价格。

如果你有一个好的 JVM,无论堆大小如何,我都会使用 64 位,只是准备好你可能不得不为拥有一个非常大的堆而遭受性能损失。

于 2008-10-14T10:57:14.863 回答
8

我认为 64 位 JVM 不会获得应用程序的性能吗?如何?

事实上 64 位处理器有点慢。它们具有更复杂的解码管道(向后支持 32 位操作)。他们需要更多的内存吞吐量(所有指针都是双倍大小的,对吧?)。您在 64 位处理器上唯一拥有的是大量 RAM。正如我们所知,大小就是速度。大量的 RAM 可以很好地提高某些应用程序的性能(如果应用程序可以使用它)。所以 64 位 - 不。大量的内存——绝对是的。

还有一件事是 64 位处理器可以做得更快。64 位数字的原子写入/读取。如果您使用 64 位数字(在 java 中为 long),则 64 位处理器会更好,因为它们具有处理此类数字的机器 CAS 指令。

于 2009-07-24T11:46:24.023 回答
7

不,你不需要改变任何东西。使用 64 位没有固有的好处。事实上,它会使您的程序在内存中更大,因为所有指针都将变为 64 位宽而不是 32 位宽。

唯一的优势是当您进行 64 位计算时,例如在您的代码中使用大量“长整数”或者您的应用程序需要超过 4gb 的内存。

于 2008-10-14T06:25:27.033 回答
5

因为执行代码的 JVM 的行为应该相同(整数始终是 32 位签名等),所以无论您运行什么平台,都可以保证(理论上)您的代码运行相同。

32/64 位的区别在于 JVM 如何优化运行时。因此,虽然执行的字节码保持不变,但它可能(或可能不会)以不同的方式进行优化。

简而言之,运行 Java 的 64 位系统执行代码的速度可能比等效的 32 位系统更快。

于 2008-10-14T06:17:27.767 回答
3

你不应该改变什么。与 C 或 C++ 不同,Java 为其编写了一个规范,以确保无论您在什么平台上,int(和其他数据类型)的长度始终相同。

于 2008-10-14T06:11:02.740 回答
2

您的应用程序代码中有任何 JNI 吗?那么也许您需要担心 32 位与 64 位本机二进制文件。

32 或 64 对您的 Java 代码都是一样的。以前的海报似乎已经很好地涵盖了性能方面。

于 2009-07-24T13:25:44.597 回答
1

是的,你不需要改变任何东西。不同的是 JRE,而不是您编写的代码。

于 2008-10-14T06:14:18.243 回答
0

尝试这个:

public class Benchmark {
public static void main(String args[]) {
long time = System.currentTimeMillis();
for (int a = 1; a < 900000000; a++) {
    for (int b = 1; b < 20; b++) {
    }
}
long time2 = System.currentTimeMillis() - time;
System.out.println("\nTime counter stopped: " + time2);

}

在 32 位和 64 位中,一笑置之。

于 2014-01-27T22:02:05.763 回答
0

我发现 64 位 JVM 比 32 位版本慢。然而,在最新版本的 Java 6 update 14 中,我发现我的许多测试在 64 位版本上比 32 位版本稍微快一些。无论哪种方式,只有 5% 到 10% 的差异。

您的程序是使用 32 位还是 64 位版本取决于您使用的 JVM 的选择。如前所述,您需要检查是否有适当的共享库。(或理想情况下没有)

主要区别在于如果您需要 4 GB 或更多,则可以使用更多内存。

于 2009-07-24T20:04:59.490 回答