我正在研究活动识别,但out of memory error
在处理一个视频后得到了一个。
最大可能的数组从 444mb 变为 84mb,这意味着它不能处理多个视频。使用clear all;
andclose all;
我们可以只清除matlab内存,但是我们如何在不关闭matlab的情况下清除虚拟内存(ram)空间呢?
任何帮助将非常感激。
如果您必须同时执行所有这些操作,则可能内存不足。但是我假设你想按顺序处理它们。如本问题所述,您可能不得不关闭 matlab 并重新启动它。
这听起来可能很糟糕,但是通过一些工作,您可以减轻痛苦。
您可以采取以下步骤:
最后一部分可能不好找,但假设你要调用的函数是magic(5)
,那么它会是这样的:
!matlab -r "magic(5)" &
exit
Java Heap Cleaner似乎运行良好。但是,如果您在收到“Java 堆空间”类型的错误后尝试调用它,它可能会或可能不会有帮助,我还没有完全弄清楚是否存在模式。
编辑:也试试
pack
命令。这迫使 Matlab 在自己的内存上运行垃圾收集器,而 Java Heap Cleaner 做同样的事情,但在 Java 内存上。
编辑 2:我发现您不需要下载 Java Heap Cleaner 即可运行 JVM 垃圾收集器。你也可以去:
java.lang.Runtime.getRuntime.gc;
这对我来说似乎工作得很好。
如果运行时间对您来说不是问题,您可以尝试使用matfile
它来访问/加载/保存您的数据到您的硬盘驱动器而不是 RAM,但正如您所期望的那样,该过程可能会很慢。
我在解决问题时尝试的另一个选择是将我的数据转换为single
精度,这应该会将内存消耗减少一半。对于视频和图像,我相信大部分工作都可以使用single
而不是double
精确。当然,如果可以的话,进一步使用它们uint8
会减少 8 的消耗。
与您最初的问题有关,我认为除了每次重新启动 matlab 之外实际上没有解决方案。