본문 바로가기
CS/Java

[자바] 자바가상머신(JVM, Java Virtual Machine)

by 테리는당근을좋아해 2020. 6. 29.

자바가상머신(JVM, Java Virtual Machine)

- 운영체제 위에서 동작하는 프로세스로 자바 바이트 코드를 실행할 수 있는 주체

- 자바 코드(.java)를 컴파일해서 얻은 바이트 코드(.class)를 해당 운영체제가 이해할 수 있는 기계어로 번역

- 자바 애플리케이션이 운영체제에 독립적으로 실행될 수 있는 환경 제공

- 운영체제로부터 해당 프로그램이 필요로하는 메모리를 할당받고, 이 메모리를 용도에 따라 여러 영역으로 나누어 관리

 

1) 구조

(1) 클래스 로더(Class Loader)

- 클래스 파일을 엮어서 JVM이 런타임 데이터 영역으로 적재하는 역할

 

(2) 실행 엔진(Execution Engine)

- 클래스 로더에 의해 메모리에 적재된 클래스파일을 기계어로 번역해 실행하는 역할

 

(3) 가비지 컬렉터(GC, Garbage Collector)

- 스레드

- 런타임 데이터 영역에서 힙 영역에 적재된 객체 중에 참조되지 않는 객체들을 탐색 후 제거

- GC가 언제 일어나는지 정확히 알 수 없음

- full GC가 일어나게 되면 GC를 수행하는 스레드를 제외한 나머지 스레드는 작업을 정지

 

(4) 런타임 데이터 영역(Runtime Data Area)

- JVM의 메모리 영역

- 자바 애플리케이션을 실행할 때 사용되는 데이터 적재

- Method Area, Heap Area, Stack Area, PC register, Native Method Stack으로 구성

 

JVM 구조

 

 

자바 메모리 구조(Runtime Data Area)

1) Method Area

- 필드 정보

- 메소드 정보

- 타입 정보

- Constant pool

- static 변수

- final class 변수

- 패키지

 

2) Heap Area

- new 키워드로 생성된 객체와 배열

- Garbage Collection이 일어나는 영역

 

3) Stack Area

- 지역변수, 매개변수, 리턴 값 연산에 사용되는 임시 값등이 적재

 

4) PC register

- 스레드가 생성될 때마다 생성되는 영역

- 현재 스레드가 실행되는 부분의 주소와 명령어

 

5) Native Method Stack

- 자바 외 언어(C/C++)로 작성된 네이티브 코드

 

 

 

'CS > Java' 카테고리의 다른 글

[자바] Static  (0) 2020.06.29
[자바] 데이터타입  (0) 2020.06.29
[자바] Collection Frameworks  (0) 2020.06.29
[자바] 가비지 컬렉션(GC, Garbage Collection)  (0) 2020.06.29
[자바] 객체지향언어(Object Oriented Programming)  (0) 2020.06.29

댓글