Language/Java

[JAVA] Gabage Collection (2)🗑️

검은 까마귀 2024. 4. 9. 13:38

 

2022.01.14 - [Language/Java] - [JAVA] Gabage Collection (1)🗑️

 

[JAVA] Gabage Collection (1)🗑️

# 개요 Gabage Collection, GC란?? CS를 공부할때 한번쯤 언어적으로 접근할 필요가 있다고 생각한다. Gabage(쓰레기) Collector(수집가)라는 말의 뜻을 갖고 있다. 그러면 컴퓨터, 즉, 프로세스가 구동중에 Ga

blaj2938.tistory.com

 

이전 포스팅에서는 GC가 어떻게 사용하지 않는 메모리를 판별하는 참조 방식과 청소 방식에 대해서 알아보았다.

 

그렇다면 이 방식과 방식을 JVM Heap영역에 대입해서 동작하도록 해야한다.

 

# heap 메모리의 구조 & GC 종류

JVM의 Heap 메모리 영역은 애초에 설계될때 2가지 전제로 설계되었다. 

  1. 대부분의 객체는 빨리 Unreachable된다.
  2. 오래된 객체에서 새로운 객체의 참조는 아주 적게 존재한다.

즉, 이 두가지 전제가 관통하는 바는 객체는 일회성이며, 메모리에 오랫동안 남아있는 경우가 드물다 는 전제로 설계가 되었다는 것이다.

 

이러한 특성으로 Heap영역에서 2가지 영역으로 세분화 하였다.

 

  • young Generation
    • 새롭게 생성된 객체가 할당되는 영역
    • 대부분의 객체가 금방 unreachable 되기 때문에, 대게 youg영역에서 생성되었다가 사라진다.
    • Minor GC가 이루어진다.
  • old Generation
    • young영역에서 Reachable상태를 유지하여 살아남은 객체가 복사되는 영역
    • young영역보다 크며 GC가 적제 발생
    • Major GC 발생

Young영역을 효율적으로 관리하기 위해 세분화 한다.

  • Eden: 가득 차면 MinorGC가 발생
  • Survival0: Survival1과 스왑하면서 reachable 객체 저장
  • Survival1: : Survival0과 스왑하면서 reachable 객체 저장
  • age: survival 영역에서 살아남는다면 +1씩 증가
    임계치 도달시(거의 6bit이기 때문에 31) old영역으로 이동 ➡️ Promotion

OldGen영역이 꽉차면 Major GC가 발생한다.  Major GC는 Eden영역보다 훨씬 커서 오래 걸리게 된다. 그게 우리가 처음에 말한 STW이다.

 

# JVM의 GC 알고리즘 및 종류

자바는 매니지드언어로써 JVM에서 메모리를 자동으로 관리해준다.

저번 포스팅에서 이야기한 것처럼 개발자가 개발에 집중을 할 수 있도록 지원해준다.

 

  • Serial Garbage Collector
    • 디바이스 성능이 안좋은 경우
  • Parallel Garbage Collector
    • Java 8의 default GC
    • MinorGC 멀티스레드 실행
  • G1 Garbage Collector
    • Java 9+의 default GC
    • 기존의 메모리 영역 분리가 아닌 Region으로 새롭게 설정하여 동적으로 역할을 부여
  • Z Garbage Collector
    • Java 15에 default GC
    • Zpage라는 영역을 사용
    • STW가 10ms가 넘지 않음

https://www.baeldung.com/jvm-garbage-collectors

 

공식문서에 따르면 위 4가지를 지원하게 된다.


 

반응형

'Language > Java' 카테고리의 다른 글

[JAVA] Error VS. Exception  (0) 2024.04.09
[JAVA] 컴파일 과정  (0) 2024.04.09
[JAVA] Gabage Collection (1)🗑️  (1) 2024.04.09
[JAVA] 상속 👨‍👩‍👧‍👦  (2) 2023.09.12
[JAVA] JVM 메모리 구조  (0) 2023.09.12