这就是我使用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() 方法,但没有成功
您正在创建一个不会自动释放的附加
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();
}