是否有一个实用程序(对于Windows)使用了内存,所以我可以创建一个JVM“无法为对象堆保留足够的空间”错误?
我想在JVM之外的进程中耗尽这个内存。
答案 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;
}
}