2012-01-16 231 views
7

我正在创建一个非常简单的应用程序,它读取并显示文本文件并在其中搜索。Java JDK 32位与64位

我在问自己是否有兴趣向我提出32位和64位版本给用户。

只有在使用64位版本访问更多内存堆大小或者是否有其他兴趣时才有所不同?

将在一个64位的JVM 32位已编译的程序工作(I假设是)

+4

只要您的应用程序是100%纯Java,除了可能的堆大小外,没有多大区别。 – Thomas

+0

只记得32位和64位JRE是单独安装的,大多数人只默认安装了32位(即使在64位机器上)。 – Viruzzo

+0

Thanx为您的答案。正如我所料,对于纯Java来说,这不会改变任何东西(堆大小除外)。 – HpTerm

回答

12

32位和64位之间的唯一的差异的生成的任何程序是机器字的大小,则可寻址内存的数量以及使用的操作系统ABI。使用Java,语言规范意味着除非您使用本机代码,否则机器字大小和OS ABI的差异根本不重要。 (原生代码必须的构建与加载它的JVM的字大小相同;您不能在同一进程中混合使用32位和64位构建,而且确实没有非常奇特的编码,而您不应该这样做与Java有关。)

+0

原生字的大小可以对C或C++代码产生根本性的区别,特别是如果编写得很糟糕或者写得很糟糕,但Java代码根本看不出差异。 –

+0

Thanx的答案。我清楚地知道,在纯Java中,这不会改变任何事情。 – HpTerm

+1

@HTTerm:在纯Java中,所有变化都是可寻址内存的数量(好)和每个对象的内存数量(不太好)。除非您接近VM限制,否则这些更改都不会导致您可以看到的问题。 –

2

唯一的时代已经摆在我面前的是当有本地库参与推动它的方式或其他。如果你现在只是在Java领域,那么除非你需要大于4GB的堆大小,否则几乎没有什么区别。

编辑:差异包括像它使用略多于32位内存的东西,显着更多,如果你使用6u23之前的版本,并且不使用-XX:+UseCompressedOops。两者之间也可能存在轻微的性能差异,但再次没有什么巨大的。

+0

你没有说“没有区别”,而是说“非常小的差别。就我所知,假设纯Java,这是非常小的差异。 – HpTerm

+0

@HTTerm查看更新的答案。 – berry120

+1

谢谢你的回答 – HpTerm