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

android有垃圾收集功能吗?它有多快?,android,memory-management,garbage-collection,Android,Memory Management,Garbage Collection,Android是否有垃圾收集功能?它是否有效,或者在不需要时是否应该将对象设置为null 例如,我有一个ImageViewiv。我设置了一个图像位图 iv.setImageBitmap(一些函数返回新创建的位图()) 一段时间后,我运行相同的函数 iv.setImageBitmap(一些函数返回新创建的位图()) 第一个函数返回新创建的位图()的某个函数创建的位图会发生什么情况?垃圾回收会移除它吗?这样做有区别吗 Bitmap temp =some_function_that_returns_a

Android是否有垃圾收集功能?它是否有效,或者在不需要时是否应该将对象设置为
null

例如,我有一个
ImageView
iv
。我设置了一个图像位图

iv.setImageBitmap(一些函数返回新创建的位图())

一段时间后,我运行相同的函数

iv.setImageBitmap(一些函数返回新创建的位图())

第一个函数
返回新创建的位图()的某个函数创建的位图会发生什么情况?垃圾回收会移除它吗?这样做有区别吗

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();
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();

是的,Android的虚拟机进行垃圾收集。在非常非常少的地方,取消对对象的引用是节省空间的有效方法。。。但你击中了其中一个

位图很大,很明显,将不再需要的位图引用设为空会很有帮助

在第二个示例中显示的代码中,您的直觉是正确的,对旧位图的引用将阻止其被回收,直到对新位图的引用被分配到
temp
。这意味着在某个时刻,两者都在内存中

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

编辑以添加: 顺便说一句,Java的标准做法是不计分的-P