6

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

异步任务.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
...
4

1 回答 1

0

Android 上的 GC 总体上是激进的,它不一定与杰克逊有任何关系。更多信息在这里:

Android垃圾收集器的技术细节

于 2012-08-16T00:23:30.507 回答