我是一个Java平台的绝对新手。我想知道是否需要更改我的代码才能获得64位JRE的好处?
还是说,当我使用"java -d64"来初始化它时,它会以某种涡轮增压模式运行?
非常感谢您的帮助。
我的之前的版本虽然不是错误的,但只是一个快速简化的版本。
从32位到64位的转换不会自动使您的应用程序运行更快,有时可能导致相反的结果。 在"负面"方面, 在JVM中对内存指针进行解引用可能需要比32位指针更长的时间。 对16 GB堆进行完整的垃圾回收和压缩可能比2 GB堆花费更长的时间。
在正面方面: 有些64位处理器指令比32位的更有效。 64位JVM将允许您拥有比32位略小于4GB的堆大小大2^32倍的堆。(如果您能负担得起那么多RAM) 一些JVM可以使用压缩的引用来工作,如果您的堆大小小于4GB,则可以获得64位指令的优势,而不必支付64位解引用的代价。
如果您有一个好的JVM,我建议您使用64位,无论堆大小如何,只需准备好可能需要因为具有真正大的堆而付出性能代价。
我认为64位JVM不会提高应用程序的性能?如何做到呢?
事实上,64位处理器略微较慢。它们具有更复杂的解码管道(向后支持32位操作)。它们需要更多的内存吞吐量(所有指针都是双倍大小的对吧?)。在64位处理器上唯一拥有的就是大量的RAM。而且我们知道,大小就是速度。大量的RAM可以很好地提高某些应用程序的性能(如果应用程序可以使用它)。所以64位-不行。大量的RAM-绝对可以。
还有一件事,64位处理器可以更快地执行原子写入/读取64位数字。如果您使用64位数字(Java中的long类型),则64位处理器会更好,因为它们具有用于处理该类型数字的机器CAS指令。
不需要做任何更改。
使用64位并没有固有的好处。事实上,它会使您的程序在内存中变得更大,因为所有指针将变为64位宽而不是32位。
唯一的优点是在进行64位计算时,例如在代码中使用了很多“longs”或者如果您的应用程序需要超过4GB的内存。
您无需进行任何更改。与C或C ++不同,Java有一个为其编写的规范,可以确保无论在哪个平台上,int(和其他数据类型)始终具有相同的长度。
你的应用程序代码中是否有任何JNI?那么也许你需要关注32位与64位本地二进制文件。
对于你的Java代码来说,32位或64位都是一样的。性能方面已经被之前的帖子充分覆盖了。
是的,您不需要更改任何内容。不同的是JRE而不是您编写的代码。
我发现64位的JVM比32位版本慢。然而,在最新版本的Java 6更新14中,我发现我的许多测试在64位版本与32位版本相比略微更快。无论如何,差异仅为5%到10%。
你的程序使用32位或64位版本取决于你使用的JVM选择。正如已经提到的,你需要检查是否有适当的共享库(最好没有)。
主要区别是能够使用更多内存,尤其是如果需要4 GB或更多。
试试这个:
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位上,轻松应对差异。