JVM 의 구조

인프런 백기선님의 강의 <더 자바, 코드를 조작하는 다양한 방법> 을 수강하면서 공부한 내용을 정리합니다.

1. Class Loader

.class 로 컴파일된 자바 바이트 코드는 메모리에 저장된다.

1-1. Loading

로딩이 시작되면 저장된 클래스 파일을 메모리로부터 읽는다.

1-2. Linking

링킹이 시작되면 클래스 파일 내 객체, 레퍼런스 간 연결을 수행한다.

1-3. Initialization

초기화 과정에서는 모든 static 값들을 초기화하고, 변수에 할당한다.

2. Memory

1-1. method

  • 메모리 영역에는 클래스, 부모클래스, 메소드, 변수 등이 저장된다.

  • 프로그램 내 어디에서든지 참조할 수 있는 공유자원이다.

1-2. heap

  • 힙 영역에는 객체가 저장된다.

  • 역시 프로그램 내 어디서든 참조할 수 있는 공유 자원이다.

1-3. stack

  • 쓰레드가 시작되면 런타임 스택이 생성된다.

  • 이제 메소드가 호출될 때마다 런타임 스택에 스택 프레임 블럭이 쌓이게 된다.

  • 쓰레드가 끝나면 런타임 스택도 비워지게 된다.

1-4. program counter register

  • 쓰레드 별로 수행할 명령어의 위치를 가리키는 포인터이다.

1-5. native method stack

  • 네이티브 메소드를 호출할 때 쌓이는 스택이다.

  • 역시 쓰레드 단위로 생성되며, 쓰레드가 끝나면 사라진다.

3. 실행 엔진, execution engine

3-1. interpreter

  • 바이트 코드를 한줄씩 읽는다.

3-2. JIT compiler (Just In Time)

  • 인터프리터가 바이트 코드를 읽을 때, 반복되는 구절이 있다면 전부 네이티브 코드로 변환해버린다.

  • 이후 인터프리터가 반복되는 코드를 읽는다면, 그냥 네이티브 코드 자체르 실행하기만 하면 된다.

  • 효율이 증가한다.

3-3. GC (Garbage Collecttion)

  • 더이상 참조되지 않는 객체를 모아서 정리하는 역할을 한다.

4. JNI, Native method interface

  • 자바 프로그램에서 C, C++, assembly 언어로 작성된 네이티브 메소드를 실행할 수 있도록 해준다.

  • 메소드에 native 키워드가 붙은 메소드들을 말한다.

5. Native method library

  • C, C++로 작성된 라이브러리를 말한다.

6. 참고

Last updated