달빅 (소프트웨어)
Dalvik (software)원본 작성자 | 댄 본스타인 |
---|---|
저장소 | |
운영체제 | 리눅스 커널 |
플랫폼 | 안드로이드 |
후계자 | 안드로이드 런타임 |
유형 | 가상머신 |
면허증. | 아파치 라이선스 2.0 |
웹사이트 | source |
Dalvik은 Android 운영 체제에서 중단된 VM(Process Virtual Machine)으로, Android용으로 작성된 애플리케이션을 실행합니다.[1] (Dalvik 바이트코드 형식은 배포 형식으로 여전히 사용되지만 최신 Android 버전에서는 런타임에 사용되지 않습니다.)Dalvik은 안드로이드 버전 4.4 "KitKat" 이전 버전에서 안드로이드 소프트웨어 스택의 필수 요소였으며, 이는 휴대 전화와 태블릿 컴퓨터와 같은 모바일 장치 및 스마트 TV와 웨어러블과 같은 일부 장치에서 일반적으로 사용되었습니다.달빅(Dalvik)은 오픈 소스 소프트웨어로, 댄 본스타인(Dan Bornstein)이 작성하였으며, 아이슬란드의 에이야피외르 ð르(Eyjafjör)에 위치한 달빅(Dalvik)의 어촌 이름을 따서 지었습니다.
Android용 프로그램은 일반적으로 Java로 작성되고 Java Virtual Machine을 위해 바이트코드로 컴파일됩니다. 그러면 Dalvik 바이트코드로 번역되어 저장됩니다..dex
(Dalvik EXECUBLE) 및.odex
(최적화된 Dalvik EXecutable) 파일; odex 및 de-odex 관련 용어는 각각의 바이트코드 변환과 연관됩니다.소형 Dalvik Executable 포맷은 메모리와 프로세서 속도 면에서 제약을 받는 시스템을 위해 설계되었습니다.
달빅의 후속작은 동일한 바이트코드와 .dex 파일(.odex 파일은 아니지만)을 사용하는 안드로이드 런타임(ART)으로, 성능 향상을 목표로 한 후속작입니다.새로운 런타임 환경은 기술 미리보기로 안드로이드 4.4 "킷캣"에 처음으로 포함되었으며 [4][5]이후 버전에서는 달빅을 완전히 대체했습니다. 안드로이드 5.0 "롤리팝"은 ART가 유일하게 포함된 런타임 버전입니다.
건축학

스택 시스템인 Java Virtual Machine과 달리 Dalvik VM은 레지스터 기반 아키텍처를 사용하므로 일반적으로 더 적은 수의 복잡한 가상 시스템 명령이 필요합니다.달빅 프로그램은 안드로이드 API(Application Programming Interface)를 이용해 자바로 작성되고 자바 바이트코드로 컴파일되며 필요에 따라 달빅 명령어로 변환됩니다.
라고 불리는 도구dx
Java .class 파일을 .dex 형식으로 변환하는 데 사용됩니다.여러 클래스가 하나의 .dex 파일에 포함됩니다.여러 클래스 파일에 사용되는 중복 문자열 및 기타 상수는 공간 절약을 위해 .dex 출력에 한 번만 포함됩니다.Java 바이트코드는 Dalvik VM에서 사용하는 대체 명령어 세트로도 변환됩니다.압축되지 않은 .dex 파일은 일반적으로 동일한 .class 파일에서 파생된 압축된 JAR(Java Archive)보다 크기가 몇 % 작습니다.[6]
Dalvik 실행 파일은 모바일 장치에 설치하면 다시 수정될 수 있습니다.추가 최적화를 위해 특정 데이터에서 바이트 순서가 스왑되고 간단한 데이터 구조와 함수 라이브러리가 인라인으로 연결되며 빈 클래스 개체가 단락될 수 있습니다.
낮은 메모리 요구사항에 최적화된 Dalvik은 다른 표준 VM과 차별화되는 몇 가지 특징을 가지고 있습니다.[7]
- 공간을 줄이기 위해 VM을 슬림화했습니다.
- 상수 풀은 인터프리터를 단순화하기 위해 32비트 인덱스만 사용하도록 수정되었습니다.
- 표준 자바 바이트코드는 8비트 스택 명령어를 실행합니다.로컬 변수는 별도의 명령을 사용하여 피연산자 스택에 복사하거나 복사해야 합니다.대신 달빅은 지역 변수에 직접 작동하는 자체 16비트 명령어 집합을 사용합니다.로컬 변수는 일반적으로 4비트 "가상 레지스터" 필드로 선택됩니다.이는 달빅의 명령어 수를 낮추고 통역 속도를 높입니다.
Google에 따르면 Dalvik의 설계를 통해 한 장치가 VM의 여러 인스턴스를 효율적으로 실행할 수 있습니다.[8]
Android 2.2 "Froyo"는 추적 기반 JIT(Just-in-time) 컴파일을 Dalvik에 도입하여 애플리케이션이 실행될 때마다 지속적으로 프로파일링하여 애플리케이션의 실행을 최적화하고 자주 실행되는 바이트 코드의 짧은 세그먼트를 동적으로 네이티브 머신 코드로 컴파일했습니다.Dalvik은 애플리케이션의 나머지 바이트 코드를 해석하지만, "trace"라고 불리는 짧은 바이트 코드 세그먼트의 기본 실행은 상당한 성능 향상을 제공합니다.[9][10][11]
성능

스택 머신과 레지스터 기반 접근 방식의 상대적 장점은 지속적인 논쟁의 대상입니다.[12]
일반적으로 스택 기반 머신은 스택에 데이터를 로드하고 해당 데이터를 조작하기 위해 명령어를 사용해야 하며, 따라서 동일한 고급 코드를 구현하기 위해 레지스터 머신보다 더 많은 명령어가 필요하지만 레지스터 머신의 명령어는 소스 및 대상 레지스터를 인코딩해야 하므로 더 큰 경향이 있습니다.이러한 차이는 적시 컴파일과 유사하게 관련된 다른 요소와 함께 opcode 디스패치 비용이 많이 드는 경향이 있는 VM 인터프리터에게 중요합니다.
그래픽이 아닌 표준 Java 벤치마크를 사용하여 Oracle(Java 기술 소유자)이 2010년 ARMv7 장치에서 수행한 테스트 결과, Java SE의 HotSpot VM이 Android 2.2의 JIT 기반 Dalvik VM(JIT 컴파일러가 포함된 초기 Android 릴리스)보다 2~3배 더 빠른 것으로 나타났습니다.[13]2012년 학술적 벤치마크는 HotSpot과 Dalvik 사이의 인자 3을 동일한 안드로이드 보드에서 확인했으며, Dalvik 코드가 Hotspot보다 작지 않다고 언급했습니다.[14]
또한 2014년[update] 3월 현재 안드로이드 장치에서 수행된 벤치마크는 네이티브 애플리케이션과 동일한 안드로이드 장치의 Dalvik 애플리케이션 사이에서 100배까지 표시됩니다.[15][original research?][improper synthesis?]2009년의 초기 인터프리터를 사용하여 벤치마크를 실행했을 때, 자바 네이티브 인터페이스(JNI)와 네이티브 코드 모두 크기가 증가하는 속도를 보였습니다.[16]
라이선스 및 특허
Dalvik은 Apache License 2.0 조건으로 배포됩니다.[17]일부[who?] 사람들은 Dalvik이 표준 자바 런타임 위에 개발된 것이 아니라 클린룸 구현이라고 말하는데, 이는 표준 에디션 또는 오픈 소스 에디션 자바 런타임에서 저작권 기반 라이센스 제한을 상속하지 않는다는 것을 의미합니다.[18]Oracle과 일부 검토자는 이에 대해 이의를 제기합니다.[19]
2010년 8월 12일, 2009년 4월 썬 마이크로시스템즈를 인수하여 자바에 대한 권리를 소유하고 있는 오라클은 구글을 저작권 및 특허 침해 주장으로 고소했습니다.오라클은 구글이 안드로이드를 개발하면서 오라클의 자바 관련 지적재산권을 알면서도 반복적으로 침해했다고 주장했습니다.[20][21][22]2012년 5월 이 사건 배심원단은 구글이 오라클의 특허를 침해하지 않았다고 평결했고, 심 판사는 구글이 사용한 자바 API의 구조에 저작권이 없다고 판결했습니다.[23][24]당사자들은 복사된 코드 9줄에 대해 법적 손해배상금을 0달러로 합의했습니다.[25][26]
참고 항목
- 안드로이드 런타임
- 안드로이드 소프트웨어 개발
- 애플리케이션 가상화
- 애플리케이션 가상화 소프트웨어 비교
- 자바와 안드로이드 API 비교
- JEB 디컴파일러 – Dalvik(DEX 및 APK) 디컴파일러
- Dalvik Turbo 가상 머신 – 독점적인 Dalvik 구현
참고문헌
- ^ "Debugging ART Garbage Collection". Retrieved 6 October 2015.
The Dalvik runtime is no longer maintained or available [in current versions of Android] and its byte-code format is now used by ART.
- ^ 이름의 출처를 참조하는 저널 항목
- ^ "Google Calling: Inside Android, the gPhone SDK". onlamp.com. Archived from the original on 2017-01-10. Retrieved 2008-02-05.
- ^ Sean Buckley (2013-11-06). "'ART' experiment in Android KitKat improves battery life and speeds up apps". Engadget. Retrieved 2014-07-05.
- ^ Daniel P. (2013-11-07). "Experimental Google ART runtime in Android KitKat can bring twice faster app executions". phonearena.com. Retrieved 2014-07-05.
- ^ Bornstein, Dan (2008-05-29). "Presentation of Dalvik VM Internals" (PDF). p. 22. Archived from the original (PDF) on 2017-04-16. Retrieved 2010-08-16.
- ^ Rose, John (2008-05-31). "with Android and Dalvik at Google I/O". Archived from the original on 2008-06-04. Retrieved 2008-06-08.
- ^ Google (2009-04-13). "What is Android?". Archived from the original on 2009-06-27. Retrieved 2009-04-19.
- ^ Ben Cheng; Bill Buzbee (May 2010). "A JIT Compiler for Android's Dalvik VM" (PDF). android-app-developer.co.uk. pp. 5–14. Archived from the original (PDF) on 2015-11-06. Retrieved March 18, 2015.
- ^ Phil Nickinson (May 26, 2010). "Google Android developer explains more about Dalvik and the JIT in Froyo". androidcentral.com. Archived from the original on 2014-07-14. Retrieved July 8, 2014.
- ^ "Nexus One Is Running Android 2.2 Froyo. How Fast Is It Compared To 2.1? Oh, Only About 450% Faster". 2010-05-13. Retrieved 2010-05-21.
- ^ Shi, Yunhe; Gregg, David; Beatty, Andrew; Ertl, M. Anton (2005-06-11). "Virtual Machine Showdown: Stack Versus Registers" (PDF). Retrieved 2009-12-22.
- ^ Vandette, Bob (2010-11-22). "Java SE Embedded Performance Versus Android 2.2". Oracle Corporation. Archived from the original on 2011-06-28. Retrieved 2011-09-04.
The results show that although Androids new JIT is an improvement over its interpreter only implementation, Android is still lagging behind the performance of our Hotspot enabled Java SE Embedded. As you can see from the above results, Java SE Embedded can execute Java bytecodes from 2 to 3 times faster than Android 2.2.
- ^ Hyeong-Seok Oh; Beom-Jun Kim; Hyung-Kyu Choi; Soo-Mook Moon (2012). Proceedings of the 10th International Workshop on Java Technologies for Real-time and Embedded Systems - JTRES '12. Association for Computing Machinery. p. 115. doi:10.1145/2388936.2388956. ISBN 9781450316880. S2CID 36316611.
In the JITC mode, however, Dakvik is slower than HotSpot by more than 2.9 times and its generated code size is not smaller than HotSpot's due to its worse code quality and trace-chaining code.
- ^ "Top AndEBench Scores". www.eembc.org. Retrieved 2014-03-23.
- ^ Batyuk, Leonid; Schmidt, Aubrey-Derrick; Schmidt, Hans-Gunther; Camtepe, Ahmet; Albayrak, Sahin (2009-04-29). "Developing and Benchmarking Native Linux Applications on Android". MobileWireless Middleware, Operating Systems, and Applications. Lecture Notes of the Institute for Computer Sciences, Social Informatics and Telecommunications Engineering. Vol. 7. pp. 381–392. Bibcode:2009mmos.book..381B. doi:10.1007/978-3-642-01802-2_28. ISBN 978-3-642-01801-5. S2CID 12131309.
The results show that native C applications can be up to 30 times as fast as an identical algorithm running in Dalvik VM. Java applications can become a speed-up of up to 10 times if utilizing JNI.
- ^ "Downloading the Source Tree - Android Open Source". Android.git.kernel.org. Archived from the original on 2009-04-17. Retrieved 2012-06-07.
- ^ Garling, Caleb. "Google and Oracle 'Experts' Clash over Android's Java Mimic". Wired.
- ^ Ed Bott (September 8, 2011). "The real history of Java and Android, as told by Google". ZDNet. Retrieved 2011-11-27.
The definition of a "clean room" implementation is that the engineers writing the code have no direct exposure to the original, copyrighted material, including code, specifications, and other documentation. That's a problem for Google, as I noted in yesterday's post, because there is substantial evidence that the engineers working on the project had direct access to the copyrighted material.
- ^ "Oracle Sues Google Over Java in Android Devices". digitaltrends.com. 2010-08-13. Retrieved 2011-08-08.
- ^ James Niccolai (2010-08-12). "Oracle sues Google over Java use in Android". Computerworld. Retrieved 2010-08-13.
- ^ Mark Hachman (2010-08-13). "Oracle Sues Google Over Android Java Use". PC Magazine. Ziff Davis.
- ^ Josh Lowensohn (May 23, 2012). "Jury clears Google of infringing on Oracle's patents". ZDNet. Retrieved 2012-05-25.
- ^ Joe Mullin (May 31, 2012). "Google wins crucial API ruling, Oracle's case decimated". Ars Technica. Retrieved 2012-06-01.
- ^ Niccolai, James (June 20, 2012). "Oracle agrees to 'zero' damages in Google lawsuit, eyes appeal". Retrieved 2012-06-23.
- ^ Adam Outler (May 16, 2012). "Update on the Oracle Versus Google Trial". Archived from the original on 2013-05-16. Retrieved 2013-01-18.
A major portion of the Oracle's claims are based on 9 lines of code contained within Java.Util.Arrays.rangeCheck(). Here is the code in question:...
외부 링크
- Dalvik 바이트코드 – 명령어 세트의 공식 안드로이드 문서
- 덱스 실행 파일 형식 – Android 공식 문서
- Ben Cheng과 Bill Buzbee가 만든 Android의 Dalvik VM을 위한 YouTube, Google I/O 2010 JIT 컴파일러
- Dalvik VM 내부 자료 Dan Bornstein에 의해 Wayback Machine, Google I/O 2008에서 2010-03-01 보관
- 8억 달러에 대한 질문:상표와 저작권의 차이점은 무엇입니까?