내가 보려는 기술면접(Java GC)

gotcha!!·2023년 8월 2일
0

CS

목록 보기
22/41

GC

자바에서의 자료형은 기본 자료형과 참조 자료형이 있는데, 스택 메모리만을 사용하는 기본 자료형은 작업이 모두 끝난 후, 스코프가 끝날때 함께 소멸되지만, 힙 메모리에 실제 값이 저장된 참조 자료형의 경우, 소멸 작업이 추가적으로 필요하다.

이때 힙 메모리에서 사용하지 않는 메모리에 대한 자원 할당 해제를 수행하는 것이 GC이다.

GC를 위해서는 모든 객체를 탐색하고, 사용 중인지 확인한 다음, 사용하지 않는 객체들에 대해 메모리 할당을 해제하고, 추가적인 작업을 수행한다.

하지만 모든 객체를 탐색하는 것부터 너무 비효율적이다.

따라서 가장 간단한 형태의 알고리즘은 접근 가능한 객체에 대해 순회하고, 남은 객체를 모두 할당해제하는 것이다.

  • 하지만 이 또한 살아있는 객체의 수에 탐색 시간이 비례하므로, 비효율적이다.

따라서 객체 대부분이 아주 짧은 시간동안만 살아남는다는 약한 세대 가설에 기반한 새로운 알고리즘이 등장한다.

  • JVM의 메모리를 여러 개의 세대로 나눈 구조로 본다.
    • Young, Old, Permanent(Method area: 메타데이터 존재)
  • 객체들은 Young에서 할당되고, 약한 세대 가설에 의해 대부분 여기서 죽는다.
  • 따라서 young 세대가 가득차게 되면, 이때 Minor Collection이 발생하고 이는 해당 세대에 대해서만 발생한다.
  • 여기서 살아남은 객체들은 다음 세대로 이동하고, 다음 세대가 가득차게 되면, 컬렉션의 대상이 된다.
    • 이때는 Heap 전체를 수집하는 Major Collection이 발생한다.
    • 이는 Minor보다 더 오래 걸리고, 실행 중인 프로세스가 정지된다. ⇒ Stop-the-world
profile
ha lee :)

0개의 댓글

Powered by GraphCDN, the GraphQL CDN