有没有办法“清理”您创建的对象和其他变量?或者他们是自动处理还是我错了这整个概念?这样做的正确方法是什么?我试图尽可能地避免使用GC。
答案 0 :(得分:12)
在没有内存管理的GC语言中进行清理的唯一方法是GC。您可以强制GC,但不推荐使用GC,GC非常好,将更主动的设置对象设置为null,以便GC清理。
另外:
还尝试尽可能使对象成为本地对象,这样就可以在对象范围内进行GC。
答案 1 :(得分:3)
调用System.gc()
将强制垃圾收集发生。
有一个系统会计算对您创建的对象的引用。如果你循环很多并创建大量的对象,你将创建他们堆积的时间段。当处理器没有做任何事情时,系统会收集垃圾,否则它会等到你需要更多的空闲内存才能收集。如果您已经处理了一段时间,由于在您的过程中发生垃圾收集,您将在性能上遇到打嗝。
请查看此页面并搜索“垃圾收集”
http://developer.android.com/guide/practices/design/performance.html
注意:使用应用程序上下文创建的任何内容都将一直存在,直到应用程序执行结束。使用活动上下文创建的任何内容都将一直存在,直到活动结束。这两种情况都可能导致内存泄漏!
答案 2 :(得分:3)
有关Android的更完整答案:
请务必查看application lifecycle for android。它可以帮助您避免Android中的活动泄漏。
答案 3 :(得分:2)
在大多数情况下,只要您不维护对象(变量)的引用,它们就会被清理掉。虽然需要关闭cursor
和bitmap
之类的东西才能删除它们以防止内存泄漏。
只要您的对象创建不在顶部,我认为您不必担心GC。注意:GC是java的一部分。你无法避免它。
附录1:如果你真的担心它,你可以重用变量。这样就可以将对象创建保持在最低限度,但这样做会丢失该变量,并且无法存储大量数据。
答案 4 :(得分:2)
Android的活动有onDestroy()方法。您可以使用此方法关闭打开的连接或对话框或关闭一些待处理的任务 您还可以阅读有关Java GC的信息,以便更正确地了解它。我会推荐SCJP书,垃圾收集章。它很好地解释了一个对象何时有资格进行垃圾收集。