我在GC内存参数下面使用:
export MEM_OPTS =“ - Xmx2900m -Xms2900m -XX:NewSize = 786m -XX:MaxNewSize = 786m -XX:+ UseTLAB -XX:MaxPermSize = 128m”
我使用的是32位JVM。我的服务器RAM是10 GB。
从Oracle网站,我得到了
为什么我不能使用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支持的系统配置。
Ok.Now让假设我的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。对吗?
答案 0 :(得分:1)
NewSize是最大堆大小的一部分。它必须更小。
如果你有Java 6,我会使用64位JVM,因为它会让你的生活变得更简单。 ;)除非你必须使用32位共享库,否则几乎没有什么不妥。
BTW -XX:+UseTLAB
是默认值。