的OutOfMemoryError

时间:2010-01-07 16:01:30

标签: java webcam jmf

我有一个主类包含5个按钮,每个按钮链接到一个程序/包。每个包运行一个jmf程序,从网络摄像头捕获图像,它还从文件加载约15个图像。

要加载的第一个程序(无论我按哪个按钮)始终正确运行。但是当我在第一个程序结束后运行程序时,会出现 java.lang.OutOfMemoryError:java heap space

我不确定java是否无法处理我们的所有图像,或者它是否与jmf图像捕获有关。

6 个答案:

答案 0 :(得分:3)

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

然后,如果它解决了问题,请调查你的程序消耗这么多内存的原因。

使用jvisualvm等阳光诊断工具可能会有所帮助。

答案 1 :(得分:2)

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

示例:

java -Xmx1024m Foo

答案 2 :(得分:1)

您为JVM提供了多少内存?您可以使用以下内容进行更多操作:-Xmx1024m(1GB,根据需要进行调整)

这假设您的程序中没有内存泄漏。我对JMF一无所知,这只是Out of Memory错误的一般建议。

答案 3 :(得分:0)

JVM以可用的有限数量的最大内存运行。这有点违反直觉,让很多人吵闹(我想不出很多类似的环境)。

您可以通过指定

来增加JVM所需的最大内存
java -Xmx128m ...

或类似的。如果您事先知道要消耗这么多内存,请使用

java -Xms128m ...

指定JVM在启动时分配的内存。请注意-Xms vs -Xmx

答案 4 :(得分:0)

尝试检查一下,如果你还有一些参考文件可以防止第一个软件包/程序被垃圾收集。

当启动程序检测到第一个程序已经结束时,将对第一个程序的所有引用和从它检索到的对象设置为NULL,以允许JVM再次回收内存并准备好第二次启动。

答案 5 :(得分:0)

默认情况下,Java使用64 MB的堆空间。替代其他建议(将堆空间增加到512M或1024M)是为控制器和5个应用程序启动单独的JVM。然后,如果您的某个JMF应用程序崩溃(由于内存不足),控制器和其他应用程序仍在运行。

(这只有在应用程序和控制器完全解耦时才有效 - 否则,只需增加堆大小并在不再需要时立即处理所有介质以防止内存泄漏)