【发布时间】:2010-05-04 15:14:49
【问题描述】:
是否有使用内存的实用程序(适用于 Windows),因此我可以创建 JVM“无法为对象堆保留足够的空间”错误?
我想在 JVM 之外的进程中用完这些内存。
【问题讨论】:
-
这里的真正目标是什么?让 JVM 因为 box 内存耗尽而无法启动?还是您只是在寻找打印信息的技巧?
标签: java jvm memory-management
是否有使用内存的实用程序(适用于 Windows),因此我可以创建 JVM“无法为对象堆保留足够的空间”错误?
我想在 JVM 之外的进程中用完这些内存。
【问题讨论】:
标签: java jvm memory-management
只需使用 -Xms 标志
java -Xms3g org.foo.Main
上面将尝试创建 3 GB 的初始堆大小,只需调整该数字使其大于系统的总内存(物理和虚拟)
【讨论】:
我觉得你可以试试这个:
String s = "b";
for (int i = 0; i < 1000 000; i++) {
s+="b";
}
因为每次运行 s+="b" 行时都会分配新字符串,所以它应该用完 java 堆。
【讨论】:
List<Object> leak = new ArrayList<Object>();
while(true) {
leak.add(new Object());
}
【讨论】:
您可以通过运行一些如下所示的脚本来使用任意数量的内存:
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 的内存。您可能需要将您的操作系统总交换空间设置为实际遇到这种情况的固定值。
【讨论】:
这是一个小型 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;
}
}
【讨论】: