GC(Garbage Collection) 이란 더이상 사용하지 않는 객체를 메모리에서 삭제하는 작업입니다.GC 의 처리과정을 이해하려면 우선 JVM 메모리 구조에 대해 알 필요가 있습니다.
JVM 의 동작 과정은 아래와 같습니다.
1. Java Compiler 에 의해 .Java 파일은 Byte Code(.class) 파일로 변환됩니다.
2. JVM 의 Class Loader 는 Byte Code(.class) 파일을 JVM 내로 로드하고 Link 작업을 통해 일련의 작업을합니다.
3. 이후 실행 엔진을 통해 Byte Code 들을 명령어 단위로 실행시킵니다.
위 구조로 인해 JVM은 OS와 플랫폼 종류에 의존적이지 않고 독립적으로 Java 프로그램이 실행됩니다. 또한 자동으로 메모리 관리를 해주는데 아래 내용에서 좀 더 자세히 알아보겠습니다.
JVM의 메모리 영역에는 크게 6개의 영역으로 나뉩니다. 각 영역의 특징은 아래와 같습니다.
1. Method 영역 : 클래스와 인터페이스, Static 변수, 메서드 바이트 코드를 보관
2. Runtime Constant Pool : 클래스와 인터페이스 상수, 메서드와 필드에 대한 모든 레퍼런스 저장
3. Heap 영역 : 런타임 시 동적으로 할당하여 사용하는 메모리 영역, New 연산자를 통해 생성한 객체, 또는 인스턴스
4. Stack 영역 : 지역변수, 연산 중 발생하는 임시 데이터 저장
5. PC Register : 현재 실행 중인 JVM 주소를 저장
6. Native Method Stack 영역 : Java 외 언어로 작성된 네이티브 코드를 위한 메모리
이 중 JVM 의 GC 가 관리하는 부분은 Heap 영역으로 좀 더 자세하게 영역을 구분하자면
1. Young Generation : 객체가 생생될 때 즉시 저장되며, 기간이 지나고 우선순위가 낮아지면 점차 이동하여 Old 세대로 이동하게 됩니다. 이 영역에서 객체가 사라질 땐 Minor GC 가 수행이 됩니다.
2. Old Generation : Young 세대 영역에 있는 객체가 오래되서 저장되는 공간으로 이 영역에서 객체가 사라질 땐 Major GC 가 수행이 됩니다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 디자인 패턴 종류 (0) | 2024.05.20 |
---|---|
[Java] 이분탐색 예제 (0) | 2024.05.13 |
[Java] 객체지향(OOP) 설계와 특징 (0) | 2024.01.15 |
[Java] Enum 활용 (0) | 2023.07.14 |
[Java] Stream 사용법 (0) | 2023.07.07 |