자바가상머신(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으로 구성
자바 메모리 구조(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 |
댓글