对于涉及异常处理的家庭作业练习,我需要生成一个OutOfMemoryError异常,这样我就可以编写一个try-catch并捕获它:
“13.10(OutOfMemoryError)编写一个导致JVM抛出的程序 OutOfMemoryError并捕获并处理此错误。“
我搜索了Java API,但在异常列表中的OutOfMemoryError异常中找不到任何内容。什么是OutOfMemoryError异常,如何为我的作业生成一个?
答案 0 :(得分:5)
比创建数百万个对象更简单(并且保证工作):
public static void throwOomE() {
throw new well, you can just search for the rest of the answer
}
答案 1 :(得分:4)
我能想到的最简单的方法:
for (String x = "x";; x += x);
您可能希望获得一点创意,以便更快地崩溃。
答案 2 :(得分:3)
就像我对每个与java相关的问题一样,我做的第一件事就是google:
java 6 <class-name>
换句话说:
java 6 OutOfMemoryError
我将这条信息链接作为第一个结果:
http://docs.oracle.com/javase/6/docs/api/java/lang/OutOfMemoryError.html
答案 3 :(得分:3)
当JVM无法分配足够的内存来完成请求的操作时,抛出OutOfMemoryError。
要生成这些只是在循环或类似的东西中分配一堆内存,但记住保留已经分配的对象,最好是在ArrayList或其他东西,否则垃圾收集器可能会重用该空间并释放一些内存。
像
这样的东西ArrayList<Object> list = new ArrayList<Object>();
try {
while ( true )
list.add( new Object() );
} catch ( OutOfMemoryError e ) {
// And we are done...
}
您可能希望将Object替换为占用大量空间的类,否则可能需要一些时间。
参考: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/OutOfMemoryError.html
答案 4 :(得分:3)
我最喜欢的方法是。
byte[] crasher = new byte[Integer.MAX_VALUE];
答案 5 :(得分:1)
当VM耗尽内存以分配新对象时,VM会抛出OutOfMemoryError。因此,当您创建太多对象时,可能会导致此异常。
为此,在无限循环中开始创建垃圾收集器不会收集的对象(例如,将它们相互链接) - VM最终会耗尽空闲内存以使下一个对象成为分配,抛出异常。当你抓住它时,要小心,因为你将无法做太多 - VM没有(大量)内存留给任何操作。
答案 6 :(得分:1)
heap。 此外,您应该在某处保留对象的引用,否则garbage colector会关注它们。
二进制崩溃(每次迭代需要的字节数加倍:)
String x = "1";
while (true){
x = (x + x);
}
**阅读所有参考文献以便更好地理解