我的系统报告 8Gb,但当我尝试为 Java 程序保留 6.5Gb 堆空间,甚至 4Gb 时,它都会失败。这是因为我安装了 32 位版本吗?
无法分配堆 java -Xmx3072m -jar {...}
启动正常,但应用程序内存不足。java -Xmx2048m -jar {...}
答案1
信不信由你,这是一个常见问题。所以你的答案是这里:
“32 位 JVM 的最大理论堆限制为 4G。由于各种其他限制(例如可用交换、内核地址空间使用、内存碎片和 VM 开销),实际上限制可能会低得多。在大多数现代 32 位 Windows 系统上,最大堆大小范围为 1.4G 到 1.6G。在 32 位 Solaris 内核上,地址空间限制为 2G。在运行 32 位 VM 的 64 位操作系统上,最大堆大小可能更高,在许多 Solaris 系统上接近 4G。
从 Java SE 6 开始,不再支持 Windows /3GB boot.ini 功能。
如果您的应用程序需要非常大的堆,则应在支持 64 位应用程序的操作系统版本上使用 64 位 VM。有关详细信息,请参阅 Java SE 支持的系统配置。