0

我正在使用以下 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。对 ?

4

1 回答 1

1

NewSize 是最大堆大小的一部分。它必须更小。

如果你有 Java 6,我会使用 64 位 JVM,因为它会让你的生活更简单。;) 除非您必须使用 32 位共享库,否则没有什么不好的地方。

BTW-XX:+UseTLAB是默认值。

于 2012-09-14T09:50:10.440 回答