【发布时间】:2014-01-29 17:02:29
【问题描述】:
有人可以解释为什么当 for 循环被注释掉时,这个程序会抛出一个 OutOfMemoryError 吗?如果未注释,则运行良好。
抛出的异常是:
线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
public class JavaMemoryPuzzlePolite
{
private final int dataSize = (int)(Runtime.getRuntime().maxMemory()* 0.6);
public void f()
{
{
System.out.println(dataSize);
byte[] data = new byte[dataSize];
}
/*
for(int i = 0; i < 10; i++) {
System.out.println("Please be so kind and release memory");
}
*/
System.out.println(dataSize);
byte[] data2 = new byte[dataSize];
}
public static void main(String []args)
{
JavaMemoryPuzzlePolite jmp = new JavaMemoryPuzzlePolite();
jmp.f();
}
}
【问题讨论】:
-
在我的机器上编译得很好,不管有没有注释代码
-
为什么f()后面多了一个括号?
-
@mdewitt 这只是一个块。
-
线程“主”java.lang.OutOfMemoryError 中的异常:Java 堆空间
-
在这两种情况下都能正确编译。它在未注释循环的情况下正常运行,但对我来说失败了 OutOfMemoryError 并且循环被注释掉了。如果您更清楚地缩进代码,当然会更容易理解,但这很好。如果你要说有错误,你应该总是说明错误是什么。
标签: java out-of-memory