2011.04.05 15:21

Dalvik-Cache

SpeedMod커널의 Wipe Dalvik-cache 가 어떤것인지를 질문하시는 분들이 있어서 자료를 올립니다.

Dalvik-cache는 간단하게 말씀드리면, java가상머신으로 안드로이드 어플들을 빨리 수행되도록 최적화 분석정보를 저장한 Cache영역을 의미합니다. Wipe Dalvik-cahce 란 기능은 Jav 가상머신의 캐시영역을 깨끗하게 지워주는 것입니다.
이영역은, 어플들이 실행될때 다시 저장되는 영역이며, Wipe Dalvik-cache를 하고 부팅하면, 첫 부팅시간이 오래걸리므로 당황하지마시기 바랍니다.


출처 : http://sink772.egloos.com/3490667, 씽그페드님 블로그
출처 : http://blog.vizpei.kr/63464875, 비즈페이님블로그

Android 플랫폼의 핵심은 바로 Dalvik VM이라 불리우는 런타임 환경이다.  애플리케이션 개발은 Java 언어를 사용하면서 왜 런타임 환경은 Java VM이 아닌 또다른 VM를 채용했을까라는 것이 이슈인데, Stefano Mazzocchi의 블로그 글에서 이에 대한 해답을 찾을 수 있다.  결론만 말하자면 SUN과의 라이센스 문제 때문인데, 작년말에 SUN이 PhoneME라는 이름으로 Java ME 관련 코드를 오픈 소스화하긴 했지만, 실제로 Java VM을 핸드셋에 탑재하기 위해서는 SUN에 라이센스 비용을 꼬박꼬박 물어야 한다.  즉 생색은 있는 대로 다 내면서 실속 또한 챙기는 이중 전략인 셈인데, 이를 비껴가기 위해서 구글은 Dalvik VM이라는 카드를 꺼내든 것이다.  애플리케이션 개발 환경은 Java SE 관련이므로 그 유명한 Classpath 예외조항에 따라 라이센스 문제를 피할 수 있지만, Java ME 쪽은 예외조항이 없으므로 Java VM을 배제하고 또다른 VM을 탑재하는 식으로 처리를 한 것이다.  구글맵 등 이미 Java 언어 기반으로 모바일 애플리케이션을 배포하던 구글로서는 기존의 인프라를 그대로 살리고 싶어했을 것이고, 또 거의 모든 소스를 오픈하여 자유롭게 사용할 수 있도록 배포하려던 정책도 SUN과의 라이센스 문제 때문에 포기할 수는 없었을 것이다.


Android SDK로는 Java 소스를 Dalvik bytecode로 직접 컴파일 할 수 없습니다.

처음에 정식 Java 컴파일러를 사용하여 정식 Java bytecode를 생성한 뒤에, Dalvik bytecode로 변환하도록 Android SDK에 dx라는 툴을 포함시켜 두었습니다. 여러개의 .class파일들을 dx툴을 사용하여 하나의 .dex파일로 변환하는 것이죠. 이때 중요한 것은 .dex파일로 변환할 때에 Java bytecode를 Dalvik VM에서 사용하는 bytecode로 변환하는데에 있습니다. 여기서 Java VM과의 상관은 끊어지게 되는 것이죠. 보통 같은 .class파일을 가지고 .jar파일로 변환할 때보다 .dex파일로 변환하면 크기가 조금 줄어든다고 합니다. 여튼 중요한건 'Android는 Java VM을 사용하지 않는다.' 라는 사실입니다.

 

[SUN의 라이센스를 피해서]

구글의 입장에서는 Java VM을 사용해서는 안되는 상황이 만들어 져버렸습니다. 바로 Java ME의 라이센스 정책 때문입니다.Java는 GPLv2하에 배포가 되었던 오픈소스였습니다. 뭐, 거기까지는 좋습니다. 하지만 Java ME에서 그 '예외'가 발생 해버렸죠.핸드셋에 Java VM을 탑재하기 위해서는 SUN에게 라이센스 비용을 지불해야 합니다.

역시 Java VM을 사용하지 않는것 밖에는 방법이 없던것 같군요...

 
[Using Java SE]

위에서 말씀드렸듯이 dx툴을 사용하여 Java 플랫폼 어플리케이션을 Dalvik Excutable(.dex)로 변환 할 수 있습니다.

이때 사용되는 Java는 Java ME가 아니라 Java SE입니다. 정식 Java SE를 사용하여 .class파일을 생성 하고 난 뒤에 .dex파일로 변환하는 과정을 통해 Java ME는 전혀 사용하지 않고, SUN의 라이센스 정책을 피해 갈 수 있었던 것이었습니다.

 

[Dalvik VM의 특징]

Dalvik VM은 Java VM과는 조금 다른 물건입니다.일단 Dalvik VM은 Dan Bornstein이라는 분이 제작을 했는데, 그 분의 선조들이 살던곳이 Dalvik이라는 곳이라네요.

위키피디아에 보면 Java VM은 Stack-Based Architecture인데에 비해 Dalvik VM은 Register-Based Architecture라고 설명 되어 있는 걸로 봐서 왠지 Dalvik VM이 작은 디바이스 쪽에 좀더 최적화 되었다는 느낌을 줍니다. 실제로 DalvikVM.com에도 Low Memory에 최적화 되었다고 소개가 되고 있습니다.

Dalvik VM의 Constant pool은 32bit 인덱싱만 하도록 변경이 되었다느니, Just-In-Time 컴파일러가 아니라느니 등등의 특징들도 있습니다만,  중요한 부분은 여러개의 VM Instance를 실행 시킬 수 있도록 디자인 되어 있으며,Linux Kernel을 사용하기 때문에 프로세스 독립성을 가지고, Linux의 메모리 관리스레딩을 사용 할 수 있다는 점 입니다.

저작자 표시 비영리 변경 금지
신고

'안드로이드정보 및 자료' 카테고리의 다른 글

Smartass V2 CPUfreq governor  (17) 2011.09.29
SmartAss Governor  (7) 2011.07.17
Dalvik-Cache  (1) 2011.04.05
RAMZSWAP  (15) 2011.03.31
BFQ-v2 IO Scheduler  (1) 2011.03.28
SIO I/O Scheduler ( Simple I/O Scheduler)  (2) 2011.03.28
Trackback 0 Comment 1
  1. nanu 2011.07.24 21:26 신고 address edit & del reply

    감사합니다 잘읽었습니다
    완전히 이해하진 못했지만 대충 이런것이다는걸 알게되었네요^^



티스토리 툴바