我写了个爬虫类应用,在爬取几十万条数据后数据库写入的地方就会内存不足了。
具体表现就是 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
所以我想动态的获取 GC 状态,让他快满的时候程序先停止一下。。不知道是否可行。
1
gamexg 2015-11-08 13:08:35 +08:00
感觉需要检查内存泄漏问题。
实在不行多进程,然后定时重新启动 work 进程。 |
2
Radiums 2015-11-08 15:58:40 +08:00
这个没办法的,最好还是及时清理资源。
|
3
zzzmode 2015-11-08 20:50:19 +08:00
手机上跑爬虫还存到 sqlite 里面么。。
|
6
Radiums 2015-11-10 14:16:24 +08:00
自己决定对象的生命周期啊。一般 Activity 关闭的时候就可以清理掉,或者链接数据接收完了也要 close
|