[F-Lab 챌린지 55일차 TIL]

성수데브리·2023년 8월 21일
0

f-lab_java

목록 보기
45/73

Real My SQL 4장에 등장한 CS 용어 정리

교착상태?

두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태

교착 상태가 발생할 수 있는 조건

  1. 상호 배제

  2. 점유와 대기

  3. 비선점

  4. 원형 대기

    프로세스들이 원의 형태로 자원을 대기하는 것

교착 상태 해결 방법

  1. 예방

    교착 상태의 발생 조건 중 하나를 충족하지 못하게 하는 방법

  2. 회피

    교착 상태가 발생하지 않을 정도로만 자원을 할당하는 방식

  3. 검출 후 회복

    교착 상태 발생을 인정하고 사후에 조치하는 방식이다.

    1. 선점을 통한 회복
    2. 프로세스 강제 종료를 통한 회복

객체를 런타임에 표현하는 방법

  • 런타임에 oop 라는 구조체로 자바 객체를 나타낸다.
  • 참조형 변수 안에 위치
  • 스택 프레임으로부터 힙 영역 내부를 가리킨다.
  • instanceOop
    • oop를 구성하는 여러 자료구조 중 하나
    • 자바 클래스의 인스턴스를 나타낸다.
    • 메모리 레이아웃
      • header ( Mark 워드 + Klass 워드 ) Mark 워드 : 인스턴스 관련 메타데이터 가리키는 포인터 Klass 워드 : 클래스 메타데이터를 가리키는 포인터

삼색 마킹(tri-color making) 알고리즘

작동 원리

  1. GC 루트를 흰색 표시한다.
  2. 다른 객체는 모두 흰색 표시한다.
  3. 마킹 스레드가 회색 노드로 랜덤하게 이동한다.
  4. 이동한 노드를 검은색 표시하고 이 노드가 기리키는 모든 흰색 노드를 회색 표시한다.
  5. 회색 노드가 하나도 남지 않을 때까지 위 과정을 되풀이한다.
  6. 검은색 객체는 모두 접근 가능(reachable)한 것이므로 살아남는다.
  7. 흰색 노드는 더 이상 접근 불가한 객체이므로 수집 대상이 된다.

Concurrent Mark Sweep

  • 동시 수집은 SATB (snapshot at the beginning) 일단 스냅샷 뜨기 라는 기법을 적극 활용한다.
    • 수집 사이클을 시작할 때 접근 가능하거나
    • 그 이후에 할당된 객체를 라이브 객체로 간주하는 것
  • 단점
    • 변경자 스레드가 수집을 하는 도중에 검은색 상태, 수집을 안 하는 동안에는 흰색 상태로 객체를 생성할 수 있다.
    • 변경자 스레드가 변경한 것 대문에 라이브 객체가 수집되는 현상을 방지하려면 몇가지 로직이 더 추가돼야 한다.

G1 힙 레이아웃 및 영역

  • G1 힙은 region 으로 구성된다.
  • 에덴, 서바이버 영역으로 이루어진 영 세대 개념은 같지만, 세대를 구성하는 영역이 연속되어 있지 않다는 차이점이 있다.
  • G1 수집기가 하는 일
    1. 동시 마킹 단계를 이용
    2. 방출 수집기다
    3. 통계적으로 압착한다.

Collector 종류

  1. serial collector

    싱글 스레드에서 동작하는 GC

  2. concurrent collector

    어플리케이션 스레드와 GC 스레드가 동시에 동작한다.

    STW 는 mark/re-mark 시에만 발생한다.

  3. parallel collector

    멀티 CPU를 사용해 mark/sweep 을 수행한다.

    Old 영역에서 GC 를 병렬로 처리한다.

언제 무엇을?

  1. CMS
    1. 메모리가 많을 때
    2. CPU 가 많을 때
    3. 응답 시간이 짧아야 할 때
  2. 병렬 수집기
    1. 메모리가 적을 때
    2. CPU 수가 적을 때
    3. STW 시간을 어느 정도 허용하면서 높은 처리량이 필요한 App일 때

GC 장점 & 단점

장점

  1. 메모리 누수 방지
    개발자의 실수로 인해 메모리 할당 해제를 누락하는 경우나, 메모리 관리를 잘하지 못하는 상황으로 인한 메모리 누수를 방지해준다.
  2. 해제된 메모리에 접근 방지
  3. 해제한 메모리 또 해제 방지

단점

  1. stop the world : GC 작업은 순수 오버헤드
  2. 개발자는 언제 GC 가 메모리를 해제하는지 모름

GC 의 원칙

  1. GC 알고리즘은 모든 가비지는 반드시 회수해야 한다.
  2. 살아있는 객체를 회수해서는 안된다.

GC 용어

  1. allocated list, 할당 리스트 : 할당했지만, 아직 회수되지 않은 객체를 가리키는 포인터를 저장하는 리스트
  2. free list, 프리 리스트 : 동적 메모리 할당을 위해서 계획적으로 사용된 자료 구조로,
    메모리의 할당되지 않은 영역들을 연결 리스트로 연결해서 운용한다.
  3. STW : GC 사이클이 발생하여 가비지를 수집하는 동안에는 모든 어플리케이션 스레드가 중단된다.
    STW 하는 이유 : GC 수행동안 어플리케이션 코드가 힙 상태를 변경하면 안되기 때문에?
  4. 동시 : GC 스레드는 어플리케이션 스레드와 동시 실행될 수 있다. CMS 사실상 준 동시 수집기(mostly concurrent)
  5. 병렬 : 여러 스레드를 동원해서 가비지 수집을 한다.
  6. 정확 : 정확한 GC 스킴은 전체 가비지를 한방에 수집할 수 있게 힙 상태에 관한 충분한 타입 정보를 지니고 있다.
  7. compaction : 살아남은 객체는 GC 사이클 마지막에 연속된 단일 영역으로 배열된다. 메모리 단편화를 방지한다.
  8. 방출 : 수집 사이클 마지막에 할당된 영역을 완전히 비우고 살아남은 객체는 모두 다른 메모리 영역으로 이동한다.

0개의 댓글