什么是OutOfMemoryError异常,我该如何生成它?

时间:2012-03-22 00:05:41

标签: java exception exception-handling

对于涉及异常处理的家庭作业练习,我需要生成一个OutOfMemoryError异常,这样我就可以编写一个try-catch并捕获它:

  

“13.10(OutOfMemoryError)编写一个导致JVM抛出的程序   OutOfMemoryError并捕获并处理此错误。“

我搜索了Java API,但在异常列表中的OutOfMemoryError异常中找不到任何内容。什么是OutOfMemoryError异常,如何为我的作业生成一个?

7 个答案:

答案 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)

OutOfMemoryException不包含新对象的可用空间时,会出现

heap。 此外,您应该在某处保留对象的引用,否则garbage colector会关注它们。

二进制崩溃(每次迭代需要的字节数加倍:)

String x = "1";
while (true){
    x = (x + x);
}

**阅读所有参考文献以便更好地理解