内存泄漏和性能是否足够?

时间:2013-04-16 23:43:47

标签: java android performance memory-leaks

是否将一个null值设置为足以让垃圾收集在Java(Android)中收集和清理内存的对象?

3 个答案:

答案 0 :(得分:4)

如果对对象的所有引用都设置为null,那么它最终将被垃圾收集器清理。这是否足够取决于对象所拥有的其他资源(如文件句柄或可以泄漏的db句柄)以及垃圾收集器是否经常运行以在需要内存之前释放它。像位图这样的大对象经常有一个函数,可以调用它来尽早释放内存以避免这个问题(位图的recycle()就是一个例子)。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

垃圾收集器会进行标记和扫描。

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

http://www.brpreiss.com/books/opus5/html/page424.html。该链接包含有关标记和扫描如何工作的详细信息。

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

Technical details of Android Garbage Collector

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

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

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

以上链接的引用。当您在应用程序中分配更多对象时,您将强制定期进行垃圾收集,从而在用户体验中产生很少的“打嗝”。