关于内存不足的例外情况

时间:2012-03-22 03:53:03

标签: java exception

我使用Thread Pool进行新IO服务器设计。我使用 newFixedThreadPool 作为创建线程池的Executors工厂方法。当我执行服务器20到30分钟时,我的服务器正在抛出异常。如何处理这个异常。

java.lang.OutOfMemoryError: Java heap space

3 个答案:

答案 0 :(得分:1)

显然你使用的是太多内存,所以现在你需要找出原因。如果没有你的来源,很难说出错了什么,但即使有了源代码,当程序开始变得复杂时也会出现问题。

我发现有用的是获取内存转储并在Memory Analyzer (MAT)等工具中查看它们。它甚至可以比较多个转储以查看分配了哪种对象。当您了解哪些对象存在而您认为不应该存在时,您可以使用该工具查看它具有哪些根(哪些对象具有对它的引用)。

要从正在运行的java程序获取内存转储,请使用 jmap -dump:format = b,file = heap.bin 并在程序获取时自动获取内存转储,并且可以运行OutOfMemoryError它与 java -XX:+ HeapDumpOnOutOfMemoryError faileding.java.Program

答案 1 :(得分:0)

您可以无限制地尝试增加HEAP SIZE并检查是否出现问题。

但是,我希望您尝试分析您的应用程序,以找出您的堆大小和内存消耗位置的原因。 很少有Profilers可以作为开源使用。

答案 2 :(得分:0)

通常是java -Xms5m -Xmx15m MyApp -Xms设置初始Java堆大小 -Xmx设置最大Java堆大小

并在eclipse下运行java配置作为VM参数 -Xms128m

-Xmx512m

-XX:permSize = 128M

-XX:MaxPermSize参数= 384M