什么是OutOfMemoryError以及如何调试和修复它

什么是OutOfMemoryError以及如何调试和修复它

我的Java程序抛出了一个OutOfMemoryError..如何调试和修复此问题?


许多Java新手都在努力应对OutOfMemoryError..这是一种尝试创建一个规范问题的尝试,该问题将回答关于OutOfMemoryError..我正在创建这个新问题,而不是修改之前关于OutOfMemoryError因为这些问题及其答案与特别一个人遇到的问题。


慕运维8079593
浏览 1105回答 3
3回答

MMTTMM

阿OutOfMemoryError是Java虚拟机(JVM)引发的异常,因为它需要为(新的)对象分配内存,但对象可用内存不足。JVM将首先尝试释放死对象使用的内存。运行垃圾收集器.作为OutOfMemoryError是VirtualMachineError,jvm允许扔过去任何时间,尽管它必须尝试首先通过垃圾收集释放内存.但是,在实践中,它可能会从new语句,该语句试图创建无法为其分配内存的对象。因此,您应该首先检查与异常相关的堆栈跟踪,以获得有关问题原因的线索,就像你对任何其他例外一样.如果试图分配数组时引发异常(如int[] values = new int[n]),原因可能是您试图创建一个过大的数组(n太大了)。在计算所需数组的大小时是否犯了错误?如果试图在由其他人编写的容器类的方法中分配数组,则会引发异常,原因可能是您的代码要求容器存储过多的东西。方法,例如ArrayList.reserve(int)和HashMap(int)必须为将来的使用分配存储空间。你在计算你需要的集装箱的尺寸时是否犯了错误?如果从循环内部抛出异常,原因可能是代码已循环了太多次。您的循环终止条件正确吗?如果是for循环,你是让它循环正确的次数吗?如果堆栈跟踪没有提供足够的线索,则可以尝试使用堆分析器。这是一个监视程序,使您能够在程序运行时检查用于对象的内存,或检查堆转储程序退出时编写的。它可以提供存储在内存中的对象的大小、数量和类的信息。JVM有一个有限内存提供给它。您可能会得出这样的结论:您的程序运行正常,但运行所需的内存比提供给它的内存要多。如果没有显式地告诉JVM要使用多少内存,大多数实现将选择合理违约根据您的计算机所拥有的RAM数量计算的数量,但是对于您的程序来说,这个数量可能太小了。JVM的命令行选项可以控制可用内存的数量。对于大多数JVM实现来说,最重要的选项是-Xmx和-Xms.

九州编程

当Tomcat耗尽内存时,即Tomcat配置的内存比运行应用程序所需的内存少时,就会出现这个问题。因此,要克服这个问题,请转到Tomcatbin目录和创建一个新文件setenv.bat并在该文件中定义PermSize,如下所示:设置Java_opts=-Dfile.coding=UTF-8-Xms512m-Xmx1024m-XX:PermSize=512m-XX:MaxPermSize=1024m可根据应用要求将PermSize设置为更高的范围。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java