我有一个包含5个按钮的每个链接到一个程序/包一个主类。 每个包运行,从一个摄像头捕捉的图像,它也从文件加载约15图像JMF程序。
所述第一程序加载(不管我按下哪个按钮)始终正确运行。 但是当我第一个程序结束后运行程序,java.lang.OutOfMemoryError:发生Java堆空间 。
林不知道如果用Java代码不能处理我们所有的图像,或者如果它有事情做与JMF图像捕捉。
我有一个包含5个按钮的每个链接到一个程序/包一个主类。 每个包运行,从一个摄像头捕捉的图像,它也从文件加载约15图像JMF程序。
所述第一程序加载(不管我按下哪个按钮)始终正确运行。 但是当我第一个程序结束后运行程序,java.lang.OutOfMemoryError:发生Java堆空间 。
林不知道如果用Java代码不能处理我们所有的图像,或者如果它有事情做与JMF图像捕捉。
也许你应该对你的JVM提供更多的内存(-Xmx512m在命令行上可能是一个良好的开端)
那么,如果解决了这个问题,调查为什么你的程序会消耗这么多的内存。
喜欢使用的太阳诊断工具jvisualvm可能是有益的。
增加Java最大内存并重新运行。 如果仍然看到OOM的,你可能有泄漏。 为了增加最大存储器,附加-Xmx<new heap size>m
到命令行。
例:
java -Xmx1024m Foo
你有多少内存给你的JVM? 你可以给它更多的使用下列内容: -Xmx1024m
(1GB的,根据需要调整)
这里假设你没有在你的程序的一些内存泄漏。 我不知道什么JMF,这是内存不足的错误只是一般建议。
JVM中有提供给他们有限的量的最大内存运行。 这是一个有点违反直觉和旅行了很多人了(我想不出许多类似的环境)。
您可以增加最大内存JVM需要通过指定
java -Xmx128m ...
或类似。 如果你事先知道你要消耗的内存量,使用
java -Xms128m ...
以指定JVM会在启动时分配内存。 注意-Xms
VS -Xmx
!
尝试检查,如果你仍然有一些参考周围防止第一包/程序进行垃圾回收。
当发射器检测到的第一个程序已经结束,设置第一个程序,所有引用,也许对象检索从为NULL,让JVM再次回收内存并准备好了第二次发射。
Java的默认使用64兆字节的堆空间。 到其他的建议(增加堆空间到512M或1024M)的替代方案是,开始用于控制器不同JVM和5级的应用程序。 然后,如果你的应用程序JMF崩溃之一(由于内存不足),控制器和其他应用程序仍在运行。
(如果该应用程序和控制器是完全解耦的这只会工作 - 否则,只增加堆大小,并尽快处理所有媒体,你不需要它了从内存泄漏,防止)