我正在使用以下 GC 内存参数:
export MEM_OPTS="-Xmx2900m -Xms2900m -XX:NewSize=786m -XX:MaxNewSize=786m -XX:+UseTLAB -XX:MaxPermSize=128m"
我使用的是 32 位 JVM。我的服务器 RAM 是 10 GB。
从甲骨文网站,我得到了
为什么我不能使用 32 位 JVM获得更大的堆?
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 支持的系统配置。
好的。现在假设我的 32 位服务器可以占用 3.2 GB。据我所知:
-Xmx is the total heap memory -XX:NewSize / -XX:MaxNewSize is the range of the size of the new generation inside that heap the difference is the range of the size of the old generation -XX:PermSize / -XX:MaxPermSize is the range of the size of the permanent generation, which is the non-heap memory
据此,3.2 GB 不应包含 PermSize,因为这不是堆内容。对吗?
如果我错了,请告诉我。
我可以在 Xmx 和 NewSize 中划分 3.2 GB。对 ?