JVM(Java Virtual Machine)
-
물리적 컴퓨터가 아닌 가상의 컴퓨터
-
소스코드(.java)가 컴파일 되어 생성된 바이트코드(.class)를 실행
-
바이트코드는 JVM 위에서 OS와 상관없이 실행 (OS와 독립적)
-
Garbage Collector, Class Loader, Execution Engine, Runtime Data Area 총 4가지로 구성
(이미지 출처 : https://www.javamadesoeasy.com/2017/03/top-30-jvmjava-virtual-machine.html)
1. Runtime Data Area
-
JVM이 프로그램을 수행하기 위해 운영체제(OS)부터 별도로 할당 받은 메모리 공간
-
PC Register, JVM Stack, Native Method Stack, Method Area, Heap 5가지로 나뉜다.
-
Thread 마다 독립적으로 생성
- PC Register
- JVM Stack
- Native Method Stack
-
모든 Thread 공유
- Heap
- Method Area
(Runtime Data Area)
2. Class Loader
- 바이트코드(.class)를 JVM의 Execution Engine이 사용할 수 있도록 Runtime Data Area로 적재하는 역할
- 런타임시 동적으로 바이트코드를 로드한다
3. Execution Engine
-
Class Loader를 통해 JVM 내의 Runtime Data Areas에 배치된 바이트코드를 기계어로 변경하여 실행
-
기계어로 변경하는 방식은 Interpreter, JIT(Just-In-Time) compiler 2가지 존재
4. Garbage Collector (GC)
-
Java Application에서 사용하지 않는 메모리(Heap)를 자동으로 수거하는 기능
-
Heap 영역에 적재된 객체들 중 참조되지 않는 객체들을 탐색 후 제거
-
C의 경우 malloc, free등을 이용해서 메모리를 할당하고, 일일이 그 메모리를 수거해야 했음
-
C++의 경우 객체의 소멸자를 이용(delete 수행)해서 메모리를 일일이 수거해야 했음
-
Java에서는 GC 기술을 사용함에 따라서 개발자로 하여금 메모리 관리로부터 좀 더 자유로워짐
-
Minor GC, Major GC 2가지로 나뉨
적극적인 지적 환영합니다.
'Java' 카테고리의 다른 글
[Java] String = "" / String = new String("") 비교 (0) | 2020.02.15 |
---|---|
[Java] 상속 (1) | 2019.05.05 |
[Java] 추상화 (1) | 2019.05.02 |
[Java] 자바 프로그램 구동 및 실행 과정 (1) | 2019.04.27 |
[Java] 클래스 vs 객체 (4) | 2019.04.22 |