[Android]JVM, JRE, JDK

2022. 4. 10. 23:44Tech/Mobile(Android, iOS)

    목차

이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.

 

서론

 안드로이드를 처음 접하는 사람들, Java를 처음 접하는 사람들은 JVM, JRE, JDK에 관하여 많이들 헷갈려한다고 합니다. 풀네임을 알면 사실 어려울 게 없지만, 처음부터 풀네임을 유추하는 사람이 몇 명이나 될까요? 오늘은 이 세 가지가 각각 어떤 것인지 알아보려 합니다.


JVM

Java Virtual Machine의 약자. 해석하면 자바 가상 머신입니다 다. 이 녀석은

  1. Java소스 코드로부터 만들어지는 바이너리 파일의 바이너리 코드를 읽고
  2. 바이너리 코드가 정상 작동하는지 검증하고
  3. 검증된 바이너리 코드를 실행해서 프로그램을 구동

위 과정을 통하여, Java 바이너리 코드가 실행될 수 있는 런타임 환경을 제공하는 규격입니다. 이름에서 볼 수 있듯이 실제 기계가 아닌 추상적인 기계인 거죠.
Java 프로그램은 JVM 위에서 바이너리 코드로 작동하기 때문에 OS 관계없이 작동합니다.

 

여담으로 JVM 은 OS별로 따로 존재합니다. 윈도용, 리눅스용, Mac용 등등…

 


JRE

Java Runtime Environment의 약자입니다. 위 설명만 보면 JVM만 있으면 될 거 같지만 실상은 그렇지 않더라고요.
라이브러리 Java를 실행하기 위한 여러 파일들도 존재 할것입니다. JVM과 이러한 라이브러리나 파일들을 통틀어 JRE라 합니다. 즉, Java를 실행시키기 위한 환경인 것이고 JVM은 JRE의 일부라는 것이죠.


JDK

가장 많이 봤던 단어같네요. Java Development Kit의 약자입니다. JRE에 개발에 필요한 도구들을 포함한 것입니다. 기본적으로 Java를 실행해야 하기 때문에 JRE가 기본이 돼야 하고 개발에 필요한 툴 등을 제공해주는 것이라고 생각하면 됩니다.

[그림 1. JDK 구성]


NDK와 JNI

추가로 NDK 와 JNI에 관해서 알아보겠습니다. Native development Kit, Java Native Interface의 약자입니다. 이름에서 보면 알 수 있듯이 Native 코드와 관련된 녀석들입니다.

  • NDK : C/C++로 안드로이드 앱을 개발할 수 있도록 도와주는 도구
  • JNI : Java와 NDK로 만들어진 소스들을 서로 호출하고 호출될 수 있도록 인터페이스를 제공해주는 녀석
    (중간 다리라고 생각하면 쉽겠습니다.)

Java가 성능이 많이 떨어지던 시절 많은 사람이 C/C++로 안드로이드 앱을 개발하기 원했고 이때 나온게 NDK입니다.
지금은 Java와 NDK로 만들었던 녀석들을 연결해서 쓸수까지 있으니… 좋아진 거겠죠?


여담으로 유니티에서 il2 cpp을 스크립트 백엔드로 이용하려면(64bit 아키텍처 빌드 등) 유니티 엔진 버전에 맞는 NDK가 필요합니다.


리소스 출처

[그림 1] : 나만의공간, https://m.blog.naver.com/

 

반응형
LIST