首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android中的垃圾收集器

Android中的垃圾收集器
EN

Stack Overflow用户
提问于 2010-06-25 18:57:57
回答 4查看 119.4K关注 0票数 110

我看过很多Android回答,建议在某些情况下调用垃圾收集器。

在执行耗用内存的操作之前,在Android中请求垃圾收集器是一种好的做法吗?如果不是,我应该只在收到OutOfMemory错误时才调用它吗?

在求助于垃圾收集器之前,有没有其他我应该使用的东西?

EN

回答 4

Stack Overflow用户

发布于 2016-02-18 20:52:17

似乎System.gc()不能在Art Android6.0.1Nexus5x上工作,所以我用Runtime.getRuntime().gc();代替。

票数 11
EN

Stack Overflow用户

发布于 2014-07-18 20:06:02

一般来说,您不应该使用System.gc()显式调用GC。甚至还有IO讲座(http://www.youtube.com/watch?v=_CruQY55HOk),在那里他们解释了GC暂停日志的含义,并且还声明永远不要调用System.gc(),因为Dalvik比您更清楚何时调用。

另一方面,正如在上面的回答中提到的,Android中的GC过程(就像其他任何东西一样)有时会有buggy。这意味着Dalvik GC算法无法与Hotspot或JRockit JVM相提并论,在某些情况下可能会出错。其中一种情况是分配位图对象。这是一个棘手的问题,因为它使用堆和非堆内存,而且在内存受限的设备上,一个松散的位图对象实例就足以给出一个OutOfMemory异常。因此,在不再需要这个位图之后调用它通常是许多开发人员的建议,甚至被一些人认为是很好的做法。

一种更好的做法是在位图上使用.recycle(),因为它就是这个方法的用途,因为它将位图的本机内存标记为可以安全删除。请记住,这非常依赖于版本,这意味着在较早的Android版本(我认为是3.0之前)上通常会需要它,但在以后的版本中不会需要。此外,在较新的版本上使用它也不会有太大影响(只是不要在循环或类似的东西中这样做)。新的艺术运行时在这里改变了很多,因为他们为大对象引入了一个特殊的堆“分区”,但我认为用艺术以太做这件事不会有太大伤害。

关于System.gc()还有一个非常重要的注意事项。此方法不是Dalvik (或JVM)必须响应的命令。考虑一下,这更像是对虚拟机说:“如果不麻烦的话,你可以做垃圾收集吗?”

票数 7
EN

Stack Overflow用户

发布于 2014-07-27 18:26:15

我的应用程序管理了很多图片,但它死于OutOfMemoryError。这对我很有帮助。在Manifest.xml中添加

<application
....
   android:largeHeap="true"> 
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3117429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档