- Garbage Collection (가비지 컬렉션)이란?
프로그램 개발을 하다보면 유효하지 않은 메모리(Garbage)가 발생하게 된다. Java를 이용해 개발하다보면 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해준다.
- JVM
JVM 자바 가상머신의 약자를 따서 줄여부르는 용어이다. 자바 애플리케이션을 클래스 로더를 통해 읽어들여 실행하는것

JVM은 OS로부터 프로그램이 필요로 하는 메모리를 할당받음.
자바 컴파일러 (javac)가 자바 소스코드(.java)를 읽어들여 byte code(.class)로 변환시키고, Class Loader를 통해 class파일들이 JVM으로 로딩 된다
로딩된 class파일들이 Execution enging(실행 엔진)을 통해 해석된다.
해석된 바이트코드는 Runtime Data Areas에 배치되어 수행이 이루어진다.
이러한 과정속에 JVM은 필요에 따라 Thread Synchronization과 GC같은 관리작업을 수행한다.
JVM의 Heap 영역은 설계될때 2가지의 전제로 설계되었다.
- 대부분의 객체는 금방 접근불가능한 상태(Unreachable) 가 된다.
- 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재한다.
객체는 일회성이고, 메모리에 오래 남는 것이 드물다는 것이다. 그렇게 때문에 객체의 생존기간에 따라 물리적인 Heap영역을 나누었는데 이에따라 2가지 영역으로 설계되었다.
1. Young 영역
- 새롭게 생성된 객체가 할당되는 영역
- 이곳의 가비지 컬렉션을 Minor GC라고 부른다.
2. OLD 영역
- Young 영역에서 Reachable 상태를 유지하여 살아남은 객체가 복사되는 영역
- 대부분 Young영역보다 크게 할당되며, 크기가 큰만큼 가비지는 적게 발생한다.
- 이곳의 가비지 컬렉션을 Major GC 라고 부른다
'IT > JAVA' 카테고리의 다른 글
[Java] TDD 작성, JUnit ( 작성중입니다 ) (0) | 2022.03.18 |
---|---|
[Java] 자바의 동시성 (Concurrency) (0) | 2022.03.15 |
프록시환경에서 clientIP 얻기 (0) | 2021.12.17 |
[JAVA] 객체지향프로그래밍(OOP)란? (0) | 2021.07.12 |
[JAVA] 오버로딩과 오버라이딩의 차이 (0) | 2021.07.12 |