前一篇的代码在执行时,java.exe占用内存会快速上涨:
在4G内存电脑上,单个连接,会持续上涨到2G多,然后减到1G多,如此循环。
经过一些删减定位,可以确定问题由public byte[] process(byte data[])函数导致。
进一步分析,至少IplImage的使用是一个问题:
IplImage originalImage = cvDecodeImage(opencv_core.cvMat(1, data.length, CV_8UC1, new BytePointer(data))); Mat videoMat = new Mat(originalImage);
这里,IplImage主要是作为从byte[]转换为Mat时的过渡,修改为:
Mat videoMat = imdecode(new Mat(opencv_core.cvMat(1, data.length, CV_8UC1, new BytePointer(data))), 1);
修改之后,内存仍然会持续上涨,但速度很慢。可能还有其他的问题,后续继续处理。