的OutOfMemoryError(OutOfMemoryError)

2019-10-19 01:07发布

我有一个包含5个按钮的每个链接到一个程序/包一个主类。 每个包运行,从一个摄像头捕捉的图像,它也从文件加载约15图像JMF程序。

所述第一程序加载(不管我按下哪个按钮)始终正确运行。 但是当我第一个程序结束后运行程序,java.lang.OutOfMemoryError:发生Java堆空间

林不知道如果用Java代码不能处理我们所有的图像,或者如果它有事情做与JMF图像捕捉。

Answer 1:

也许你应该对你的JVM提供更多的内存(-Xmx512m在命令行上可能是一个良好的开端)

那么,如果解决了这个问题,调查为什么你的程序会消耗这么多的内存。

喜欢使用的太阳诊断工具jvisualvm可能是有益的。



Answer 2:

增加Java最大内存并重新运行。 如果仍然看到OOM的,你可能有泄漏。 为了增加最大存储器,附加-Xmx<new heap size>m到命令行。

例:

java -Xmx1024m Foo


Answer 3:

你有多少内存给你的JVM? 你可以给它更多的使用下列内容: -Xmx1024m (1GB的,根据需要调整)

这里假设你没有在你的程序的一些内存泄漏。 我不知道什么JMF,这是内存不足的错误只是一般建议。



Answer 4:

JVM中有提供给他们有限的量的最大内存运行。 这是一个有点违反直觉和旅行了很多人了(我想不出许多类似的环境)。

您可以增加最大内存JVM需要通过指定

java -Xmx128m ...

或类似。 如果你事先知道你要消耗的内存量,使用

java -Xms128m ...

以指定JVM会在启动时分配内存。 注意-Xms VS -Xmx



Answer 5:

尝试检查,如果你仍然有一些参考周围防止第一包/程序进行垃圾回收。

当发射器检测到的第一个程序已经结束,设置第一个程序,所有引用,也许对象检索从为NULL,让JVM再次回收内存并准备好了第二次发射。



Answer 6:

Java的默认使用64兆字节的堆空间。 到其他的建议(增加堆空间到512M或1024M)的替代方案是,开始用于控制器不同JVM和5级的应用程序。 然后,如果你的应用程序JMF崩溃之一(由于内存不足),控制器和其他应用程序仍在运行。

(如果该应用程序和控制器是完全解耦的这只会工作 - 否则,只增加堆大小,并尽快处理所有媒体,你不需要它了从内存泄漏,防止)



文章来源: OutOfMemoryError
标签: java webcam jmf