JVM(Java Virtual Machine)
- 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경 제공
- JVM은 자바 클래스 로더(Class Loader)와 자바 실행 엔진(Execution Engine)에 의존
- JVM 자바 클래스 로더
- 클래스를 메모리에 로드하고 실행을 위해 사용할 수 있게 만드는 JVM의 일부
- 클래스 로딩(Class Loading)을 최대한 효율적으로 수행하기 위해 지연 로딩(Lazy-loading)과 캐싱(Caching) 같은 기법을 활용
- JVM 실행 엔진
- 클래스 로더가 클래스를 로딩하는 작업을 마치면, JVM은 각 클래스에 있는 코드를 실행하기 시작
- JVM 실행에 실행 엔진은 필수적이다.
- 파일 시스템 액세스, 네트워크 입출력을 위한 리소스를 관리
- JVM 자바 클래스 로더
- ⚙️ 기능
- Java 프로그램이 어디에서든 실행될 수 있도록 한다.
- 프로그램 메모리를 관리하고 최적화하는 것
- Garbage Collector
- Java 프로그램에서 사용되지 않는 메모리를 지속적으로 찾아내서 제거
- 실행 중인 JVM 내부에서 일어난다.
- 종류
- Serial GC
- GC를 처리하는 스레드가 1개
- CPU 코어가 1개만 있을 때 사용하는 방식
- Mark-Compact collection 알고리즘 사용
- Parallel GC
- GC를 처리하는 스레드가 여러 개
- Serial GC보다 빠르게 객체를 처리
- Parallel GC는 메모리가 충분하고 코어의 개수가 많을 때 사용하면 좋음
- Concurrent Mark Sweep GC(CMS GC)
- stop-the-world 시간이 짧다.
- stop-the-world는 GC를 실행하기 위해 JVM이 어플리케이션 실행을 멈추는 것
- 애플리케이션의 응답 시간이 빨라야 할 때 CMS GC를 사용한다.
- 다른 GC 방식보다 메모리와 CPU를 더 많이 사용
- Compaction 단계가 제공되지 않는다.
- stop-the-world 시간이 짧다.
- G1 GC
- 각 영역을 Region 영역으로 나눈다.
- GC가 일어날 때, 전체 영역(Eden, Survival, Old generation)을 탐색하지 않는다.
- stop-the-world 시간이 짧다.
- Serial GC
- Stack
- 정적으로 할당한 메모리 영역
- 원시 타입의 데이터가 값과 함께 할당, Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당
- Heap
- 동적으로 할당한 메모리 영역
- 모든 Object 타입의 데이터가 할당
- Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당
- 과정
- [Mark] Garbage collector가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹
- [Mark] Reachable Object가 참조하고 있는 객체도 찾아서 마킹
- [Sweep] 마킹되지 않은 객체를 Heap에서 제거
참고 👇
https://www.itworld.co.kr/news/110837
https://www.youtube.com/watch?v=vZRmCbl871I
반응형
'JAVA' 카테고리의 다른 글
enums(열거형) (0) | 2023.05.22 |
---|---|
Thread(쓰레드) (1) | 2023.04.24 |
Abstract class(추상 클래스) (0) | 2023.03.23 |
javax (0) | 2023.03.03 |
generic (0) | 2023.01.25 |