【发布时间】:2013-06-23 15:07:24
【问题描述】:
更新:检查接受的解决方案。问题与类属性无关。
我在 Matlab 中有以下问题,在谷歌或这里找不到任何东西。我有一个这样的句柄类:
classdef myClass < handle
properties
hugeCellArray
otherVariables
end
...
end
我将其实例化为myObj = myClass(data);
现在,如果我尝试:clear myObj.hugeCellArray
它根本没有清除财产。如果我尝试myObj.hugecellArray = []; 它确实将属性设置为 [] 但内存仍然被分配!
因此,除非我清除整个班级,否则似乎我无法摆脱班级中的巨大变量?
提前致谢!
编辑:(澄清)我的问题是内存。我不想真正删除类属性,我想释放它的内存。
【问题讨论】:
-
“内存仍在分配”是什么意思?
-
Matlab 仍在使用 ~10GB。这意味着它没有释放内存(?)。这意味着如果我调用另一个需要内存的函数,我将耗尽内存并开始写入交换。
-
你确定你没有闭包或者其他地方仍然有对该属性的引用吗?将它设置为一个空数组应该会回收它的内存。另一个解释是你的内存变得太碎片化了
-
如果是这样,恐怕一旦内存变得太碎片化,除了重启 MATLAB 之外,你无能为力。例如:stackoverflow.com/q/3300161/97160,stackoverflow.com/q/16201005/97160
-
我认为是的。相反,分配大块应该可以缓解这个问题。请记住,MATLAB 需要用于数值数据的连续内存。
标签: matlab class oop memory-management