자바 쓰레기 회수 메커니즘
자바 중 어떤 대상 이 쓰레기 입 니까?어떤 사람 은 인용 되 지 않 은 대상 이 쓰레기 대상 이 라 고 말 했다.나 는 처음에 이것 에 대해 믿 었 지만 그 당시 에 내 가 면접 관 에 게 이렇게 대답 할 때 큰 눈 총 을 받 았 다.
한 대상 이 쓰레기 인지 아 닌 지 를 판단 하 는 데 는 두 가지 알고리즘 이 있 는데 하 나 는 인용 계수 법 이지 만 이런 방법 으로 는 순환 인용 문 제 를 해결 할 수 없다.
/** */
public class Demo{
public Demo instance;
public static void main(String[] args) {
Demo a=new Demo();
Demo b=new Demo();
a.instance=b;
b.instance=a;
a=null;
b=null;
}
}
또 다른 방법 은 이러한 순환 인용 문 제 를 해결 할 수 있다.그것 이 바로 접근 알고리즘 이다.접근 알고리즘 에 대해 내 가 현재 알 고 있 는 것 은 두 가지 해석 이 있다.
대중 설:
일련의'GC Roots'라 는 대상 을 시작 으로 이 노드 에서 아래로 검색 하고 지나 간 모든 경 로 를 참조 체인 으로 검색 합 니 다.대상 이 GC Roots 에 인용 체인 목걸이 가 없 을 때 이 대상 을 사용 할 수 없다 는 것 을 증명 합 니 다.
어떤 선배 의 이해:
대상 을 GC Roots 로 선택 하고 다른 대상 으로 이 GC Roots 를 가리 키 도록 합 니 다.만약 에 이 대상 이 최종 적 으로 GC Roots 에 도착 하면 선택 한 대상 이 쓰레기 가 아니 라 는 것 을 나타 냅 니 다.반대로 대상 이 GC Roots 에 도착 하지 못 하면 선택 한 대상 이 쓰레기 대상 이 고 쓰레기 수 거 를 할 수 있 습 니 다.
대상 이 GC Roots 를 가리 키 며 형 성 된 체인 을 GC 체인 이 라 고 합 니 다.
이 두 가지 방법 중 누가 옳 고 그 른 지 에 대해 서 는 개인의 수준 에 달 려 있다.
어쨌든 쓰레기 가 생 겼 으 니 다음은 쓰레기 를 어떻게 회수 해 야 할 지.
쓰레기 를 어떻게 회수 합 니까?
2.1 정적 대상 이 언제 쓰레기 가 되 어 회수 되 는가
쓰레기 수 거 를 하기 전에 먼저 주제 밖의 말 을 하 세 요.제 가 위 에서 말 한 쓰레기 대상 은 사실은 일반적인 대상 을 말 하 는 것 입 니 다.정적 대상 이 좀 다 르 기 때 문 입 니 다.
나 는 정적 방법 은 클래스 의 로드 에 따라 로드 되 고 클래스 가 사라 지면 서 사라 진 다 는 말 을 자주 듣는다.그러나 지금 내 가 보기에 이런 견 해 는 문제 가 있다.
정적 대상 이 쓰레기 로 회수 되 려 면 세 가지 조건 을 만족 시 켜 야 하기 때문이다.
1.이런 대상 은 쓰레기 가 된다
2.이런 종류의 로 더 를 불 러 오 면 쓰레기 가 됩 니 다.
3.이 대상 에 대한 클 라 스 대상 도 쓰레기 가 된다
이 세 가지 조건 을 만족 시 켜 야 정적 대상 이 쓰레기 로 회수 되 고 그렇지 않 으 면 정적 대상 은 영구적 으로 존재 할 것 이다.
2.2 신생대 와 연로 대
쓰레기 수 거 를 말 하려 면 쓰레기 수 거 와 밀접 한 관 계 를 가 진 메모리(신세대 와 노대)부터 살 펴 보 자.
그림 에서 보 듯 이:
메모 리 는 1:2 로 젊 은 세대(신세대)와 늙 은 세대 로 나 뉘 었 다.신 생 대 는 8:1:1 의 비율 에 따라 하나의 eden 구역 과 두 개의 survivor(survivor 0,survivor 1)구역 으로 나 뉜 다.
분 구 에 관 해서 나 는 여기까지 만 이야기 하고 관심 있 는 것 은 스스로 연구 할 수 있다.
3.쓰레기 회수 알고리즘
3.1 태그 제거 알고리즘
그림 에서 보 듯 이 태그 제거 알고리즘 은 두 단계 로 나 뉘 는데 첫 번 째 단 계 는 회수 할 쓰레기 대상 을 표시 하고 두 번 째 단 계 는 표 시 된 쓰레기 대상 을 제거 하 는 것 이다.
마찬가지 로 그림 에서 보 듯 이 태그 제거 알고리즘 은 대량의 메모리 조각 을 만 들 고 효율 이 낮 습 니 다.그래서 이 문 제 를 해결 하기 위해 복사 제거 알고리즘 이 나 타 났 습 니 다.
3.2 복제 제거 알고리즘(젊 은 세대 쓰레기 처리 용)
그림 에서 보 듯 이 복사 제거 알고리즘 이란 쓰레기 수 거 를 할 때 살 아 있 는 대상 을 빈 공간 으로 가지런 하 게 복사 한 다음 에 원래 의 지역 의 쓰레기 를 모두 제거 하 는 것 이다.
복사 제거 알고리즘 의 장점:태그 제거 알고리즘 보다 효율 이 높 고 살 아 있 는 대상 은 정렬 되 어 있 으 며 메모리 조각 이 없습니다.
그러나 이 방법의 단점 도 뚜렷 하 다.바로 공간 을 낭비 하 는 것 이다.1:1 비율 로 공간 을 나 누 면 50%의 공간 이 낭비 된다.그러나 jvm 에서 젊 은 세대 의 공간 은 1:1 로 나 누 는 것 이 아니 라 8:1:1 의 비율 로 하나의 eden 구역 과 두 개의 survor(survor 0,survor 1)구역 으로 나 뉜 다.하나의 Eden 구역,두 개의 Survivor 구역(일반적으로).대부분의 대상 은 Eden 지역 에서 생 성 됩 니 다.회수 할 때 먼저 eden 구역 의 생존 대상 을 하나의 survivor 0 구역 으로 복사 한 다음 에 eden 구역 을 비 웁 니 다.이 survivor 0 구역 도 가득 저장 되 었 을 때 eden 구역 과 survivor 0 구역 의 생존 대상 을 다른 survivor 1 구역 으로 복사 한 다음 에 eden 과 이 survivor 0 구역 을 비 웁 니 다.이때 survivor 0 구역 은 비어 있 고 그 다음 에 survivor 0 구역 과 survivor 1 구역 을 교환 합 니 다.즉,survivor 1 구역 을 비 웁 니 다.이런 과정 을 마 이 너 GC 라 고도 부른다.마 이 너 GC 를 한 번 진행 할 때마다 살아 있 는 대상 의 나 이 는 1 을 더 해 살아 있 는 대상 의 나이 가 15 세가 되면 노대 로 보 내진 다.
물론 전체 survivor 1 구역 이 eden 과 survivor 0 의 생존 대상 을 저장 할 수 없 을 때 도 생존 대상 을 연로 대 에 직접 보관 합 니 다.연로 대도 차 면 Full GC,즉 신세대,노년기 모두 회수 가 촉발 된다.
3.3 태그 정리 알고리즘(연로 대)
살 아 있 는 대상 을 하나씩 순서대로 배열 한 다음 쓰레기 로 변 하 는 대상 을 제거한다.이런 방법 은 파편 을 만 들 지 않 고 메모리 의 낭 비 를 일 으 키 지 않 는 다.그러나 효율 이 높 지 않다.따라서 이런 방법 은 젊 은 세대 에 게 적합 하지 않 고,대상 의 생명력 이 매우 강 한 세대 에 게 적합 하 다.
3.4 분류 알고리즘
분류 알고리즘 이란 메모리 에 따라 서로 다른 쓰레기 회수 방식(위의 1,2,3)으로 쓰레기 수 거 를 하 는 것 이다.
잠시 이 야 기 를 나 누 겠 습 니 다.그 다음 에 GC 정지 와 쓰레기 수집 기 등 이 있 기 때 문 입 니 다.여러분 들 이 더 많은 쓰레기 회수 지식 을 알 고 싶다 면<자바 가상 머 신:JVM 의 고급 특성 과 최고의 실천>>과 같은 책 을 읽 을 수 있 습 니 다.이 책 들 은 제 선배 가 저 에 게 추천 해 준 것 이기 때 문 입 니 다.
자바 쓰레기 수 거 메커니즘 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 쓰레기 수 거 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.