본문 바로가기
기타/자바 초급

JVM이란

by 창이2 2021. 2. 6.

목차

 

  • JVM이란 무엇인가
  • 자바프로그램 실행과정
  • JVM 구성 요소
  • JDK와 JRE의 차이

 

 

1. JVM이란

 JVM은 자바코드를 OS에 의존적이지 않고 실행시키기 위한 프로그램이다. 자바와 OS사이의 중간 역할을 한다. JVM은 다양한 역할을 수행하는데 자바 바이트 코드를 실행시키거나 메모리 관리를 하는 등 많은 역할을 담당하고 있다.

 

2. 자바프로그램 실행과정

 1) 자바 프로그램이 실행되면 JVM은 OS로부터 이 프로그램을 위한 메모리를 할당받는다.

 2) 자바 컴파일러(javac)가 자바 소스코드(.java)를 바이트코드(.class)로 변환한다.

 3) Class Loader를 통해 class파일들을 Runtime Data Area에 로딩한다.

 4) Runtime Data Area에 로딩된 class파일들은 Exccution Engine을 통해 해석된다.

 5) 해석된 바이트코드는 Runtime Data Area에 배치되어 동작한다.

 

 

3. JVM 구성요소

 1) Class Loader(클래스 로더) 

   자바 컴파일러를 통해 생성된 바이트 코드들(.class)을 로드하고 링킹작업을 수행한다. 런타임에 동적으로 클래스를 로드, jar에 있는 클래스들을 JVM(에 있는 Runtime Data Area)에 탑재한다. 자바코드는 컴파일 시점이 아닌 런타임에 해당 클래스를 참조하며 그 역할을 Class Loader가 수행한다.

 

2) Execution Engine

 클래스 로더가 JVM(에 있는 Runtime Data Area)에 로드한 바이트 코드들을 실행시키는 역할을 한다. 이것을 실행시키기 위해 Execution Engine은 2가지 방법을 사용한다.

 

 2-1) Interpreter

      인터프리터는 자바 바이트코드를 명령어 단위로 읽어서 실행한다. 한줄 씩 번역을 수행하기 때문에 느리다

 

 2-2) JIT(Just In Time) 컴파일러 

      인터프리터 방식의 단점을 보완하기 위해 도입되었다. 일정횟수 이상 사용된 코드들은  캐시에 저장하여 수행속도        에 최적화 작업이 들어갔다.

 

 또한 GC의 역할도  Execution Engine이 하고있다. GC에 대한 포스트는 추후에 작성

 

3) Runtime Data Area

 프로램을 수행하기 위해 할당받은 메모리영역이다. 

 3-1) PC Register

      PC Register는 생성되는 쓰레드별로 존재한다. 다음 명령을 실행할 주소를 가지고 있다.

 

 3-2) Stack

      매개변수나 지역변수 등의 데이터를 저장하는 공간이다. 

 

 3-3) Native Method

      자바가 아닌 C 코드를 수행하기 위해 할당된 공간이다. JNI를 이용해서 C코드를 수행할 수 있다.

 

 3-4) Heap

      동적으로 생성된 객체와 배열이 저장되는 공간이다. 힙에는 String 클래스의 constant pool을 저장하는 String Pool 이 있는데 String str = "abc"로 선언된 정보들이 저장되는 공간이다. 또한 힙은 세 영역으로 나눌 수 있는데 이는 GC 포스팅에서 다루겠다.

 

3-5) Method == Class == Static

     클래스 정보를 메모리에 올릴때 해당 정보들을 저장하기 위한 메모리이다. Runtime Constant Pool이라는 상수자료형을 저장하는 공간이 있다. 이 영역에 올라가는 정보는 Field, Method, Type 정보가 있다. static도 여기에 포함된다.

Field 정보는 멤버 변수의 이름, 데이터 타입, 접근제어자에 대한 정보이다.

Method 정보는 메소드의 이름, 리턴타입, 매개변수, 접근제어자에 대한 정보이다.

Type 정보는 Class 인지 Interface인지, Class의 super type등에 대한 정보이다.

 

 

4. JDK와 JRE

 Jre는 JVM이 자바 프로그램을 동작시킬때 필요한 라이브러리나 파일들을 가지고 있다.

 

 Jdk는 Jre + 컴파일러, 디버거 등을 추가한 Kit이다. Jdk가 Jre를 포함한다고 보면 된다.

'기타 > 자바 초급' 카테고리의 다른 글

SOLID 원칙이란  (0) 2022.07.03
자바에서의 타입  (0) 2021.02.12

댓글