【问题标题】:Java JDK 32 bits vs 64 bitsJava JDK 32 位与 64 位
【发布时间】:2012-02-11 10:07:51
【问题描述】:

我正在创建一个非常简单的应用程序,它读取和显示文本文件并搜索它们。

我问自己是否有兴趣向用户推荐 32 位和 64 位版本。

区别仅在于使用 64 位版本可以访问更多内存堆大小还是有其他兴趣?

32 位编译程序能否在 64 位 JVM 上运行(我假设是的)

【问题讨论】:

  • 只要您的应用程序是 100% 纯 Java,除了可能的堆大小之外没有太大区别。
  • 请记住,32 位和 64 位 JRE 是分开安装的,大多数人默认只安装 32 位(即使在 64 位机器上)。
  • 感谢您的回答。正如我所料,对于纯 Java,这不会改变任何东西(除了堆大小)。
  • 如果您打算将您的 Java 程序打包为“应用程序包”(即包含您的 Java 和完整 JRE 的独立 .exe/.app/binary),则在 32-位和 64 位是绝对在范围内,在这里。没有人愿意为了运行您的 .jar 文件而安装 JRE,与 64 位捆绑的 32 位 JRE 相比,您可能会接触到(稍微)更广泛的受众。

标签: 32bit-64bit java


【解决方案1】:

any 程序的 32 位和 64 位版本之间的唯一区别是机器字的大小、可寻址内存的数量以及正在使用的操作系统 ABI。对于 Java,语言规范意味着机器字长和操作系统 ABI 的差异根本不重要,除非您也使用本机代码。 (本机代码必须构建为与将加载它的 JVM 的字长相同;您不能在同一个进程中混合 32 位和 64 位构建,除非非常奇特确实是编码,你不应该用 Java 来做。)

【讨论】:

  • 原生字的大小可以对 C 或 C++ 代码产生根本性的影响,尤其是在编写糟糕或拙劣的情况下,但 Java 代码根本看不到差异。
  • 感谢您的回答。我很清楚,在纯 Java 中这不会改变任何事情。
  • @HpTerm:在纯 Java 中,所有变化都是可寻址内存量(好)和每个对象的内存量(不太好)。除非您的运行接近 VM 限制,否则不会导致您看到的问题的更改。
  • @Donald 甚至每个对象的数量也基本相同,因为至少 Hotspot 无论如何已经在 8 字节边界上分配了。对于堆
  • @Voo:取决于细节。在 8 字节边界上分配当然是正常的,但是对象内的字段可能会是 4 字节对齐,否则浪费量会太高; 8 字节对齐仅对 double 和 long 以及任何类型的 64 位引用有意义,并且许多对象有许多不属于这些类型的字段。
【解决方案2】:

对我来说唯一改变它的时候是当涉及到以一种或另一种方式推动它的本机库时。如果您只是在 Java 领域,那么实际上,除非您需要大于 4GB 的堆大小,否则差别很小。

编辑:差异包括它使用的内存比 32 位稍多,如果您使用的是 6u23 之前的版本并且不使用-XX:+UseCompressedOops,则更多。两者之间也可能存在细微的性能差异,但也没有太大差异。

【讨论】:

  • 您没有说“没有区别”,而是说“差别很小。据我所知,假设纯 Java,差别很小。
猜你喜欢
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 2015-03-19
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多