我的问题是关于我面临的内存泄漏(android 开发),但无法找到其根本原因。
我有两个类(class) - A 和 B。 类 A 有一个对象 B - objectB。 B类有一个Bitmap类型的实例变量mTempBitmap。 在 A 类中,我创建一个位图对象 aBitmapObject 并初始化 - objectB.mTempBitmap = aBitmapObject。 在B类中,我在API onDraw()中将mTempBitmap设置为null。
现在发生的是,每次按键时,objectB 的 mTempBitmap 都会更新,然后调用 objectB.onDraw。 但是,如果我们按键太快,有时 onDraw() 将不会被调用。
在这种情况下,我可以看到内存泄漏。如果我进行堆转储并使用内存分析器 MAT 工具进行分析,我会发现 50-60 个位图对象,这是意料之外的。
所以,我不清楚 Java 中内存泄漏的定义,尽管我读了几篇关于它的文章。
上述情况发生的内存泄漏是否是因为 onDraw() 没有被调用,并且 objectB.mTempBitmap 没有更新为 null ? (据我所知,即使objectB.mTempBitmap没有设为null,稍后mTempBitmap也会指向另一个位图,所以应该不存在内存泄漏的问题。) 是因为在某个地方创建了位图副本并且它们泄漏了?当我们初始化 objectB.mTempBitmap = aBitmap 时,是否创建了位图的任何副本,或者只是将另一个引用附加到同一位图? (据我所知,只是对同一位图的另一个引用,没有创建新的位图副本)
如果有人有想法,请帮忙!
最佳答案
将变量设置为 null 不会释放内存。当(非正式地)您无法访问内存时,内存会自动释放。如果您这样做:
someField = new Bitmap(...);
someField = new Bitmap(...);
那么即使您没有将任何内容设置为空,也可以释放第一个位图。如果您再次这样做:
someField = new Bitmap(...);
那么第二个位图也可以被释放。所以这不会导致内存泄漏。如果出现内存泄漏,则可能是其他原因造成的。
关于java - 内存泄漏 - 初始化另一个类的位图类型实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21984763/