gpt4 book ai didi

java - 就地复制位图会泄漏内存吗?

转载 作者:太空狗 更新时间:2023-10-29 12:53:49 24 4
gpt4 key购买 nike

我很好奇下面的代码会不会泄露...

    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 对象(第一个由 decodeByteArray 创建,第二个由 createBitmap 创建),而第一个没有引用它,因此在未来的垃圾收集周期中,它可能会被删除。

虽然位图的 native 后备存储也会在回收位图时被删除,但我建议您在使用完第一个位图后手动删除它 - 将其保存在单独的引用中并调用 recycle() 就可以了。位图可能非常昂贵。

顺便说一句,如果您的 createBitmap 只是为了缩放,我会考虑在您通过传入选项对其进行解码时缩小原始位图。您将无法精确地缩放到您想要的大小,但至少您最终不会得到一个您将缩小到其大小的十分之一的笨重的巨大位图。这样会更快并且避免内存峰值。

关于java - 就地复制位图会泄漏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9039798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com