GC (Garbage Collection)

I. JVM 메모리 정리기능, Garbage Collection의 개요

가. GC(Garbage Collection)의 정의

  • JAVA 어플리케이션이 사용하지 않는 메모리를 자동으로 수거하는 JVM 메모리 할당 해제 기능

나. 메모리 정리 관련 JAVA와 C 언어의 차이

JAVAC
– JVM의 Garbage Collection 자동 수행
– 자동 메모리 정리 heap영역 확보
– free() 로 수동 해제 필요
– 메모리 미해제 시 누수 발생
  • 최적의 성능을 위해 Full/Minor GC로 나뉘어 수행

 

II. Minor GC와 Full GC의 개념

Minor GCFull GC
New/Young영역에서 발생하며 객체 할당 영역 Full 상태 시 사용되지 않는 객체 제거하는 JVM 메모리 정리 기능Old 영역에서 발생하며 생성 주기가 오래된 객체 제거 후 힙 정렬 수행하는 JVM 메모리 정리 기능
  • JVM에서 Minor/Full GC를 통해 시스템의 메모리 관리

 

III. Garbage Collection 알고리즘 종류

가. Garbage Collection 위한 JAVA 메모리(Heap) 구조

New/Young 영역– Java 객체 생성 시 저장되는 영역
– 생긴지 오래되지 않은 객체가 저장
Old 영역– New/Young 영역에서 저장되었던 객체 중 오래된 객체가 이동되어 저장되는 영역
Perm 영역– Class, Method 같은 Code가 저장되는 영역으로 JVM에 의해 사용

나. Garbage Collection의 주요 알고리즘

구분알고리즘특징
Minor
GC
Copy & Scavenger– 고속, 작은 크기의 메모리를 Collection 하는데 효과적
Parallel GC– Multi Thread를 이용하여 Minor GC를 병렬로 더욱 빠르게 수행
Full
GC
Mark & Compact– 객체의 사용 유무 Mark, 객체 삭제
– 저속, 순간적 APP멈춤 현상 발생하므로 APP의 성능과 안정성에 영향
Concurrent GC– Full GC 수행 시 프리징 현상 최소화
– 일부 GC는 APP가 동작하는 단계에서 수행, 최소한만 APP 정지 후 수행
OtherIncremental GC– Minor GC 시 Full GC영역 조금씩 수행
– Full GC 회수와 시간을 줄이는 방법
G1 Collector– Java 7 G1 메모리 관리자, 멈춤 최소화
– 대용량 메모리, 다중 프로세스 기반
  • APP 형태나 H/W Spec에 따라 충분한 테스트를 거쳐 적합한 GC 알고리즘 선택이 성능 향상 방법

 

IV. Minor GC와 Full GC 상세 절차

가. Minor GC 상세 절차

단계개념도상세 동작
– Eden에서 Alive된 객체를 Survivor1으로 이동
– Eden 영역 Clear
– Eden 영역에 Alive된 객체와 S1 영역에 Alive된 객체를 S2에 Copy
– Eden영역과 S1 Clear
– 객체가 오래되면 Eden과 S 영역의 오래된 객체 Old영역으로 이동
  • Minor GC는 매우 속도가 빠르며 작은 크기의 메모리를 Collecting 하는데 매우 효과적

 

나. Full GC 상세 절차

개념도상세 동작
– Mark & Compact 이용
– Reference가 연결되지 않는 객체 삭제
– 실제로 Mark 객체를 사용하는 객체로 변경
  • Full GC 시 순간 Java APP 프리징 현상으로 성능과 안정성에 매우 큰 영향

 

V. Minor GC와 Full GC의 비교

항목Minor GCFull GC
메모리 영역New/Young 영역 (Eden과 Survivor 영역)Old 영역 발생 객체 삭제 및 힙 정렬
발생 빈도Garbage가 자주 발생하므로 빈도 높음상대적으로 발생 빈도 낮음
알고리즘Copy & Scavenge 알고리즘Mark & Compact 알고리즘
메모리 단편화객체 이동 시 자동 정렬객체 삭제 시 힙 정렬 수행
GC 속도메모리 정리 속도 매우 빠름(0.5초 이내)메모리 정리 속도 매우 느림 (수 초 소요)
영향도빠른 수행으로 APP 영향 없음GC수행 중 APP수행 불가
  • 원활한 서비스를 위해 GC 발생 방법에 따라 시스템의 안정성과 성능에 변수로 작용

 

VI. 최적의 성능을 위한 GC 알고리즘

향상 포인트GC 알고리즘해당 GC
속도 중시Parallel GCMinor GC(4CPU 이상)
응답성 중시Concurrent GCFull GC(4CPU 이상)
응답성 중시Incremental GCFull GC(4CPU 미만)
  • JAVA 튜닝 시 지속적인 테스트를 통해 최적의 parameter와 GC 알고리즘 선택 필요

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^