0

Android 2.3.3 API Lv10에서 개발 중입니다. 내 응용 프로그램은 'LoaderManager'인터페이스를 사용하여 백그라운드에서 이미지를로드하고 이미지는 ViewPager에 표시됩니다. 이미지보기를 반복하면 앱이 결국 중단됩니다. 앱이 메모리를 빠르게 할당하고 GC가 일부 메모리를 해제 할 수없는 것 같습니다.Android OOM, 메모리가 공개되지 않습니다.

어떤 개체가 메모리에 저장되어 있는지 추적 할 수있는 방법이 있습니까?

02-02 18:02:05.564: D/dalvikvm(255): GC_EXPLICIT freed 500K, 55% free 2599K/5703K, external 1625K/2137K, paused 534ms 
02-02 18:02:05.714: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 365K, 54% free 2680K/5703K, external 3045K/3338K, paused 54ms 
02-02 18:02:06.074: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 59K, 54% free 2677K/5703K, external 4211K/5259K, paused 62ms 
02-02 18:02:10.645: D/dalvikvm(316): GC_EXPLICIT freed 322K, **54% free** 2539K/5511K, external 1625K/2137K, paused 100ms 
02-02 18:02:53.054: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 109K, **53% free** 2684K/5703K, external 6691K/6808K, paused 48ms 
02-02 18:03:16.834: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 604K, 55% free 2720K/5959K, external 8954K/9904K, paused 52ms 
02-02 18:03:18.304: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 114K, 55% free 2711K/5959K, external 6160K/6211K, paused 47ms 
02-02 18:03:21.534: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 128K, 55% free 2731K/5959K, external 8375K/9165K, paused 38ms 
02-02 18:03:29.154: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 612K, 55% free 2757K/6023K, external 10236K/11261K, paused 50ms 
02-02 18:03:30.394: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 90K, 55% free 2719K/6023K, external 8070K/8080K, paused 45ms 
02-02 18:03:33.944: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 571K, 54% free 2786K/6023K, external 9093K/10112K, paused 74ms 
02-02 18:03:36.304: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 115K, 54% free 2777K/6023K, external 7952K/8724K, paused 45ms 
02-02 18:03:41.194: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 319K, 53% free 2877K/6023K, external 10954K/10980K, paused 51ms 
02-02 18:03:58.054: I/dalvikvm(389): Jit: resizing JitTable from 512 to 1024 
02-02 18:03:58.454: D/dalvikvm(389): GC_CONCURRENT freed 1254K, 58% free 2841K/6727K, external 8152K/8375K, paused 4ms+5ms 
02-02 18:04:01.314: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 80K, 58% free 2847K/6727K, external 8078K/8375K, paused 57ms 
02-02 18:04:02.244: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 66K, 58% free 2884K/6727K, external 10625K/11366K, paused 40ms 
02-02 18:04:07.614: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 191K, 58% free 2874K/6727K, external 13698K/14474K, paused 49ms 
02-02 18:04:16.104: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 566K, 57% free 2925K/6727K, external 12504K/12547K, paused 41ms 
02-02 18:04:16.574: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 194K, 58% free 2837K/6727K, external 8589K/9589K, paused 51ms 
02-02 18:04:18.774: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 71K, 58% free 2862K/6727K, external 9048K/11075K, paused 40ms 
02-02 18:04:20.705: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 108K, 58% free 2859K/6727K, external 11804K/12545K, paused 49ms 
02-02 18:04:22.475: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 52K, 58% free 2861K/6727K, external 14210K/16258K, paused 40ms 
02-02 18:04:24.044: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 52K, 58% free 2863K/6727K, external 16920K/18968K, paused 47ms 
02-02 18:04:24.153: E/dalvikvm-heap(389): 1232160-byte external allocation too large for this process. 
02-02 18:04:24.255: D/dalvikvm(389): GC_FOR_MALLOC freed <1K, 58% free 2863K/6727K, external 16920K/18968K, paused 29ms 
02-02 18:04:24.265: W/dalvikvm(389): threadid=9: thread exiting with uncaught exception (group=0x40015560) 
02-02 18:04:24.565: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 91K, 58% free 2850K/6727K, external 16967K/18968K, paused 149ms 
02-02 18:04:25.664: D/dalvikvm(389): GC_FOR_MALLOC freed 0K, 58% free 2850K/6727K, external 17021K/18968K, paused 161ms 
02-02 18:04:27.144: D/dalvikvm(389): GC_EXTERNAL_ALLOC freed 39K, 58% free 2880K/6727K, external 17000K/18968K, paused 49ms 
02-02 18:04:27.364: I/dalvikvm-heap(389): Clamp target GC heap from 24.004MB to 24.000MB 
02-02 18:04:27.374: D/dalvikvm(389): GC_FOR_MALLOC freed <1K, 58% free 2880K/6727K, external 17048K/18968K, paused 29ms 
02-02 17:48:09.424: D/dalvikvm(337): GC_CONCURRENT freed 1400K, 61% free 2686K/6727K, external 3045K/3330K, paused 4ms+4ms 
02-02 17:48:10.284: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 58K, 60% free 2707K/6727K, external 2972K/3330K, paused 37ms 
02-02 17:48:11.664: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 78K, 60% free 2709K/6727K, external 3842K/4799K, paused 44ms 
02-02 17:48:17.364: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 161K, 60% free 2719K/6727K, external 5843K/6032K, paused 41ms 
02-02 17:48:25.824: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 157K, 60% free 2726K/6727K, external 8108K/8682K, paused 76ms 
02-02 17:48:30.084: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 157K, 60% free 2732K/6727K, external 10488K/11355K, paused 63ms 
02-02 17:48:39.704: D/dalvikvm(337): GC_CONCURRENT freed 742K, 58% free 2888K/6727K, external 12840K/13865K, paused 4ms+3ms 
02-02 17:48:43.895: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 893K, 60% free 2749K/6727K, external 3941K/4896K, paused 52ms 
02-02 17:48:58.414: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 160K, 60% free 2750K/6727K, external 6400K/6445K, paused 55ms 
02-02 17:49:02.324: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 375K, 59% free 2821K/6727K, external 9503K/9541K, paused 43ms 
02-02 17:49:03.755: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 320K, 59% free 2777K/6727K, external 4944K/5945K, paused 69ms 
02-02 17:49:08.184: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 212K, 59% free 2767K/6727K, external 7593K/7630K, paused 46ms 
02-02 17:49:10.914: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 451K, 59% free 2805K/6727K, external 5893K/6353K, paused 50ms 
02-02 17:49:15.294: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 163K, 58% free 2843K/6727K, external 9263K/9265K, paused 39ms 
02-02 17:49:16.434: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 499K, 58% free 2835K/6727K, external 6842K/7538K, paused 76ms 
02-02 17:49:18.824: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 109K, 58% free 2831K/6727K, external 9008K/9765K, paused 43ms 
02-02 17:49:25.774: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 645K, 59% free 2816K/6727K, external 12225K/12235K, paused 53ms 
02-02 17:49:35.494: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 60K, 58% free 2864K/6727K, external 10256K/12304K, paused 54ms 
02-02 17:49:59.824: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 1593K, 60% free 2905K/7111K, external 13747K/14632K, paused 58ms 
02-02 17:50:02.764: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 114K, 59% free 2927K/7111K, external 11181K/12092K, paused 73ms 
02-02 17:50:04.605: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 151K, 59% free 2935K/7111K, external 13655K/14466K, paused 47ms 
02-02 17:50:09.174: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 513K, 59% free 2970K/7111K, external 15783K/15803K, paused 49ms 
02-02 17:50:14.434: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 247K, 59% free 2926K/7111K, external 11360K/11714K, paused 52ms 
02-02 17:50:20.464: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 608K, 59% free 2960K/7111K, external 13909K/14934K, paused 50ms 
02-02 17:50:24.415: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 143K, 59% free 2980K/7111K, external 14651K/15393K, paused 43ms 
02-02 17:50:24.655: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed 0K, 59% free 2980K/7111K, external 14651K/15393K, paused 49ms 
02-02 17:50:24.725: I/dalvikvm-heap(337): Clamp target GC heap from 24.113MB to 24.000MB 
02-02 17:50:24.725: D/dalvikvm(337): GC_FOR_MALLOC freed <1K, 59% free 2980K/7111K, external 17058K/19106K, paused 59ms 
02-02 17:50:24.805: D/dalvikvm(337): GC_EXTERNAL_ALLOC freed <1K, 59% free 2980K/7111K, external 17058K/19106K, paused 69ms 
02-02 17:50:25.045: E/dalvikvm-heap(337): 2774400-byte external allocation too large for this process. 
02-02 17:50:25.115: I/dalvikvm-heap(337): Clamp target GC heap from 24.112MB to 24.000MB 
02-02 17:50:25.115: D/dalvikvm(337): GC_FOR_MALLOC freed 0K, 59% free 2980K/7111K, external 17058K/19106K, paused 56ms 
02-02 17:50:25.304: E/GraphicsJNI(337): VM won't let us allocate 2774400 bytes 
+0

코드 공유는 어떻습니까? – WarrenFaith

+0

여기에 LoaderManager 클래스를 붙여 넣습니다. –

답변

2

@ JoxTrax가 제공하는 링크는 훌륭합니다. 그러나이 문제에 관해, 나는 근본 원인을 마침내 발견했다. LoaderManager은 Loader 개체에 대한 참조와 Loader.loadInBackground 메서드에서 반환 한 개체를 포함합니다. LoaderManager.destroyLoader (id)를 호출 한 후에 문제가 영원히 사라졌습니다.

1

이것은 당신이 당신이 메모리 과부하를 시작, 당신의 비트 맵에 대한 참조를 유지 특히 경우, 종류의 하드 해결하는 것입니다 꽤 주제입니다. 이것은 이미지가 메모리/VM 측면에서 매우 무거웠 기 때문입니다. Romain Guy가 그래픽과 비트 맵에 대해 말한 것을 살펴보고 어떻게 처리해야하는지 살펴보아야합니다. 여기

는 :

http://www.youtube.com/watch?v=duefsFTJXzc

http://www.youtube.com/watch?v=wJYTBjMZJh0

그들은 긴 비디오하지만, 좋은 정보를 많이 가지고 있으며이 중 일부는 모범 사례와이를 처리하는 방법이 포함되어 있습니다.

관련 문제