前一篇的代碼在執行時,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);
修改之后,內存仍然會持續上漲,但速度很慢。可能還有其他的問題,后續繼續處理。