자바 Garbage Collection

욱2·2023년 3월 31일
0

Java

목록 보기
8/13

메모리는 막 쓰면 안된다. 계속 넣다보면 무거워지고 느려진다.

개발자들은 하나하나 지우는 작업을 했어야 했고, 이 번거로운 작업을

편하게 하기 위해 Garbage Collection 이라는 자동 메모리 영역 해제 기술을 JVM에 탑재했다고 한다. 힙 ( Heap ) 메모리에서 참조가 더 이상 안되는 객체를 지우며 메모리를 재활용한다.

그렇다고 막 좋은 것만은 아니다. 번거로운 작업은 사라졌지만 Mark and Sweep ( 치우는 작업 ) 으로 인해 Thread 가 멈추는 현상이 생긴다고 한다. 이 단점을 보안하기 위해 GC 는 꾸준히 업데이트 중이라고 합니다.


이미지:https://de.wikipedia.org/wiki/Datei:JavaGCgenerations.png

GC 의 구조는 이렇다.

Young Generation

  • Eden : 처음 객체들이 생성되며 쌓이는 곳 ⇒ 꽉 채워지면 Minor GC 가 실행되면서 참조 되는 객체와 참조 안되는 객체를 나눈다.
  • S0 , S1 : 참조되었던 객체들이 머물면서 나이를 먹는다. 나이를 먹으면서 참조되는지 안되는지 꾸준히 진행된다. 그 중 계속 살아남은 객체들은 0 ⇒ 1 AGE++

Old Generation

  • Tenured : 일정 나이를 먹은 객체 ( 꾸준히 참조되던 객체 ) 들이 채워지면서 Major GC 가 실행된다. 여기서 2차로 나누어진다. Major GC 부분에서 GC Thread를 제외한
  • Permanent : JAVA 8 부터 없어진 부분. ⇒ Metaspace로 교체. 클래스 로더에서 가져온 클래스와 메소드의 Metadata 가 저장된다. ( 사실 아직 이부분은 잘 모르겠다 )
profile
성장하는 날 위한 기록

0개의 댓글