内存泄漏ram java程序与opencv及处理

Lui*_*los 1 java opencv

我在java中有这段代码,而ram中的内存几乎在几秒钟内爆炸。我发布了 IplImage“imagensMedia”。为什么??

编辑:该函数每秒运行多次

int largura=1280;
int altura=800;

IplImage[] imagens = new IplImage[5];
IplImage imagensSoma=cvCreateImage(cvSize(largura,altura), 32, 3);
int indiceImagem=0;

for(x=0; x<imagens.length;x++)
   imagens[x]=cvCreateImage(cvSize(largura,altura), 8, 3);

public void imageArrayBuilder() //Constroi Array de Imagens e a Sua Media
{
    int z;
    IplImage imagensMedia =cvCreateImage(cvSize(largura,altura), 8, 3);

    cam.read();
    opencv.copy(cam.get());

    if(imagemTotalFlag)
    {
        cvSub(imagensSoma,imagens[indiceImagem],imagensSoma, null);
        cvAcc(opencv.Buffer, imagensSoma, null);
        cvConvertScale(imagensSoma, imagensMedia, 1.0/imagens.length,0);
        cvCopy(opencv.Buffer,imagens[indiceImagem],null);
        indiceImagem++;
        if(indiceImagem==imagens.length)
            indiceImagem=0;
        opencv.copy(imagensMedia);    
    }
    else
    {
        if(indiceImagem<imagens.length)
        {
            cvCopy(opencv.Buffer,imagens[indiceImagem],null);
            indiceImagem++;
            if(indiceImagem==imagens.length)
            {
                imagemTotalFlag=true;
                for(z = 0; z < imagens.length; z++)
                    cvAcc(imagens[z], imagensSoma, null);
                cvConvertScale(imagensSoma, imagensMedia, 1.0/imagens.length,0);
                indiceImagem=0;
                opencv.copy(imagensMedia);
            }
        }
    }
    cvReleaseImage(imagensMedia);   
}
Run Code Online (Sandbox Code Playgroud)

请有人帮助我...

App*_*ish 5

我不认为“内存泄漏”的概念真正适用于java,因为它是一种垃圾收集语言(当没有其他对象引用它们时,引用会自动删除)。这些注释给出了有关内存使用位置的几种可能性;我建议研究垃圾收集的工作原理(初学者请参阅此链接)。如果所有其他方法都失败,调用System.gc()将运行垃圾收集器,或更具体地说:

调用 gc 方法表明 Java 虚拟机会努力回收未使用的对象,以使它们当前占用的内存可供快速重用。当控制权从方法调用返回时,Java 虚拟机已尽最大努力从所有丢弃的对象中回收空间。

除此之外,检查无限循环或无限递归。

希望这可以帮助。