Sly*_*Sly 24 android garbage-collection memory-leaks weak-references bitmap
在Android上使用AFAIK时,建议将Bitmap对象引用为WeakReferences以避免内存泄漏.当不再保留位图对象的硬引用时,垃圾收集器将自动收集它.
现在,如果我理解正确,必须始终调用Bitmap.recycle()方法来释放Bitmap.我认为这是因为Bitmap对象具有特殊的内存管理.
那是对的吗?
如果这是真的,当使用WeakReferences时,必须存在内存泄漏,因为在释放WeakReferences时永远不会调用Bitmap.recycle().或者,不知何故,WeakReferences是否足以避免内存泄漏?
谢谢
Vic*_*tor 50
不需要调用Bitamp.recycle ,因为垃圾收集器最终会自己清理位图(只要没有引用).Android中的位图是在本机内存中创建的,而不是在VM堆上创建的,因此VM堆上的实际Bitmap对象非常小,因为它不包含任何实际的位图数据.(编辑:不再是Android 3.0+的情况)为了GC的目的,位图的实际大小仍将计入您的堆使用量,并确保您的应用程序不会使用太多内存.
但是,当涉及到Bitmaps时,GC似乎有点喜怒无常.如果你只删除所有硬引用,有时候(在我的情况下)会挂在Bitmaps上一段时间,可能是因为Bitmap对象被分配/计数的奇怪方式.Bitmap.recycle似乎有助于让GC更快地收集该对象.
无论哪种方式,如果您不调用Bitmap.recycle,只要您不会意外地保留硬引用,就不会泄漏内存.如果您尝试一次分配太多位图或太大位图而不调用.recycle,则可能会遇到OutOfMemoryErrors.
编辑:重要的是要注意,从Android 3.0开始,不再在本机内存中分配位图.它们像任何其他Java对象一样在VM堆上分配.但是,我所说的不需要调用回收仍然适用.
归档时间: |
|
查看次数: |
19311 次 |
最近记录: |