android 循环数据量大的JSON造成频繁GC怎么解决

小茶杯 2016-08-28 02:04:08
项目背景:PDA条码扫描,每次扫描得到的条码code,与本地的 条码库文件 (JSON 文件)进行对比匹配,找出此条码对应的所有信息,一下为我的代码:
        colorName = null;
goodsNo = null;
longCode = null;
sizeCode = null;
//根据条码匹配本地的条码库,得到其他信息,并将此条码存入对应的条码文件中
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
try {
if (barcodearray == null) {//第一次扫描,将条码json数组放入内存
waitHandler.sendEmptyMessage(0);
String filename = com.ablejeans.ablestock.utils.SharedPreferencesUtils.getValue(mContext, "localjson").toString();
String sdpath = Environment.getExternalStorageDirectory() + "/" + "able/" + filename;
String localjsonstr = com.ablejeans.ablestock.utils.CommonTools.GetInfoByBarcode(sdpath);//得到本地json集合
barcodearray = JSONArray.parseArray(localjsonstr);
}
for (int i = 0; i < barcodearray.size(); i++) {
if (barcodearray.getJSONObject(i).get("BarCode").equals(barcodestr)) {
colorName = barcodearray.getJSONObject(i).get("color").toString();
goodsNo = barcodearray.getJSONObject(i).get("Goods_no").toString();
longCode = barcodearray.getJSONObject(i).get("Long").toString();
sizeCode = barcodearray.getJSONObject(i).get("Size").toString();
break;
}
}
} catch (JSONException e) {
e.printStackTrace();
}

}

在上述代码执行循环体的时候,会频繁的引起GC,甚至会导致内存泄漏,VM 甚至会shutdown,但是我并没有在循环体中创建任何变量,为何会如此?(循环最多执行,2w多次,因为条码库有2w多行,解析json我用的fastjson)
...全文
720 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
afunx 2016-08-28
  • 打赏
  • 举报
回复
barcodearray = JSONArray.parseArray(localjsonstr); 我估计是这句引起的GC。 虽然,你没有创建变量,但它创建了。如果这句执行的频率极高,则会不断创建新的对象,HEAP中的对象太多,就会GC了。 没找到fastjson中的JSONArray.parseArray
lucers 2016-08-28
  • 打赏
  • 举报
回复
如果需要请求大量数据,最好使用多线程的模式

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧