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