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

zu0ti5jz  于 2024-01-05  发布在  Java
关注(0)|答案(1)|浏览(145)

下面是我如何使用org.bytedeco.opencv.opencv_core.Mat的核心代码:

  1. // image binary
  2. byte[] bytes;
  3. try (PointerScope pointerScope = new PointerScope();
  4. Mat originImage = org.bytedeco.opencv.global.opencv_imgcodecs.imdecode(new Mat(bytes), opencv_imgcodecs.IMREAD_COLOR)) {
  5. // my business logic
  6. pointerScope.deallocate();
  7. }

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

hjzp0vay

hjzp0vay1#

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

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

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

  1. // image binary
  2. byte[] bytes;
  3. try (PointerScope pointerScope = new PointerScope();
  4. Mat data = new Mat(bytes);
  5. Mat originImage = org.bytedeco.opencv.global.opencv_imgcodecs.imdecode(data, opencv_imgcodecs.IMREAD_COLOR)) {
  6. // my business logic
  7. pointerScope.deallocate();
  8. }

展开查看全部

相关问题