0

要测试最大堆大小和最大 permgen 空间,根据 Gilli在 Windows 中每个 java 进程的最大内存量中建议的回复?,我写了一个简单的java类,主要方法只是打印系统

当我使用以下参数从控制台运行该类时,它运行良好,但使用 2048 它给出了错误无法保留无法为对象堆保留足够的空间。这意味着对于我的系统,最大堆大小允许在 1536 到 2048 之间

 java -Xms1536m -Xmx1536m  TestJVMParam

根据http://publib.boulder.ibm.com/infocenter/javasdk/tools/index.jsp?topic=/com.ibm.java.doc.igaa/_1vg00014884d287-11c3fb28dae-7ff6_1001.html的链接,据说

在运行 64 位 Java 时,操作系统提供给 Java 进程的内存空间非常大。因此,您可以假设由于 Java 堆和本机堆之间的内存资源争用,Java 堆的最大大小没有限制。

所以我有 8 GB 的内存,为什么 VM 无法为对象堆保留足够的空间?

现在我想要的第二件事是为我的系统找到最大 permgen 大小。所以我用以下参数运行了相同的程序

 java -Xms1536m -Xmx1536m -XX:PermSize=128m -XX:MaxPermSize=128m TestJVMParam

但它再次说无法为对象堆保留足够的空间。这怎么可能,因为我有 8GB RAM 和 windows7 64 位操作系统。而且它甚至不允许128m的permgen?我确定我在这里遗漏了一些东西,但无法弄清楚?

4

0 回答 0