【问题标题】:Using 32 bit Java in 64 bit Windows在 64 位 Windows 中使用 32 位 Java
【发布时间】:2013-10-17 21:15:15
【问题描述】:

我在 windows 7 64 位中使用 32 位版本的 Java。该系统具有 6 GB 的 RAM。但是当操作系统为 JVM 分配内存时,它不会超过 1.5 GB(与 32 位操作系统相同)。可能的原因是什么,JVM 不允许有足够的内存。如果可能的话如何解决它?我无法升级到 64 位 JVM。

【问题讨论】:

  • 为什么不能升级?
  • 它是 32 位应用程序,因此它不会获得比 32 位操作系统更多的内存。我不知道在 Windows 上 app 的内存区域限制是 2GB 还是 3GB……JVM 有内存用于对象、堆栈和类,你可能只参考第一个。
  • @Troubleshoot 可能某些程序无法在 64 位版本上运行
  • @Troubleshoot 可能有很多正当的原因,例如使用本机 DLL。
  • 你说的是最初分配的内存还是最大可用内存?

标签: java jvm 32bit-64bit heap-memory


【解决方案1】:

Windows 上的 32 位进程仍然受到与在 32 位 Windows 操作系统上运行相同的限制。查看此问题的答案。

How much memory can a 32 bit process access on a 64 bit operating system?

来自 Oracle 的This guidance 建议 32 位 JVM 可以使用大约 1.5GB。

32 位 JVM 的最大理论堆限制为 4G。由于各种额外的限制,例如可用交换、内核地址空间使用、内存碎片和 VM 开销,实际上限制可以低得多。在大多数现代 32 位 Windows 系统上,最大堆大小范围为 1.4G 到 1.6G。

【讨论】:

  • 2 GB 似乎与 1.5 GB 不同。
【解决方案2】:

this article所示:

默认的最大堆空间是最大 192 字节的物理内存的 1/2 和最大 1G 的物理内存的 1/4。

我知道你有超过 1G,但也许这也适用于你

【讨论】:

    【解决方案3】:

    32 位应用程序将无法使用超过 4GB 的 RAM。实际上,它不能使用超过 3GB,因为它需要为操作系统保留一些虚拟内存空间。

    此外,默认情况下,JVM 最多分配四分之一的可用 RAM。如果你想覆盖这个使用选项:

    java -XX:DefaultMaxRAMFraction=1
    

    它应该使用对 32 位应用程序可行的所有可用 RAM。

    来源:http://jvm-options.tech.xebia.fr/#

    【讨论】:

      【解决方案4】:

      为了能够使用更多内存,您必须升级到 64 位。不幸的是,64 位 JVM 无法加载 32 位 dll,因此对 dll 的调用必须从不同的进程进行,并且您必须使用 rpc 机制与进程对话,而不是直接使用 dll。很多。的工作,但它可以完成。

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 2012-10-26
        • 2011-09-02
        • 2011-05-13
        • 2016-11-16
        • 2019-01-07
        • 2012-11-24
        • 2013-06-11
        • 1970-01-01
        相关资源
        最近更新 更多