繁体   English   中英

我应该使用 32 位还是 64 位 JDK?

[英]Should I use 32-bit or 64-bit JDK?

多年前,我尝试过 64 位 JDK,但它确实有问题。

你说它现在有多稳定? 你会推荐它吗? 我应该安装 64 位 JDK + eclipse 还是坚持使用 32 位? 另外,除了绕过 4 GB 内存限制之外,64 位比 32 位还有什么优势吗?

如果您想构建一个将使用大量内存(即大于 2GB 的堆)的应用程序,则只有开始为此烦恼。

请允许我引用 Red Hat:

64 位 JVM 的真正优势在于可以使用远大于 2GB 的堆大小。 带有 64 位 JVM 的大页面内存提供了进一步的优化。 下图显示了从 4GB 堆大小(以 2 GB 为增量)运行到 20GB 堆的结果。

那,在一个漂亮的图表中:

32 位与 64 位 JVM 的性能对比

看,没有太大区别。

查看更多(更多图表,是的!): Java 虚拟机调优

我认为答案很简单。

回答问题:“我需要超过 4GB 的内存吗?”。

64 位 JVM 与 32 位 JVM 一样稳定。 没有区别。 事实上,与 32 位 JVM 相比,在 64 位 JVM 中运行的 Java 应用程序将消耗更多 RAM。 所有内部数据结构都需要更多 RAM。

我的日食在 64 位 JVM 中运行。

您打算部署到 32 位还是 64 位环境? 如果您与生产环境相关联,那么您的开发环境应该使用相同的环境类型。

如果您与平台无关,请使用 x64,甚至不要考虑它。 平台成熟稳定。 它为您提供了巨大的扩展空间,因为您只需添加内存并使堆更大。

没有人愿意对 CEO 说:“抱歉,我们选择了 x86,但无法像我们希望的那样扩展。这是一个为期一个月的项目,为 x64 重新测试和重新构建所有平台。”

任何程序的 32 位和 64 位版本之间的唯一区别是机器字的大小、可寻址内存的数量和使用的操作系统 ABI。 对于 Java,语言规范意味着机器字大小和操作系统 ABI 的差异根本无关紧要,除非您也使用本机代码。 (本机代码必须构建为与加载它的 JVM 的字大小相同;如果没有非常奇特的编码,您不能在同一进程中混合 32 位和 64 位构建,并且您不应该不要用 Java 来做这件事。)

64 位使用 64 位指针。 如果您有 4GB+ 的 RAM,并且正在运行在内存中保留 4GB+ 数据结构的 Java 程序,那么 64 位将容纳它。 大胖指针可以指向 4GB+ 内存空间中的任何字节。

但是如果您的程序使用较少的内存,并且您运行 64 位 JVM,则每个指针仍将占用 64 位(8 字节)。 这将导致数据结构更大,这将不必要地消耗内存。

我刚刚在 32 位 JDK (jdk-8u281-windows-i586) 和 64 位 JDK (jdk-8u281-windows-x64) 中编译了一个 MQTT 客户端。 生成的类文件具有匹配的 MD5 校验和。

仅供参考,在您的系统上安装多个 JDK 是完全安全的。 但是,如果您使用的版本很重要,您应该对设置系统路径和 JAVA_HOME 以确保使用正确的版本感到满意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM