0

JavaCv 中的内存泄漏问题很大。我已经搜索了很多并且我知道例如如果我在左侧分配一些 IplImages,我可以使用右侧的函数来释放存储空间。

  cvLoadImage(...)<-->cvReleaseImage(...)        
  cvCloneImage(...)<-->cvReleaseImage(...)        
  CvMat.create(...) <--> cvMatObject.release(...)    
  ...

但是如果我真的必须做这样的事情怎么办:

  for(int i=0;i<100000;i++){
        CvMatArray array=new CvMatArray(); //or new CvScalar() or something else                      
    //How to deallocate array here If I don't want to get memory leaks?
        }

我想释放其他对象(而不是 IplImage 的)使用的存储空间?

4

1 回答 1

0

问题解决了。我们必须使用 System.gc() 来调用垃圾收集器,它会在旧对象之后释放内存:

for(int i=0;i<100000000;i++){ CvMatArray array=new CvMatArray();
CvScalar 标量=新的 CvScalar();
System.gc(); }

即使在这种情况下:

for(int i=0;i<100000000;i++){ IplImage array=IplImage.create(zmieniane.cvSize(), 8, 1); 数组.release(); System.gc(); }

如果我们不想泄漏,我们必须“手动”使用 GC

于 2013-08-28T11:21:59.760 回答