Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

안드로이드 앱은 왜 표준 Java API와 가상 머신을 사용하지 않을까? — Dalvik VM의 이해

표준 Java API와 가상 머신(Java Virtual Machine)은 주로 데스크톱과 서버 환경을 위해 설계되었습니다. 따라서 배터리 용량과 메모리가 제한적인 모바일 기기에는 적합하지 않습니다. 이러한 호환성 문제를 해결하기 위해 구글(Google)은 모바일 기기에 최적화된 별도의 API와 가상 머신을 개발했는데, 바로 달빅 가상 머신(Dalvik Virtual Machine, DVM)입니다.

Dalvik 가상 머신이란?

Dalvik 가상 머신은 안드로이드 런타임(Android Runtime)의 핵심 구성 요소로, 안드로이드를 위해 특별히 개발된 JVM 기반의 가상 머신입니다. 메모리 관리, 멀티스레딩(Multi-threading) 등 자바의 중요한 기능들을 그대로 활용하면서도, 모바일 환경에 맞게 동작 방식을 최적화했습니다.

자바로 작성된 프로그램은 먼저 JVM용 바이트코드(bytecode)로 컴파일된 후, 다시 DVM이 해석할 수 있는 달빅 바이트코드로 변환됩니다.

JVM(Java Virtual Machine)의 동작 원리

JVM은 자바 바이트코드를 실행하기 위한 런타임 환경을 제공하는 응용 프로그램입니다. 바이트코드를 기계어(machine code)로 변환하여 실제 하드웨어에서 실행할 수 있게 만들어 줍니다.

JVM이 수행하는 주요 작업은 다음과 같습니다.

  • 코드 로딩(Code Loading): 클래스 파일을 메모리에 불러옵니다.
  • 코드 검증(Code Verification): 바이트코드의 유효성과 보안성을 검사합니다.
  • 코드 실행(Code Execution): 바이트코드를 기계어로 변환하여 실행합니다.
  • 런타임 환경 제공: 실행에 필요한 메모리 및 시스템 자원을 관리합니다.

Dalvik 가상 머신(DVM)의 동작 원리

Dalvik 가상 머신은 저전력 휴대용 기기, 즉 모바일 기기에 맞게 최적화된 JVM의 한 형태입니다. DVM은 배터리 수명, 메모리 사용량, 전반적인 성능 측면에서 모바일 시스템을 효율적으로 운영하도록 설계되었습니다.

안드로이드용 프로그램은 먼저 자바로 작성된 후 JVM용 바이트코드로 컴파일됩니다. 이후 이 바이트코드는 달빅 바이트코드로 변환되어 .dex(Dalvik Executable) 파일과 .odex(Optimized Dalvik Executable) 파일로 저장됩니다. 변환된 파일은 DVM 위에서 실행되며, 이 과정을 통해 모바일 기기에서도 효율적인 앱 실행이 가능해집니다.

JVM과 DVM의 핵심 차이 요약

  • 설계 목적: JVM은 데스크톱·서버용, DVM은 모바일 기기용으로 최적화
  • 실행 방식: JVM은 스택 기반(Stack-based), DVM은 레지스터 기반(Register-based) 구조
  • 실행 파일: JVM은 .class 파일, DVM은 .dex 파일 사용
  • 리소스 최적화: DVM은 배터리 수명과 메모리 효율을 우선적으로 고려