자바 기반 쓰레기 회수 메커니즘 상세 설명

GC 의 역할
메모리 관리
C 언어의 메모리,메모 리 를 신청 한 후 수 동 으로 방출 해 야 합 니 다.방출 을 잊 어 버 리 면 메모리 누 출 이 발생 합 니 다!
자바 언어 에 서 는 메모리 신청 후 GC 에서 메모리 공간 을 방출 합 니 다.수 동 으로 풀 필요 가 없습니다.
GC 는 수 동 으로 방출 되 는 조작 을 대 체 했 지만 한계 가 있 습 니 다.
  •  더 많은 자원 을 소모 해 야 합 니 다.
  • 수 동 으로 그렇게 제때에 방출 되 지 않 았 다.
  • STW(Stop The World)는 프로그램의 집행 효율 에 영향 을 줄 수 있다
  • 2.GC 는 주로 어떤 메모 리 를 회수 합 니까?
    (1)더미:주요 회수 더미 의 메모리
    (2)방법 구역:회수 필요
    (3)스 택(로 컬 방법 스 택 과 JVM 가상 컴퓨터 스 택 포함):회수 할 필요 가 없습니다.스 택 의 메모리 가 언제 방출 되 는 지 명확 합 니 다(스 레 드 가 끝나 면 스 택 의 메모리 도 방출 됩 니 다.대응 하 는 특정한 스 택 프레임 소각[특정한 방법 집행 완료]도 해당 하 는 부분 변 수 를 방출 할 수 있 습 니 다)
    (4)프로그램 카운터:회수 할 필요 가 없습니다.
    GC 메모리 회수 기본 단위:대상
    GC 회수 대상 의 기본 사고방식
    (1)표기:현재 대상 의 생사 를 판단 하고 대상 이 더 이상 죽음 으로 사용 되 지 않 으 면 회수 해 야 하 며 반대로 회수 할 필요 가 없다.
    표시 방법:
  • 인용 계수 법
  • 현재 이 대상 이 인용 지향 이 있 는 지 기록 하고,인용 계수 에 1 을 추가 합 니 다.현재 이 대상 의 인용 이 다른 새로운 대상 을 가리 키 면 인용 계수 가 1 을 줄 입 니 다.인용 계수 가 0 일 때,우 리 는 이 대상 이 회수 되 어야 한다 고 생각 합 니 다!
    단점:반복 참조 문 제 를 해결 할 수 없습니다.
    다음은 위조 코드 로 순환 인용 문 제 를 보 여 줍 니 다.
    
    class Test{
    Test t = null;
    }
    Test a = new Test();
    Test b = new Test();
    a.t = b;
    b.t = a;
    a = null;
    b = null;
    우 리 는 상기 코드 에서 대상 a 와 대상 b 를 사용 할 수 없 음 을 발 견 했 습 니 다.그러나 그들의 인용 수 는 1 이 아 닙 니 다.대상 a 를 사용 하려 면 대상 a 의 인용 을 찾 아야 합 니 다.그러나 대상 a 의 인용 은 대상 b 에 있 습 니 다.대상 b 를 사용 하려 면 대상 b 의 인용 을 찾 아야 하지만 대상 b 의 인용 은 대상 a 에 있다.
    在这里插入图片描述
  • 접근 성 분석:
  • 코드 중의 대상 은 일정한 관련 관 계 를 가지 는데 이렇게 복잡 한 관 계 는'방향 도'를 구성 했다.접근 성 분석 은 바로 이 대상 관 계 를 옮 겨 다 니 는'방향 도'이다.만약 어떤 대상 이 옮 겨 다 닐 수 있다 면,그것 은 도달 할 수 있 는(쓰레기 가 아 닌)것 이다.그러면 도달 할 수 없 는(쓰레기 다)것 이다.
    그렇다면 접근 성 분석 은 어디서부터 시작 할 까?
    a)각 스 레 드 의 모든 스 택 프레임 에 대한 부분 변수 표(스 레 드 가 많 고 모든 스 레 드 스 택 프레임 도 많 으 며 모든 스 택 프레임 에 도 많은 변수 가 있 습 니 다).
    b)상수 탱크 에서 인용 한 대상;
    c)방법 영역 에서 정적 변수 참조 대상;
    옮 겨 다 니 는 출발점 이 하나 가 아니 라 여러 개의 출발점 이기 때문에 이 출발점 을 GCroot 라 고도 부른다.
  • 회수 방법 구역 대상 의 규칙:
  • a)이러한 종류의 모든 인 스 턴 스 가 회수 되 었 습 니 다.
    b)로 딩 클래스 의 ClassLoader 도 회수 되 었 습 니 다.
    c)이러한 대상 은 코드 에 사용 되 지 않 았 다.
    상기 세 가지 조건 을 동시에 갖 추 면 이런 대상 은 회수 할 수 있다 고 생각한다.
    회수 방법:
  • 태그-제거[옛날 시대 에 적합]
  • 在这里插入图片描述
    위의 그림 을 통 해 우 리 는 두 개의 빈 공간 이 다른 대상 에 의 해 분리 되 었 다 는 것 을 알 수 있다.비교적 큰 공간 이 필요 하 다 면 신청 에 실패 할 것 이다.
    태그-제거 법의 장단 점:
    장점:간단 하고 효율 적
    단점:메모리 조각 발생
  • 태그-복사[신세대 에 게 적합]
  • 在这里插入图片描述
    장점:메모리 조각 문 제 를 해결 하여 회수 후 조각 이 존재 하지 않도록 합 니 다.(회수 후 사용 하 는 대상 간 은 연속 적 이 고 남 은 메모리 간 도 연속 적 입 니 다)
    단점:별도의 공간 이 필요 하 다.생존 대상 이 많 으 면 비효 율 적 이다.
  • 표기-정리[옛날 시대 에 적합]
  • 在这里插入图片描述
    장점:메모리 조각 문제 도 없고 추가 공간 도 필요 없습니다.
    단점:순서 표 와 같은 삭제 작업 으로 효율 이 높 지 않다.
    3.분할 회수
    대상 의 나이 에 따라 메모리 더 미 를 신세대(에덴 과 생존 지역),옛날 로 나 누 었 다.
    대상 의 나 이 는 시간 을 직접 사용 하여 기록 하 는 것 이 아니 라 대상 이 GC 를 살아 서 기록 하 는 것 이다(GC 는 일정한 주기 에 따라 운행 한다).
    在这里插入图片描述
    한 대상 의 일생:
    (1)대상 은 신생대 의 에덴 에서 태 어 났 다.새로 생 긴 대상 의 메모 리 는 신세대 의 메모리 이다.
    (2)1 차 GC 가 에덴 구역 을 스 캔 하면 대량의 대상 을 회수 할 것 이다.회수 되 지 않 은 소수의 대상 은 표기-복제 알고리즘 을 통 해 생존 지역 에 들어간다
    (3)생존 지역 에 들 어간 소수의 대상 이 GC 에 다시 스 캔 된다(이들 대상 에 대한 접근 성 분석).이 대상 이 이미 도달 할 수 없다 는 것 을 발견 하면 소각 된다.삭 제 된 대상 이 없 으 면 다시 태그-복사 알고리즘 을 통 해 다른 생존 지역 으로 복사 합 니 다.
    (4)대상 은 두 개의 생존 구역 에서 몇 번 의 복사 본 을 거 쳤 는데 회수 되 지 않 았 다 면 이 대상 들 이 생존 시간 이 비교적 오래 되 었 다 는 것 을 설명 하고 옛날 까지 복사 했다.
    (5)옛 시대 의 대상 도 GC 스 캔 을 거 쳐 야 한다.옛날 대상 의 생존 시간 이 비교적 길 었 기 때문이다.따라서 스 캔 주 기 는 신세대 주기 보다 길다.
    관련 용어:
  • Partical GC:일부 메모리 영역 만 진행 하 는 GC
  • Full GC:전체 메모리 영역 에 대해 GC
  • Minor GC:신세대 메모리 의 GC 에 대해 집행 이 빈번 하고 속도 가 빠르다
  • Major GC:옛날 GC 에 대해 그렇게 자주 하지 않 았 습 니 다.속도 가 느 리 고 보통 Minor GC 에서 촉발
  • 쓰레기 수 거기
    在这里插入图片描述
    쓰레기 수 거기 가 하 는 두 가지 일:태그(접근 성 분석)+회수(태그 제거,태그 복사,태그 정리)
  • Serial 수집 기(신세대 에 게 사용,직렬 회수)[STW 존재]
  • 在这里插入图片描述
    복사 알고리즘 을 사용 하여 단일 스 레 드 로 표시 하고 회수 합 니 다.
  • ParNew 수집 기(신세대 수집 기,다 중 스 레 드 GC)
  • 在这里插入图片描述
    복사 알고리즘 을 사용 하여 다 중 스 레 드 를 표시 하고 회수 합 니 다.
  • Parallel scavenge 수집 기(신세대 수집 기,병렬 GC)
  • STW 시간 단축 을 위해 물동량 과 신세대 공간 을 희생 하 는 대가 로 설계 됐다.
    사용자 에 게 일정 시간 내 에 GC 를 한 번 완성 하 겠 다 고 약속 한 셈 이다.
  • 시리 얼 올 드 수집 기(옛날 수집 기,직렬 GC)
  • 在这里插入图片描述
  • Parallel old 수집 기(옛날 수집 기,병렬 GC)
  • 在这里插入图片描述
    다 중 스 레 드 를 사용 하여 태그 정 리 를 완료 하면 효율 이 높 고 CPU 자원 이 더 많이 소 모 됩 니 다.
  • CMS 쓰레기 수 거 기(옛날 수집 기,병렬 GC,다 중 스 레 드 태그 제거 알고리즘 사용)
  • a)초기 태그[STW]
    GCroot 와 관련 된 대상 을 표시 할 뿐 STW 와 관련 이 있 습 니 다.
    b)동시 표기
    전체 태그 옮 겨 다 니 기 를 실행 하 는 과정(GCroot 부터 접근 할 수 있 는 대상 을 옮 겨 다 니 기)
    사용자 스 레 드 를 일시 정지 할 필요 가 없습니다.
    소모 하 는 시간 은 상대 적 으로 오래 되 지만 사용자 스 레 드 와 병행 할 수 있 습 니 다.
    메모:동시 표 시 를 할 때 사용자 스 레 드 도 실 행 됩 니 다.특정한 대상 을 초래 할 수 있 습 니 다.방금 표 시 했 을 때 쓰레기 가 아니 라 코드 가 실 행 된 후에 쓰레기 가 됩 니 다.
    c)다시 표시(CMS remark)[STW]
    오 차 를 수정 하 다
    d)동시 제거
    다 중 스 레 드 방식 은 방금 쓰레기 대상 을 모두 제거 하고 방출 하 며 응용 프로그램 과 동시에 실행 할 수 있 습 니 다.
    장점:STW 시간 을 최대한 짧게 할 수 있다.
    단점:메모리 조각 이 있 음;GC 작업 과 응용 프로그램 을 병행 하여 진행 하면 CPU 자원 이 많이 소모 된다.
  • G1 회수 기(Java 11 기본 사용 시작)
  • 신 생 대 를 회수 할 수도 있 고,옛 시 대 를 회수 할 수도 있다.
    在这里插入图片描述
    각 사각형 을 하나의 region 이 라 고 합 니 다.
    에덴
    S 는 생존 구역 을 나타 낸다
    옛날
    H 는 큰 대상 을 저장 하 는 구역 을 나타 낸다.
    region 단위 로 회수 하여 입도 회수 가 더욱 정교 하 다.
    신 생 지역 에 대한 region 역시 복제 알고리즘 적용
    오래된 시대 에 대한 회수 가 CMS 와 유사 하 다.
    a)초기 태그[STW]:GRoot 와 직접 연 결 된 대상 만 찾기
    b)동시 태그:응용 프로그램 과 함께 실행 하고 접근 성 분석 을 하여 모든 대상 을 옮 겨 다 닙 니 다.어느 옛날 region 에 생존 대상 이 없 는 것 을 발견 하면 바로 회수 합 니 다.
    c)최종 태그:두 번 째 단계 에서 발생 하 는 오 차 를 수정 합 니 다.
    d)선별 회수:대상 생존 율 이 낮은 region 을 선택 하여 회수
    총화
    在这里插入图片描述
    자바 기반 의 쓰레기 수 거 메커니즘 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 자바 쓰레기 수 거 메커니즘 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기