我写了一个示例java应用程序,它分配内存然后永远运行.
为什么幸存者空间使用的内存为0kbytes?
List<String> stringlist = new ArrayList<String>();
while (true) {
stringlist.add("test");
if (stringlist.size() >= 5000000)
break;
}
while (true)
for (String s : stringlist);
Run Code Online (Sandbox Code Playgroud)
因为"test"是一个字符串文字,它最终将永久存储在堆中.您创建的对象的内存大小为5000000 + 4*2~5MB,可轻松融入Eden空间.
修改
stringlist.add("test");
Run Code Online (Sandbox Code Playgroud)
至
stringlist.add(new String("test"));
Run Code Online (Sandbox Code Playgroud)
你会得到5000000*4*2 = 38MB,这很可能仍然适合伊甸园.您可以增加列表大小或字符串长度,以确保您有幸存者.