Android 查询数据库时 项目出现 OOM (不断引发GC)
来源:互联网 发布:必达家淘宝是正品吗 编辑:程序博客网 时间:2024/04/28 07:28
这两天项目遇到一个棘手的问题:在查询数据库数据记录(全部显示在屏幕上)时,不断引发gc 操作,最后 oom
logcat日志如下:
02-15 10:53:25.853: I/System.out(2223): DDP: come here add one recode
02-15 10:53:30.843: I/System.out(2223): DDP: cursor.count = 3
02-15 10:53:31.273: D/dalvikvm(2223): GC freed 934 objects / 77736 bytes in 83ms
02-15 10:53:31.873: D/dalvikvm(2223): GC freed 107 objects / 29960 bytes in 88ms
02-15 10:53:32.593: D/dalvikvm(2223): GC freed 123 objects / 24176 bytes in 102ms
02-15 10:53:33.553: D/dalvikvm(2223): GC freed 44 objects / 29368 bytes in 115ms
02-15 10:53:34.813: D/dalvikvm(2223): GC freed 3 objects / 41632 bytes in 153ms
02-15 10:53:36.563: D/dalvikvm(2223): GC freed 3 objects / 62408 bytes in 218ms
02-15 10:53:38.283: D/dalvikvm(2223): GC freed 3 objects / 93576 bytes in 265ms
02-15 10:53:40.103: D/dalvikvm(2223): GC freed 2 objects / 48 bytes in 322ms
02-15 10:53:41.853: D/dalvikvm(2223): GC freed 3 objects / 140328 bytes in 325ms
02-15 10:53:43.804: D/dalvikvm(2223): GC freed 2 objects / 48 bytes in 387ms
02-15 10:53:45.932: D/dalvikvm(2223): GC freed 2 objects / 48 bytes in 556ms
02-15 10:53:47.762: I/dalvikvm-heap(2223): Clamp target GC heap from 24.386MB to 24.000MB
02-15 10:53:47.762: D/dalvikvm(2223): GC freed 3 objects / 210456 bytes in 528ms
02-15 10:53:49.462: I/dalvikvm-heap(2223): Clamp target GC heap from 26.025MB to 24.000MB
02-15 10:53:49.462: D/dalvikvm(2223): GC freed 2 objects / 48 bytes in 475ms
02-15 10:53:49.462: I/dalvikvm-heap(2223): Clamp target GC heap from 24.025MB to 24.000MB
02-15 10:53:49.472: I/dalvikvm-heap(2223): Grow heap (frag case) to 24.000MB for 26-byte allocation
02-15 10:53:50.013: I/dalvikvm-heap(2223): Clamp target GC heap from 26.025MB to 24.000MB
02-15 10:53:50.023: D/dalvikvm(2223): GC freed 0 objects / 0 bytes in 550ms
02-15 10:53:50.023: I/dalvikvm-heap(2223): Forcing collection of SoftReferences for 24-byte allocation
02-15 10:53:50.522: I/dalvikvm-heap(2223): Clamp target GC heap from 26.025MB to 24.000MB
02-15 10:53:50.522: D/dalvikvm(2223): GC freed 0 objects / 0 bytes in 500ms
02-15 10:53:50.522: E/dalvikvm-heap(2223): Out of memory on a 24-byte allocation.
找了半天,原来以为是项目中的一些大图片导致的内存吃紧。一直没有找到问题的症结所在。
今天自己写了一个操作数据库的demo,发现原来是查询代码出了问题。
原代码如下:
public List<Map<String,Object>> queryAllJournal(){
List<Map<String,Object>> journalData = new ArrayList<Map<String,Object>>();
if(db != null){
Cursor cursor = db.query(JournalTB.JOURNAL_TABLE, null, null, null, null, null, null);
if (cursor.getCount() > 0){
System.out.println("DDP: cursor.count = " + cursor.getCount());
cursor.moveToFirst();
HashMap item = null;
while(!cursor.isAfterLast()){ // 仔细看看,这是一个死循环啊,cursor位置没有改变啊!!!
item = new HashMap<String,Object>();
item.put("id", cursor.getInt(JournalTB.ID_COL_INDEX));
item.put("date", cursor.getString(JournalTB.DATE_COL_INDEX));
item.put("description", cursor.getString(JournalTB.DESCRIPTION_COL_INDEX));
journalData.add(item);
}
}
cursor.close();
}
return journalData;
}
怎么解决呢?
仔细看了好久,唉,真是该死啊! 有一个死循环在 代码中。
忘记了下面这一句!,唉,悲剧啊
cursor.moveToNext();
- Android 查询数据库时 项目出现 OOM (不断引发GC)
- android中加载图片时出现oom
- 安卓studio打包时出现OOM: GC overhead limit exceeded
- Android OOM以及GC的一些建议
- android加载图片出现OOM
- OOM(GC overhead limit exceeded)异常
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案
- Android开发中 页面加载一张超大图片(561kb)时出现OOM
- Android开发中 页面加载一张超大图片(561kb)时出现OOM
- Android开发中 页面加载一张超大图片(561kb)时出现OOM
- Android开发中 页面加载一张超大图片(561kb)时出现OOM
- Android GridView加载大量图片时出现OOM情况
- Android加载图片时出现OOM(OutOfMermary)的问题解决方案
- android中用setBackgroundResource加载图片时出现oom
- Android 添加启动画面跳转时出现 OOM
- 用Doxygen为objective-c代码生成文档
- 虚拟机的安装与汉化
- Windows7 Eclipse未响应问题
- oracle函数(关于处理小数点位数)
- android开发经验-findViewById(参数)的使用
- Android 查询数据库时 项目出现 OOM (不断引发GC)
- Android TextSwitcher
- Oracle 常用命令
- Excel 筛选数据、根据公式组成字符串
- jquery-ul-autoComplete
- 位图信息头BITMAPINFOHEADER
- java函数重载和函数重写
- 关于POST请求数据发送问题
- Winform 进程之间通讯的几种方法