android Bitmap没有recycle()导致native内存暴增

android Bitmap没有recycle()导致native内存暴增

android8.0后,Bitmap从Java层转移到native层,此举虽然缓解了JVM的内存压力,也提升了图形的加载速度,但不恰当的Bitmap分配/释放逻辑,将导致内存问题深藏到native层,更加隐蔽不易排查定位。

Bitmap载入“内存”后,将由两部分分区。第一部分是Bitmap描述信息,第二部分(最大部分)是Bitmap像素(字节数组)。第一部分存在Java内存,第二部分存在C/C++维持的native内存。Bitmap的recycle()函数释放C/C++那部分native内存。如果没有recycle(),GC可能只回收到java部分内存,C/C++的native内存仍被占用。解决方案:上层java代码使用Bitmap后,需要主动手工的回收Bitmap,回收代码:

 if (mBitmap != null) {
      mBitmap.recycle();
      mBitmap = null;
 }

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/129307024