为什么Android垃圾会用Jacksons ObjectMapper收集这么多次?

时间:2012-07-10 15:40:14

标签: android garbage-collection jackson

我的Android应用程序有一个自定义的AsyncTask,可以对一个对象列表进行休息调用。我正在使用Jackson将我的响应转换为Java,当通过ObjectMapper.readValue()映射Json时,我看到大约30个垃圾收集调用。有趣的是,如果我在第二次,第三次,第四次(通过选择刷新按钮)进行相同的呼叫,则只有一次GC呼叫。有没有想过为什么每次我启动Android应用程序时第一次调用都会发生这种情况?

AsyncTask.java

doInBackground() {

HttpGet request = new HttpGet(url);
HttpClientUtil.setJsonAccept(request);
HttpResponse response = httpClient.execute(request);
HttpEntity responseEntity = new BufferedHttpEntity(response.getEntity());

// Call that garbage collect 30+ times the first exectution
ArrayList<MyObject> responseCollection = mapper.readValue(responseEntity.getContent(), new TypeReference<ArrayList<MyObject>>(){});

return responseCollection;
}

LogCat输出

07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms
07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms
07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms
...

1 个答案:

答案 0 :(得分:0)

Android上的GC总体上是积极的,它不一定与杰克逊有任何关系。更多信息:

Technical details of Android Garbage Collector