如何获取当前应用的 GC 状态

2015-11-08 13:02:07 +08:00
 fashioncj
我写了个爬虫类应用,在爬取几十万条数据后数据库写入的地方就会内存不足了。
具体表现就是 GC 没有足够的空间 free 了

----
11-07 19:06:00.124 4513-4513/? D/dalvikvm: GC_FOR_ALLOC freed 3686K, 4% free 253818K/262096K, paused 331ms, total 331ms
11-07 19:06:00.124 4513-4513/? I/dalvikvm-heap: Forcing collection of SoftReferences for 65548-byte allocation
11-07 19:06:00.492 4513-4513/? D/dalvikvm: GC_BEFORE_OOM freed 12K, 4% free 253805K/262096K, paused 368ms, total 369ms
11-07 19:06:00.492 4513-4513/? E/dalvikvm-heap: Out of memory on a 65548-byte allocation.
11-07 19:06:00.492 4513-4513/? I/dalvikvm: "main" prio=5 tid=1 RUNNABLE
11-07 19:06:00.492 4513-4513/? I/dalvikvm: | group="main" sCount=0 dsCount=0 obj=0xa6168938 self=0xb938b8e8
11-07 19:06:00.492 4513-4513/? I/dalvikvm: | sysTid=4513 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=-1217142624
11-07 19:06:00.492 4513-4513/? I/dalvikvm: | state=R schedstat=( 21780042297254 539894211055 24789799 ) utm=1791565 stm=386574 core=0
----
所以我想动态的获取 GC 状态,让他快满的时候程序先停止一下。。不知道是否可行。
11875 次点击
所在节点    Android
6 条回复
gamexg
2015-11-08 13:08:35 +08:00
感觉需要检查内存泄漏问题。
实在不行多进程,然后定时重新启动 work 进程。
Radiums
2015-11-08 15:58:40 +08:00
这个没办法的,最好还是及时清理资源。
zzzmode
2015-11-08 20:50:19 +08:00
手机上跑爬虫还存到 sqlite 里面么。。
fashioncj
2015-11-09 00:03:53 +08:00
@zzzmode android 写的比较顺手。。
fashioncj
2015-11-09 00:04:13 +08:00
@Radiums 一般用什么来判定是否需要清理了
Radiums
2015-11-10 14:16:24 +08:00
自己决定对象的生命周期啊。一般 Activity 关闭的时候就可以清理掉,或者链接数据接收完了也要 close

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234557

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX