【问题标题】:64 Bit Java for small stand alone applications用于小型独立应用程序的 64 位 Java
【发布时间】:2010-12-10 10:07:22
【问题描述】:

在 64 位 Java 上迁移小型独立 Java 应用程序(最大:100-200MB 堆)真的值得吗? 有没有什么特别的优势; 我的观察是,它只会增加应用程序的内存占用。

请发表您的经验/意见。

【问题讨论】:

    标签: java


    【解决方案1】:

    来自official FAQ

    64 位和 32 位 VM 的性能特点是什么?

    通常,与在 32 位 VM 上运行相同的应用程序相比,能够处理大量内存的好处是在 64 位 VM 中性能损失很小。这是因为系统中的每个本机指针占用 8 个字节而不是 4 个字节。这些额外数据的加载会影响内存使用,这取决于在执行期间加载了多少指针,这会导致执行速度稍慢你的 Java 程序。好消息是,在 AMD64 和 EM64T 平台以 64 位模式运行时,Java VM 获得了一些额外的寄存器,可用于生成更高效的本机指令序列。这些额外的寄存器将性能提高到在比较 32 位和 64 位执行速度时通常完全没有性能损失的程度。
    当您迁移到 64 位 VM 时,比较在 64 位平台上运行的应用程序与在 SPARC 上运行 32 位平台的应用程序的性能差异大约为 10-20%。在 AMD64 和 EM64T 平台上,此差异范围为 0-15%,具体取决于访问应用程序执行的指针数量。

    我会说,如果它没有坏,就不要修理它。

    【讨论】:

      【解决方案2】:

      如果您在 x64 上切换到 64 位,则可以利用 64 位寄存器和其他寄存器。这可能会将性能提高 5%。

      您可以使用 -XX:+UseCompressedOops 来使用相同的内存占用空间(它使用 35 位地址空间,32 位值最多 32 GB),但我发现它最终会消耗大约 5% 的性能。

      【讨论】:

      • 这个答案的一个关键点是;使用 32 位引用的 64 位 JVM 可以寻址 32+3 位地址空间,因为它可以假设对象地址的最低 3 位为 0。它可以这样做,因为每个对象都与 8 字节边界对齐,不是 1 字节边界。这允许 JVM 拥有一个寻址 35 位或接近 32 GB 的堆。
      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多