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

zu0ti5jz  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(45)

下面是我如何使用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 business logic

    pointerScope.deallocate();
    
}

字符串
我发现Mat对象使用的堆外内存不会被回收,造成内存泄漏,程序运行一段时间后,就会出现OOM。
我尝试使用mat.release()方法,但它不起作用

hjzp0vay

hjzp0vay1#

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

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

字符串
您应该单独将其包含到try with资源中:

// 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 business logic

    pointerScope.deallocate();
    
}

相关问题