Moja aplikacja na Androida ma niestandardowy AsyncTask, aby wykonać zaproszenie na odpoczynek w celu wyświetlenia listy obiektów. Używam Jacksona, aby przekonwertować moją odpowiedź na Javę i widzę około 30 wywołań kolekcji śmieci podczas mapowania Json za pomocą ObjectMapper.readValue(). Co ciekawe, jeśli wykonam to samo połączenie po raz drugi, trzeci, czwarty (wybierając przycisk odświeżania), jest tylko jedno wywołanie GC. Jakieś pomysły, dlaczego tak się dzieje podczas pierwszego połączenia za każdym razem, gdy uruchamiam aplikację na Androida?Dlaczego Android śmieci zbiera się tyle razy z Jacksons ObjectMapper?
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 Wyjście
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
...
GC na Androida jest agresywny ogólnie, to nie musi mieć nic wspólnego z Jacksonem. Więcej informacji tutaj: http://stackoverflow.com/questions/4818869/technical-details-of-android-garbage-collector –
@ ChristopherPerry Więc wydaje się, że odpowiedź, proszę umieścić i zamknąć :) – Warpzit