android有垃圾收集吗?它有多快?

时间:2017-04-23 01:21:28

标签: android memory-management garbage-collection

Android有Garbage Collection吗?是否有效,或者在不需要时将对象设置为null

例如,我有ImageView iv。我用

设置了一个图像位图

iv.setImageBitmap(some_function_that_returns_a_bitmap_that_is_newly_created())

一段时间后我运行相同的功能

iv.setImageBitmap(some_function_that_returns_a_bitmap_that_is_newly_created())

第一个函数some_function_that_returns_a_bitmap_that_is_newly_created()创建的位图会发生什么?垃圾收集是否将其删除?这样做是否有所作为

Bitmap temp =some_function_that_returns_a_bitmap_that_is_newly_created();
iv.setImageBitmap(temp);
temp = null;
...
temp =some_function_that_returns_a_bitmap_that_is_newly_created();

代替?

这样做有什么不同

Bitmap temp =some_function_that_returns_a_bitmap_that_is_newly_created();
...
temp = null;
...
temp =some_function_that_returns_a_bitmap_that_is_newly_created();

而不是

Bitmap temp = some_function_that_returns_a_bitmap_that_is_newly_created();
...
temp = some_function_that_returns_a_bitmap_that_is_newly_created();

1 个答案:

答案 0 :(得分:1)

是的,Android的VM会进行垃圾回收。很少有地方可以将对象的引用置零是节省空间的有效方法......但是你已经击中了其中一​​个。

位图很大,非常明确地,它可以帮助将对不再需要的引用的引用置空。

在第二个示例中显示的代码中,您的直觉是正确的,对旧位图的引用将使其不被回收,直到将新位图的引用分配给temp为止。这意味着在某些时候,两者都在记忆中。

您的代码的第一个版本没有这个问题。

编辑添加:   顺便说一句,Java中的标准做法是camelCasing,而不是under_scoring ;-P