Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是OutOfMemoryError异常,如何生成它?_Java_Exception_Exception Handling - Fatal编程技术网

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

Java 什么是OutOfMemoryError异常,如何生成它?,java,exception,exception-handling,Java,Exception,Exception Handling,对于涉及异常处理的家庭作业练习,我需要生成OutOfMemoryError异常,以便编写一个try-catch并捕获它: “13.10(OutOfMemoryError)编写一个程序,使JVM抛出 OutOfMemoryError并捕获和处理此错误。“ 我搜索了Java API,在异常列表中找不到关于OutOfMemoryError异常的任何内容。什么是OutOfMemoryError异常?如何为我的作业生成一个异常?我能想到的最简单的方法是: for (String x = "x";; x +

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

“13.10(OutOfMemoryError)编写一个程序,使JVM抛出 OutOfMemoryError并捕获和处理此错误。“


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

我能想到的最简单的方法是:

for (String x = "x";; x += x);
您可能需要有点创造性,以便更快地使其崩溃。

当VM耗尽内存以分配新对象时,会抛出一个。因此,当您创建太多对象时,可能会导致出现此异常


为此,开始在无限循环中创建垃圾收集器不会收集的对象(例如,将它们相互链接)——VM最终将耗尽下一个要分配的对象的可用内存,引发异常。当你抓住它的时候,要小心,因为你将做不了太多——VM没有(太多)内存用于任何操作。

就像我处理所有与java相关的问题一样,我做的第一件事是谷歌:

java 6 <class-name>
第一个结果是我得到了这个信息丰富的链接:


当JVM无法分配足够的内存来完成请求的操作时,将抛出OutOfMemoryError

要生成这些对象,只需在循环中分配一堆内存或类似的内容,但请记住将已分配的对象保留在ArrayList或其他内容中,否则垃圾收集器可能会重用空间并释放一些内存

差不多

ArrayList<Object> list = new ArrayList<Object>();

try {
    while ( true )
        list.add( new Object() );
} catch ( OutOfMemoryError e ) {
    // And we are done...
}
ArrayList list=new ArrayList();
试一试{
while(true)
添加(新对象());
}捕获(OutOfMemory错误){
//我们完成了。。。
}
您可能希望用占用大量空间的类替换对象,否则这可能需要一些时间

参考:

比创建数百万个对象要简单得多(而且保证工作正常):

public static void throwOomE() {
    throw new well, you can just search for the rest of the answer
}
当您的文件夹中没有新对象的可用空间时显示。 此外,还应该将对象的引用持久化到某个位置,否则会考虑它们

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


**阅读所有参考资料以便更好地理解

我最喜欢的方法是

byte[] crasher = new byte[Integer.MAX_VALUE];

当您搜索OOME时,您发现了什么?提示:异常/错误的名称是什么?如何查找有关OutOfMemoryError的Java API信息:转到,按Ctrl+F,键入OutOfMemoryError,然后按enter。这是英国还是公制垃圾加载?请澄清。这个问题似乎离题了,因为文档已经回答了它。我只是想建议,+1请告诉我yahoo对您来说……在您编写“for(;){x=x+1}”之前,以这种方式编写for循环意味着什么?还有,谢谢!“@Zolani:
for(;;)
是一个无限循环。
String x = "1";
while (true){
    x = (x + x);
}
byte[] crasher = new byte[Integer.MAX_VALUE];