我很好奇以下代码是否会泄漏…
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足够聪明以释放那里的数据?
解决方法:
是的,没有.您有两个Bitmap对象(第一个是由cryptoByteArray创建的,第二个是由createBitmap创建的),而第一个没有任何引用它的对象,因此在将来的垃圾回收周期中,它很可能会被删除.
就是说,虽然在回收位图时也会删除位图的本机后备存储,但我建议您在使用完后手动删除第一个位图-将其保留在单独的引用中并在其上调用recycle() .位图可能非常昂贵.
顺便说一句,如果createBitmap的要点只是按比例缩放,那么我会考虑通过传递选项对原始位图进行解码时将其按比例缩小.您将无法缩放到所需的大小,但是至少您最终不会得到一个庞大的位图,并且只能缩小到其大小的十分之一.这样会更快,并避免内存高峰.
总结以上是内存溢出为你收集整理的java-复制位图到位会泄漏内存吗?全部内容,希望文章能够帮你解决java-复制位图到位会泄漏内存吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)