java - 对于任务关键型工作负载,64 位 JVM 与 32 位一样好吗?

标签 java performance jvm 64-bit stability

<分区>

我以不同的方式问了同样的问题,问题被关闭了:https://stackoverflow.com/questions/7231460/java-64-bit-or-32-bit
这是我第二次尝试获得客观答案。

我们正在考虑将我们的产品迁移到 64 位 Java,以供那些在 Solaris (SPARC) 和 Linux (RHEL 5.x) 上突破 32 位服务器 JVM 界限的客户。我们的主管问道:“几年前,64 位还不存在。现在怎么样?”

  1. 对于那些没有突破 4 GB 边界的客户,使用 64 位 JVM 会对性能产生不利影响吗?如果有,多少钱?我们创建了很多对象。 (我们不想同时支持 32 位和 64 位 JVM。最好是非此即彼的情况)。

  2. 对于那些突破 4 GB 边界的人,我们能否期望 JVM 与 32 位的一样稳定?

    • 性能会成为问题吗?如果有,多少钱?我们创建了很多对象。
    • 哪些 GC 调优技术是新的?
    • 分析器:它们是否适合分析 64 位 JVM 应用程序?

更新:对于那些评论者和那些关闭我之前的问题的人,我相信我现在理解你的焦虑。与此同时,我相信你们中的一些人做出了一些(不真实的)假设,认为我很懒惰或者是一个毫 headless 绪的西装。我会在调查后发布我的发现。感谢所有给我真正指点的人。

最佳答案

由于您几乎可以自己进行测试,因此我假设您期待关于使用 32/64 位 JVM 的体验的“现实生活”答案。

我所在的团队负责为银行创建财务应用程序。我们使用 32 位 JVM 在 Windows 上进行开发,几乎所有我们的服务器应用程序都在运行 64 位 JVM 的 RHEL 上运行。性能对我们来说从来都不是问题,因为我们使用了不错的机器(我们的常规服务器机器使用 32 核 AMD 机器,至少有 32 GiB RAM)。

正如预期的那样,由于指针大小的差异,堆大小增加,但由于现在限制从 4GiB 提高了,所以它再次不会打扰我们。我们的应用程序还创建了很多 对象。我们可以使用 VisualVM 或命令行工具调试我们的应用程序。关于 GC 设置,我们使用默认设置并尝试更改当我们测量它实际上是 GC 造成问题时。分配一个比您的应用程序使用的堆大小 (8GiB) 大得多的堆大小对我们来说很常见,您会看到一个大的 GC 每天扫描一次,这非常好。

我听说 JDK 7 有一个新的 GC 算法叫做 G1 garbage collector哪个更适合服务器应用程序,因此您应该完全尝试一下。

综上所述,您最好的选择是尽可能多地测量(分别在 32 位和 64 位机器上使用 32 v/s 64 位)然后再决定。仅供引用,我们的组织正在完全推进 64 位 JVM,因为目前大多数库存服务器硬件都是 64 位的,而 4GiB 对于现代服务器应用程序(至少在我们的领域)是非常有限的。

关于java - 对于任务关键型工作负载,64 位 JVM 与 32 位一样好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7238714/

相关文章:

java - 奇怪的日期问题

c# - 如何加快这个计算

ios - MFMessageComposeViewController 在 iOS 7 上慢得多

java - 编译器 asm 字节码表达式

java - Android - 单击小部件时启动配置 Activity - 不起作用

java - 尽管指定了正确的主类、类路径等,Jar 仍无法运行

java - 无法找到库 : liblwjgl. dylib

c# - 提高字符串数组自定义排序的性能

java - 试图在 Java 中初始化 Scala 创建的类

java - JDK 11 与 JDK 13 的性能