为对象设置null值是否足以使垃圾回收收集并清除Java(Android)中的内存?

===============>>#1 票数:4

如果对对象的所有引用都设置为null,则最终将由垃圾收集器清除该对象。 是否足够取决于对象拥有的其他资源(例如可能泄漏的文件句柄或db句柄),以及垃圾收集器是否足够频繁地运行以在需要内存之前释放它。 诸如位图之类的大对象经常具有一个可以调用的功能,以尽早释放内存以避免该问题(位图的recycle()是示例)。

===============>>#2 票数:2

是。 这就是在Java中释放对象的方式。 一旦释放它们,它们就有资格进行垃圾收集,并在以后的某个时间收集。

===============>>#3 票数:0

垃圾收集器进行标记和清除。

使用标记扫描时,未引用的对象不会立即被回收。 取而代之的是,允许垃圾累积直到所有可用内存都用完为止。 发生这种情况时,将暂时停止程序的执行,而标记清除算法将收集所有垃圾。 一旦回收了所有未引用的对象,就可以恢复程序的正常执行。

http://www.brpreiss.com/books/opus5/html/page424.html 该链接包含有关标记和清除工作方式的详细信息。

http://chaoticjava.com/posts/how-does-garbage-collection-work/

Android Garbage Collector的技术细节

如果将变量设置为null。 该变量将可用于垃圾回收。 但是,它取决于虚拟机(dalvik)决定何时进行垃圾收集。 它还取决于堆大小。 堆大小越大,垃圾收集越频繁。 http://www.youtube.com/watch?v=_CruQY55HOk 视频中的那个人对使用大堆发出了很大的警告,因为这会导致那里更频繁的垃圾回收,从而导致您的应用程序暂停。

如果当前正在运行的操作需要更多内存并且该内存不可用,则垃圾收集器将启动以释放内存。(即使在此之后所需的内存空间不可用,您仍会发生内存泄漏)。

http://developer.android.com/training/articles/perf-tips.html

来自以上链接的报价。 当您在应用程序中分配更多对象时,您将强制进行定期垃圾回收,从而在用户体验中几乎没有“打“”。

  ask by StealthOne translate from so

未解决问题?本站智能推荐:

关注微信公众号