2

我正在研究活动识别,但out of memory error在处理一个视频后得到了一个。

最大可能的数组从 444mb 变为 84mb,这意味着它不能处理多个视频。使用clear all;andclose all;我们可以只清除matlab内存,但是我们如何在不关闭matlab的情况下清除虚拟内存(ram)空间呢?

任何帮助将非常感激。

4

3 回答 3

1

如果您必须同时执行所有这些操作,则可能内存不足。但是我假设你想按顺序处理它们。如本问题所述,您可能不得不关闭 matlab 并重新启动它。

这听起来可能很糟糕,但是通过一些工作,您可以减轻痛苦。

您可以采取以下步骤:

  1. 确保您的进度以方便的方式写入磁盘,例如一个 .mat 文件,其中包含仍需要处理的数字列表。
  2. 编写一个包装函数。这个函数应该只是:
    • 打开列表
    • 确保列表中的下一项得到处理
    • 如果列表中还有其他内容,请打开一个调用此函数的新 matlab 会话,并关闭现有会话

最后一部分可能不好找,但假设你要调用的函数是magic(5),那么它会是这样的:

!matlab -r "magic(5)" &
exit
于 2013-09-16T11:51:52.090 回答
0

Java Heap Cleaner似乎运行良好。但是,如果您在收到“Java 堆空间”类型的错误后尝试调用它,它可能会或可能不会有帮助,我还没有完全弄清楚是否存在模式。

编辑:也试试

pack

命令。这迫使 Matlab 在自己的内存上运行垃圾收集器,而 Java Heap Cleaner 做同样的事情,但在 Java 内存上。

编辑 2:我发现您不需要下载 Java Heap Cleaner 即可运行 JVM 垃圾收集器。你也可以去:

java.lang.Runtime.getRuntime.gc;

这对我来说似乎工作得很好。

于 2013-09-04T16:33:05.227 回答
0

如果运行时间对您来说不是问题,您可以尝试使用matfile它来访问/加载/保存您的数据到您的硬盘驱动器而不是 RAM,但正如您所期望的那样,该过程可能会很慢。

我在解决问题时尝试的另一个选择是将我的数据转换为single精度,这应该会将内存消耗减少一半。对于视频和图像,我相信大部分工作都可以使用single而不是double精确。当然,如果可以的话,进一步使用它们uint8会减少 8 的消耗。

与您最初的问题有关,我认为除了每次重新启动 matlab 之外实际上没有解决方案。

于 2018-02-05T08:07:32.487 回答