기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

앞서 질문 드린 "ODROID-T의 App. Heap Memory 부족 문제" (http://www.aesop.or.kr/?document_srl=291042#comment_292090 )에 이어 포스팅을 계속합니다.

 

---------------

 

이제현님께서 말씀하신 샘플 코드를 만들어 봤습니다.  단순하게 int 를 1M개씩 (4byte x 1M = 4MB) Array에 넣는 코드입니다. (버튼을 누르면 4MB씩 new를 하는 간단한 코드)

 

package com.happymint;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MemoryTest extends Activity {

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  final ArrayList<int[]> mArray = new ArrayList<int[]>();
  Button btn = (Button) findViewById(R.id.Button);
  OnClickListener clickL = new View.OnClickListener() {

   @Override
   public void onClick(View v) {
    int[] data = new int[1024 * 1024];
    mArray.add(data);
    Log.v("Memory", "Array size " + mArray.size());
   }
  };
  btn.setOnClickListener(clickL);
 }
}

 

이 코드를 3번 실행하니까 오드로이드에서 바로 죽었습니다. 죽었을 때의 로그를 보면...

 

06-09 17:18:28.061: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:31.991: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:33.190: DEBUG/dalvikvm(23632): GC freed 613 objects / 51704 bytes in 35ms
06-09 17:18:33.233: INFO/dalvikvm-heap(23632): Grow heap (frag case) to 8.324MB for 4194320-byte allocation
06-09 17:18:33.264: INFO/AudioHardwareALSA(1833): Try to open ALSA PLAYBACK device AndroidPlayback
06-09 17:18:33.264: INFO/AudioHardwareALSA(1833): Initialized ALSA PLAYBACK device AndroidPlayback
06-09 17:18:33.264: DEBUG/AudioHardwareALSA(1833): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian)
06-09 17:18:33.264: DEBUG/AudioHardwareALSA(1833): Using 2 channels for PLAYBACK.
06-09 17:18:33.264: DEBUG/AudioHardwareALSA(1833): Set PLAYBACK sample rate to 44100 HZ
06-09 17:18:33.264: DEBUG/AudioHardwareALSA(1833): Buffer size: 4096
06-09 17:18:33.264: DEBUG/AudioHardwareALSA(1833): Latency: 92879
06-09 17:18:33.276: DEBUG/dalvikvm(23632): GC freed 155 objects / 7000 bytes in 44ms
06-09 17:18:33.311: VERBOSE/Memory(23632): Array size 1
06-09 17:18:33.366: ERROR/AudioHardwareALSA(1833): bufferSize 4096, periodSize 2048
06-09 17:18:35.936: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:39.866: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:41.510: DEBUG/dalvikvm(23632): GC freed 83 objects / 3088 bytes in 32ms
06-09 17:18:41.553: INFO/dalvikvm-heap(23632): Grow heap (frag case) to 12.317MB for 4194320-byte allocation
06-09 17:18:41.588: INFO/AudioHardwareALSA(1833): Try to open ALSA PLAYBACK device AndroidPlayback
06-09 17:18:41.588: INFO/AudioHardwareALSA(1833): Initialized ALSA PLAYBACK device AndroidPlayback
06-09 17:18:41.588: DEBUG/AudioHardwareALSA(1833): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian)
06-09 17:18:41.588: DEBUG/AudioHardwareALSA(1833): Using 2 channels for PLAYBACK.
06-09 17:18:41.588: DEBUG/AudioHardwareALSA(1833): Set PLAYBACK sample rate to 44100 HZ
06-09 17:18:41.588: DEBUG/AudioHardwareALSA(1833): Buffer size: 4096
06-09 17:18:41.588: DEBUG/AudioHardwareALSA(1833): Latency: 92879
06-09 17:18:41.596: DEBUG/dalvikvm(23632): GC freed 0 objects / 0 bytes in 43ms
06-09 17:18:41.631: VERBOSE/Memory(23632): Array size 2
06-09 17:18:41.674: ERROR/AudioHardwareALSA(1833): bufferSize 4096, periodSize 2048
06-09 17:18:43.811: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:45.135: DEBUG/dalvikvm(23632): GC freed 9 objects / 304 bytes in 33ms
06-09 17:18:45.159: INFO/dalvikvm-heap(23632): Forcing collection of SoftReferences for 4194320-byte allocation
06-09 17:18:45.198: DEBUG/dalvikvm(23632): GC freed 0 objects / 0 bytes in 38ms
06-09 17:18:45.202: INFO/AudioHardwareALSA(1833): Try to open ALSA PLAYBACK device AndroidPlayback
06-09 17:18:45.202: INFO/AudioHardwareALSA(1833): Initialized ALSA PLAYBACK device AndroidPlayback
06-09 17:18:45.206: DEBUG/AudioHardwareALSA(1833): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian)
06-09 17:18:45.206: DEBUG/AudioHardwareALSA(1833): Using 2 channels for PLAYBACK.
06-09 17:18:45.206: DEBUG/AudioHardwareALSA(1833): Set PLAYBACK sample rate to 44100 HZ
06-09 17:18:45.206: DEBUG/AudioHardwareALSA(1833): Buffer size: 4096
06-09 17:18:45.206: DEBUG/AudioHardwareALSA(1833): Latency: 92879
06-09 17:18:45.225: ERROR/dalvikvm-heap(23632): Out of memory on a 4194320-byte allocation.
06-09 17:18:45.237: INFO/dalvikvm(23632): "main" prio=5 tid=3 RUNNABLE
06-09 17:18:45.237: INFO/dalvikvm(23632):   | group="main" sCount=0 dsCount=0 s=N obj=0x4001b260 self=0xbd00
06-09 17:18:45.237: INFO/dalvikvm(23632):   | sysTid=23632 nice=0 sched=0/0 cgrp=default handle=-1343993192
06-09 17:18:45.237: INFO/dalvikvm(23632):   at com.happymint.MemoryTest$1.onClick(MemoryTest.java:~26)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.View.performClick(View.java:2364)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.View.onTouchEvent(View.java:4179)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.widget.TextView.onTouchEvent(TextView.java:6541)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.View.dispatchTouchEvent(View.java:3709)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.os.Handler.dispatchMessage(Handler.java:99)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.os.Looper.loop(Looper.java:123)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at android.app.ActivityThread.main(ActivityThread.java:4363)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at java.lang.reflect.Method.invokeNative(Native Method)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at java.lang.reflect.Method.invoke(Method.java:521)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-09 17:18:45.237: INFO/dalvikvm(23632):   at dalvik.system.NativeStart.main(Native Method)
06-09 17:18:45.241: DEBUG/AndroidRuntime(23632): Shutting down VM
06-09 17:18:45.241: WARN/dalvikvm(23632): threadid=3: thread exiting with uncaught exception (group=0x4001b180)
06-09 17:18:45.241: ERROR/AndroidRuntime(23632): Uncaught handler: thread main exiting due to uncaught exception
06-09 17:18:45.245: ERROR/AndroidRuntime(23632): java.lang.OutOfMemoryError
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at com.happymint.MemoryTest$1.onClick(MemoryTest.java:26)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.View.performClick(View.java:2364)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.View.onTouchEvent(View.java:4179)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.View.dispatchTouchEvent(View.java:3709)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.os.Looper.loop(Looper.java:123)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at java.lang.reflect.Method.invokeNative(Native Method)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at java.lang.reflect.Method.invoke(Method.java:521)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-09 17:18:45.245: ERROR/AndroidRuntime(23632):     at dalvik.system.NativeStart.main(Native Method)
06-09 17:18:45.252: INFO/Process(1851): Sending signal. PID: 23632 SIG: 3
06-09 17:18:45.252: INFO/dalvikvm(23632): threadid=7: reacting to signal 3
06-09 17:18:45.252: INFO/dalvikvm(23632): Wrote stack trace to '/data/anr/traces.txt'
06-09 17:18:45.307: ERROR/AudioHardwareALSA(1833): bufferSize 4096, periodSize 2048
06-09 17:18:47.745: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:51.686: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:55.620: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:18:59.565: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:03.495: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:07.440: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:12.491: DEBUG/dalvikvm(2391): GC freed 787 objects / 55560 bytes in 42ms
06-09 17:19:17.487: DEBUG/dalvikvm(2074): GC freed 256 objects / 11576 bytes in 38ms
06-09 17:19:22.506: DEBUG/dalvikvm(1932): GC freed 1872 objects / 102936 bytes in 56ms
06-09 17:19:23.190: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:27.120: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:34.999: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:38.932: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:19:50.745: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:20:02.557: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0
06-09 17:20:18.311: DEBUG/WifiService(1851): ACTION_BATTERY_CHANGED pluggedType: 0

대략 16MB 할당하자마자 죽은 거 같습니다.

 

-------------------

 

결론적으로 안드로이드 기반 태블릿인 오드로이드는 현재 App. 당 쓸 수 있는 Heap Memory가 16MB로 잡혀져

있는데 이 부분은 일반 App.를 개발하기에는 너무 적은 용량으로 좀더 키워야 오드로이드-T를 통한 원만한 App.

개발이 이뤄질 것 같습니다.

 

이에 대한 대응 부탁드립니다.

 

감사합니다.

 

추신 : 해당 소스의 apk를 첨부에 두었습니다.  오드로이드에서 실행하시면 쉽게 재현될 겁니다.

 


최가이버

2010.07.09 04:57:59
*.94.41.89

삼성전자 갤럭시탭(P1)도 다음과 같은 빌드 옵션을 썼다고 하네요.

 

 main.mk 에서,
  ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.heapsize=48m
  이렇게 주시면 됩니다.

 

즉 이렇게 해서 P1은 Heap Memory를 48MB 확보해서 쓸 수 있게 됩니다.

사실 이 48MB라는 게 윈도우즈용 App.를 보면 정말 별 게 아닌 메모리 양입니다.

물론 폰 입장에서는 꽤 큰 메모리양이지만 문제는 우리가 다루는 태블릿PC가 거의 일반 PC와 같은 정도의 화면 해상도를 갖고 하는 일도 PC 급으로 할 수도 있다는 거죠.  e-book 솔루션을 개발하는데 ePub 포맷이나, PDF 문서를 읽어서 화면에 뿌리려면 거의 PC용 App. 정도의 일을 수행하기 때문에 48MB도 넉넉한 게 아닙니다.

 

따라서 현재 16MB로 Heap이 제한되는 오드로이드-T도 Heap Memory를 48MB 이상으로 올려야 하지 않을까 생각합니다. 그래야 태블릿PC용 App. 들이 그나마 겨우겨우 돌아간다고 볼 수 있겠죠.  만약 P1 정도를 생각하고 오드로이드-T를 구매한 분들은 이 적은 Heap Memory 때문에 P1에서는 돌아가는 App.이 오드로이드-T에서는 실행 불가라고 노여워할 수도 있을 것 같습니다.

 

저희는 현재 오드로이드-T의 소스코드를 위와 같은 옵션으로 재빌드해보려고 하고 있습니다.  하는 김에 Froyo로 업그레이드도 하구요.  저희로서는 이 작업이 잘 되어야 할 것 같습니다.

 

이솝보드 측과 하드커널 측에서 이점 감안해서 Heap Size를 늘린 빌드 버전을 내놓는 게 어떨런지요?

 

감사합니다.

이제현

2010.07.09 21:09:57
*.90.137.102

최석균님 말씀대로 변경해서 빌드하였습니다.

그리고 올려주신 테스트 apk로 테스트 결과 10번까지 추가되고 에러가 납니다? 정상인지요?


첨부는 테스트한 로그 입니다. 확인 부탁드립니다.


별 문제없다면, 다음주 초반에 업데이트 이미지 릴리즈 하겠습니다.

감사합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6208 [잡담] 공제보드 [3] 한영민 2007-05-30 3121
6207 [질문]LCD TV 로 연결시 해상도를 높일수 있나요?[완료] [2] 조준동 2007-05-09 3119
» ODROID-T의 App. Heap Memory 부족 문제 #2 file [2] 최가이버 2010-07-09 3111
6205 [질문] 전원은 12V 평균 몇mA나 먹는지요? 혹시 테스트하신 분들,... [2] 임장욱 2007-05-09 3108
6204 Bios에 관해서... [4] 박찬규 2007-12-10 3106
6203 무선 아시는 분.. RT73 USB WiFi 관련 문의. 윈도우나 우분투 ... 공정표 2009-08-09 3087
6202 udev Arm cross compile 문의 드립니다. [6] Supsupi 2012-05-05 3084
6201 wpa_supplicant문의 드립니다. [1] 테크 2013-06-05 3079
6200 [질문] 동영상 재생시 너무 느립니다. [4] 강덕하 2007-05-21 3078
6199 [완료]usb유선랜... [4] 이태간 2007-06-01 3059
6198 nfs: server 192.168.0.77 not responding, still trying [10] 오태호 2009-03-29 3054
6197 [완료] 화면이 하얗게 되네요... [1] 임은향 2007-05-15 3053
6196 바이오스 개발에 대한 공부는 어디서 부터 해야할까요? [2] 문윤석 2008-04-10 3045
6195 [질문] 윈도우 XP설치시 정품여부.. [4] 김영곤 2007-05-10 3035
6194 Mplayer을 6410에 올리려고 libmad를 컴파일 하는데 에러 발생 [4] 윤인성 2009-02-27 3034
6193 라즈베리파이간 GPIO로 UART 통신을 하고 싶습니다. [1] Supsupi 2013-09-06 3025
6192 aESOP S3C6410에 적용된 CPU와 mDDR 간의 PCB LAYOUT을 알수... [6] 김상일 2009-02-17 3020
6191 [질문] 양산시의 Nand 퓨징에 관해서... [6] 이재훈 2006-06-24 3020
6190 aesop6410 Android NFS 포팅관련 질문드립니다. [4] 서리 2009-07-12 3013
6189 i2c 디바이스 드라이버 사용법 문의. file [1] 암내 2010-02-25 2978

사용자 로그인