如何处理org.bytedeco.opencv.opencv_core.Mat内存泄漏?

问题描述 投票:0回答:1

这就是我使用org.bytedeco.opencv.opencv_core.Mat的方式,核心代码:

// image binary
byte[] bytes;
try (PointerScope pointerScope = new PointerScope();
     Mat originImage = org.bytedeco.opencv.global.opencv_imgcodecs.imdecode(new Mat(bytes), opencv_imgcodecs.IMREAD_COLOR)) {

    // my bussiness logic

    pointerScope.deallocate();
    
}

我发现Mat对象使用的堆外内存不会被回收,导致内存泄漏。程序运行一段时间后,就会出现OOM。

我尝试使用 mat.release() 方法,但没有成功

java memory-leaks
1个回答
0
投票

您正在创建一个不会自动释放的附加

Mat
对象:

/*...*/ new Mat(bytes) /*...*/

您应该将其单独包含到资源尝试中:

// image binary
byte[] bytes;
try (PointerScope pointerScope = new PointerScope();
     Mat data = new Mat(bytes);
     Mat originImage = org.bytedeco.opencv.global.opencv_imgcodecs.imdecode(data, opencv_imgcodecs.IMREAD_COLOR)) {

    // my bussiness logic

    pointerScope.deallocate();
    
}
© www.soinside.com 2019 - 2024. All rights reserved.