64位Java平台的好处

13

我是一个Java平台的绝对新手。我想知道是否需要更改我的代码才能获得64位JRE的好处?

还是说,当我使用"java -d64"来初始化它时,它会以某种涡轮增压模式运行?

非常感谢您的帮助。

9个回答

13

我的之前的版本虽然不是错误的,但只是一个快速简化的版本。

从32位到64位的转换不会自动使您的应用程序运行更快,有时可能导致相反的结果。 在"负面"方面, 在JVM中对内存指针进行解引用可能需要比32位指针更长的时间。 对16 GB堆进行完整的垃圾回收和压缩可能比2 GB堆花费更长的时间。

在正面方面: 有些64位处理器指令比32位的更有效。 64位JVM将允许您拥有比32位略小于4GB的堆大小大2^32倍的堆。(如果您能负担得起那么多RAM) 一些JVM可以使用压缩的引用来工作,如果您的堆大小小于4GB,则可以获得64位指令的优势,而不必支付64位解引用的代价。

如果您有一个好的JVM,我建议您使用64位,无论堆大小如何,只需准备好可能需要因为具有真正大的堆而付出性能代价。


8

我认为64位JVM不会提高应用程序的性能?如何做到呢?

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

还有一件事,64位处理器可以更快地执行原子写入/读取64位数字。如果您使用64位数字(Java中的long类型),则64位处理器会更好,因为它们具有用于处理该类型数字的机器CAS指令。


2
AMD64指令集向程序暴露更多的寄存器,从而可能提高执行速度。 - Sebastian

7

不需要做任何更改。

使用64位并没有固有的好处。事实上,它会使您的程序在内存中变得更大,因为所有指针将变为64位宽而不是32位。

唯一的优点是在进行64位计算时,例如在代码中使用了很多“longs”或者如果您的应用程序需要超过4GB的内存。


在Windows系统上,至少有一个好处是可以使用超过1.5GB的内存,而32位Java进程存在这样的限制。请参考http://mystyleit.com/blogs/mystyleit/archive/2009/05/27/32bit-windows-memory-and-java.aspx。 - Jonik
1
最新的64位JVM在分配引用方面不是更加智能吗?也就是说,如果不需要完整的64位,只使用32位引用。我想我在某个地方读到过这样的内容。 - Jack Leow

5
由于代码执行的JVM应该表现相同(整数始终为32位有符号等),因此理论上保证您的代码无论在哪个平台上运行,都会以相同的方式运行。
32/64位差异体现在JVM如何优化运行时。因此,虽然执行的字节码保持不变,但可能(也可能不)以不同的方式进行优化。
简而言之,运行Java的64位系统可能比运行32位系统更快地执行代码。

3

您无需进行任何更改。与C或C ++不同,Java有一个为其编写的规范,可以确保无论在哪个平台上,int(和其他数据类型)始终具有相同的长度。


2

你的应用程序代码中是否有任何JNI?那么也许你需要关注32位与64位本地二进制文件。

对于你的Java代码来说,32位或64位都是一样的。性能方面已经被之前的帖子充分覆盖了。


1

是的,您不需要更改任何内容。不同的是JRE而不是您编写的代码。


0

我发现64位的JVM比32位版本慢。然而,在最新版本的Java 6更新14中,我发现我的许多测试在64位版本与32位版本相比略微更快。无论如何,差异仅为5%到10%。

你的程序使用32位或64位版本取决于你使用的JVM选择。正如已经提到的,你需要检查是否有适当的共享库(最好没有)。

主要区别是能够使用更多内存,尤其是如果需要4 GB或更多。


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位上,轻松应对差异。


5
在这种情况下,描述它们之间的区别会很有用。 - Rob Baillie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接