创建“无法为对象堆保留足够的空间”错误

时间:2010-05-04 15:14:49

标签: java jvm memory-management

是否有一个实用程序(对于Windows)使用了内存,所以我可以创建一个JVM“无法为对象堆保留足够的空间”错误?

我想在JVM之外的进程中耗尽这个内存。

5 个答案:

答案 0 :(得分:7)

只需使用-Xms标志

java -Xms3g org.foo.Main

以上将尝试创建3 GB的初始堆大小,只需调整数量,使其大于系统的总内存(物理和虚拟)

答案 1 :(得分:-1)

我想你可以试试这个:

String s = "b";
for (int i = 0; i < 1000 000; i++) {
  s+="b";
}

因为每次运行第s + =“b”行时都会分配新的字符串,所以它应该用完java堆。

答案 2 :(得分:-1)

List<Object> leak = new ArrayList<Object>();
while(true) {
    leak.add(new Object());
}

答案 3 :(得分:-1)

通过运行如下所示的许多脚本,您可以使用任意数量的内存:

public static void main(String[] args)
{
    List<String> l = new ArrayList<String>();
    for (long i = 0 ; i < 100000000l ; i++)
    {
        l.add(new String("AAAAAAA"));
    }
}

具有足够大的堆空间(例如-Xmx1024M)。这样做的问题是,任何现代操作系统都会尝试使用虚拟内存来允许应用程序仍然运行,这会导致硬盘抖动而不是JVM的内存不足。您可能需要将操作系统总交换空间设置为固定的实际情况。

答案 4 :(得分:-1)

这是一个很小的C程序,它将占用命令行中指定的字节数:

#include <stdlib.h>
int main(int argc, char *argv[]) {
  int bytes = atoi(argv[1]);
  char *buf = malloc(bytes);
  while (1) {
    int i;
    for (i = 0; i < bytes; i++) buf[i] += 1;
  }
}