→ 가비지 컬렉터(GC)
애플리케이션의 동적 메모리 할당 요청을 자동으로 관리한다.
- 운영 체제에서 메모리를 할당하고 반환.
- 애플리케이션이 요청할 때 해당 메모리를 애플리케이션에 전달.
- 응용 프로그램에서 아직 사용 중인 메모리 부분을 확인.
- 애플리케이션에서 재사용할 수 있도록 사용하지 않은 메모리를 회수.
JAVA는 프로그램 코드에서 메모리를 지정하거나 해제하지 않는다.
객체를 Null로 지정하는 것은 상관없지만,
System.gc()메서드를 호출하는 것은 시스템의 성능에 매우 큰 영향을 끼친다.
* System.gc() 메서드는 가비지를 탐색 및 정리하는 작업이고 상당히 무거운 작업이다.
공식 문서에 따르면 대부분의 VM 종료시까지 유지되는 초기화 시 할당된 객체 외에는 위의 그림과 같은 그래프에 해당한다고 한다.
대부분의 객체는 금방 접근 불가능한 상태가 된다.
→ Young Generation 영역 :
* 많은 객체는 Young ( Eden ) 영역에 생성되었다 사라지며, 사라질 때에는 Minor GC가 발생한다.
→ Old Generation 영역 :
* Young 영역에서 살아남은 객체는 이 영역으로 복사된다. 크기가 크고, 큰만큼 GC는 적게 발생한다.
Old Generation 영역에서 객체가 사라지는 것은 Major GC가 발생한다.
GC 로그를 확인해보았다.
호출 예시 :

$ java -verbose:gc -Xlog:gc* .\GarbageCollectionLog.java

Using G1 방식을 사용했음을 알 수 있다.
위의 Old / Young 영역을 사용하는 것과 달리 G1에서는 이러한 영역을 사용하지 않는다.
java 6 부터 G1 방식이 도입되었고, java 9 부터는 default GC로 채택 되었다.
따라서 현재 대부분의 실무 자바 어플리케이션은 G1 방식을 쓴다.
G1GC 는 multi process 시스템을 위해 만들어졌고 STW의 최소화를 충족 시키는 것이 목표라고 한다.
→ Heap을 Region이라는 일정 부분으로 나누며 전체 Heap 탐색이 아닌 Region 단위로 탐색하며,
각각의 Region에 GC이 작동한다.
STW (Stop the world)
- 가비지 컬렉터를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것.
- STW가 발생하면, 가비지 컬렉터를 실행하는 쓰레드를 제외하고 나머지 쓰레드는 모두 작업이 중단된다.
- GC 동작 이후에, 다시 기존 작업을 시작한다.
🤖 Young / Old 를 명확하게 구분짓지 않는다. Heap Area 를 일정 크기의 region으로 구분한다.
G1 방식은 바둑판 같은 각 영역에 객체를 할당하고 GC를 실행하며,
해당 영역이 꽉 차면 다른 영역에 객체를 할당하고 GC를 실행한다.
Young의 영역에서 데이터가 Old 영역으로 이동하는 단계가 사라진 방식이다.
다음은 java 버전 별 기본 GC 이다.
Java 8 : ParallelGC ( Young 영역의 GC를 멀티 스레드 방식으로 쓴다. )
Java 9 : G1GC
Java 11 : G1GC
~
Java 15 : ZGC ( Production Ready ) -- 메모리가 클 수록 유리한 방식이다.
출처 : https://d2.naver.com/helloworld/1329
출처: https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html
Getting Started with the G1 Garbage Collector
Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill
www.oracle.com
HotSpot Virtual Machine Garbage Collection Tuning Guide
One strength of the Java SE platform is that it shields the developer from the complexity of memory allocation and garbage collection.
docs.oracle.com
출처
HotSpot Virtual Machine Garbage Collection Tuning Guide
docs.oracle.com
'JAVA' 카테고리의 다른 글
[JAVA] JSP와 서버사이드렌더링(SSR) (0) | 2023.04.19 |
---|---|
[Java] TDD와 예제와 연습 , querydsl 슬라이싱 테스트 설정 (0) | 2023.02.25 |
java directory copy / progress bar (0) | 2022.06.11 |
springboot / querydsl 설정 (0) | 2022.05.31 |
jwt 토큰 인증 + Interceptor 검증. (0) | 2022.05.22 |