6

私の Android アプリには、オブジェクトのリストの残りの呼び出しを行うためのカスタム AsyncTask があります。Jackson を使用して応答を Java に変換しています。ObjectMapper.readValue() を介して Json をマッピングするときに、約 30 のガベージ コレクション呼び出しが発生しています。興味深いことに、(更新ボタンを選択して) 同じ呼び出しを 2 回、3 回、4 回行っても、GC 呼び出しは 1 回だけです。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
...
4

1 に答える 1

0

AndroidのGCは全体的に攻撃的であり、必ずしもジャクソンとは何の関係もありません。詳細はこちら:

Androidガベージコレクターの技術的な詳細

于 2012-08-16T00:23:30.507 に答える