내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 포스팅입니다. 

이번 글은 JVM 의 동작 방식을 알아보기 이전에 JDK, JRE, JVM 의 개념을 정리해보겠습니다.

 


 

JDK(Java Development Kit)

Java 프로그램 개발에 사용되는 소프트웨어 개발 환경 키트다. 

JRE, 인터프리터/로더, 컴파일러(javac), 아카이버(jar) 등 Java 개발에 필요한 기타 도구가 포함된다.

 

 

JRE(Java Runtime Environment) 

개발할 수 없는, 실행만을 위한 환경이다.

Java HotSpot 클라이언트 및 서버 가상 머신을 포함한 JVM 과 각종 라이브러리 등으로 구성된다.

 

 

JVM(Java Virtual Machine) 

보통 자바 프로그램이 수행되는 프로세스를 의미한다.

java 명령어로 애플리케이션을 실행하면, JVM 위에서 애플리케이션이 동작한다.

 

JDK(JVM 를 포함한) 는 Oracle 에서만 만드는 것이 아니다.

각 Java 버전에서 제공되어야 하는 표준 문서가 만들어지면 그 기준에 따라 각 벤더(Oracle, IBM 등)의 OS에 맞는 JDK 가 별도로 만들어진다. 하지만 어떤 OS 에서 개발하든지 JDK 의 버전만 맞으면 애플리케이션 실행에 문제가 없다.

 

애플리케이션을 수행할 때마다(Runtime에) JVM 의 인스턴스가 생성되고 그 JVM 위에서 프로그램을 실행하는 일련의 작업이 진행된다.

일련의 작업이란 다음과 같다.

 

  1. test.java 를 javac.exe 를 통해 컴파일하여 test.class 를 생성하면 어떤 OS 에서도 수행될 수 있는 바이트 코드 파일이 생성된다.
  2. 클래스 로더를 통해 JVM 으로 로딩하여 Byte code verifier 에서 바이트 코드를 검증한다.
  3. test.class 는 컴퓨터가 읽을 수 없는(기계어가 아닌) 바이트 코드이므로 바이너리 코드로 변환한다.
  4. 프로그램이 실행된다.

프로그램을 실행하면서 메모리 관리는 개발자가 하지 않아도 된다.

자바에서는 메모리 관리를 JVM 내의 GC(Garbage Collector) 가 담당한다.

 

 

결국, JVM 이란 다음과 같이 정리할 수 있다.

 

  • 자바 프로그램이 수행되는 프로세스
  • 각 벤더에서 각자의 독립적인 알고리즘을 선택하여 정의 된 스펙을 구현한 Runtime Instance
  • 어느 운영체제에서나 자바 프로그램을 실행할 수 있는 환경을 제공
  • GC 를 통해 메모리를 관리

 

 

Description of Java Conceptual Diagram

JDK, JRE, JVM 의 개념을 그림으로 표현하면 다음과 같다.

 

Description of Java Conceptual Diagram, https://docs.oracle.com/javase/8/docs/

 

 

마치며

JVM 을 알아보기 이전에 JDK, JRE, JVM 에 대해 알아보았습니다.

다음 포스팅에서는 JVM 의 ClassLoader 를 다루도록 하겠습니다.

복사했습니다!