Java 就地复制位图是否会泄漏内存?
我很好奇下面的代码是否会泄漏Java 就地复制位图是否会泄漏内存?,java,android,memory-management,bitmap,Java,Android,Memory Management,Bitmap,我很好奇下面的代码是否会泄漏 data = getBitmapdataFromCameraCallback();//this is immutable, so... //make a mutable copy... originalUserPhoto = BitmapFactory.decodeByteArray(data, 0, data.length).copy(Config.ARGB_8888, true); Matrix matrix = new Mat
data = getBitmapdataFromCameraCallback();//this is immutable, so...
//make a mutable copy...
originalUserPhoto = BitmapFactory.decodeByteArray(data, 0, data.length).copy(Config.ARGB_8888, true);
Matrix matrix = new Matrix();
// -1 doesn't reverse it for some oddball reason, so, we get REALLY close to -1
matrix.preScale(-0.999f, 1.0f);//don't ask don't tell
originalUserPhoto = Bitmap.createBitmap(originalUserPhoto, 0, 0,
originalUserPhoto.getWidth(), originalUserPhoto.getHeight(),
matrix, true);
如果我在原地修改originalUserPhoto(请注意,我将其作为createBitmap的源传入),是否会泄漏原始数据?或者JVM是否足够聪明,可以释放那里的数据?是和否。您有两个位图对象(第一个由decodeByteArray创建,第二个由createBitmap创建),第一个没有任何引用,因此在未来的垃圾收集周期中,它可能会被删除 也就是说,当位图被回收时,位图的本机备份存储也将被删除,我建议在使用完第一个位图后手动删除它-将其保存在单独的引用中,并对其调用
recycle()
。位图可能非常昂贵
静态成员,这意味着它将永远存在。好吧,我想我的困惑是因为我看到了一个非常严重的内存不足异常,在我的应用程序的几次运行过程中,它会断断续续地发生,尽管我没有任何静态引用(据我所知),所以,显然内存没有被正确地分配,但我很难确定在哪里。。。因此,我的问题是关于这个特殊的策略,在这个问题中。图像存储在我保存在应用程序中的位图中,我担心这会把事情搞砸,但我不知道为什么会这样。