Java 什么是OutOfMemoryError异常,如何生成它?
对于涉及异常处理的家庭作业练习,我需要生成OutOfMemoryError异常,以便编写一个try-catch并捕获它: “13.10(OutOfMemoryError)编写一个程序,使JVM抛出 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 +
我搜索了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];