자바 기반 쓰레기 회수 메커니즘 상세 설명
메모리 관리
C 언어의 메모리,메모 리 를 신청 한 후 수 동 으로 방출 해 야 합 니 다.방출 을 잊 어 버 리 면 메모리 누 출 이 발생 합 니 다!
자바 언어 에 서 는 메모리 신청 후 GC 에서 메모리 공간 을 방출 합 니 다.수 동 으로 풀 필요 가 없습니다.
GC 는 수 동 으로 방출 되 는 조작 을 대 체 했 지만 한계 가 있 습 니 다.
(1)더미:주요 회수 더미 의 메모리
(2)방법 구역:회수 필요
(3)스 택(로 컬 방법 스 택 과 JVM 가상 컴퓨터 스 택 포함):회수 할 필요 가 없습니다.스 택 의 메모리 가 언제 방출 되 는 지 명확 합 니 다(스 레 드 가 끝나 면 스 택 의 메모리 도 방출 됩 니 다.대응 하 는 특정한 스 택 프레임 소각[특정한 방법 집행 완료]도 해당 하 는 부분 변 수 를 방출 할 수 있 습 니 다)
(4)프로그램 카운터:회수 할 필요 가 없습니다.
GC 메모리 회수 기본 단위:대상
GC 회수 대상 의 기본 사고방식
(1)표기:현재 대상 의 생사 를 판단 하고 대상 이 더 이상 죽음 으로 사용 되 지 않 으 면 회수 해 야 하 며 반대로 회수 할 필요 가 없다.
표시 방법:
단점:반복 참조 문 제 를 해결 할 수 없습니다.
다음은 위조 코드 로 순환 인용 문 제 를 보 여 줍 니 다.
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 라 고도 부른다.
b)로 딩 클래스 의 ClassLoader 도 회수 되 었 습 니 다.
c)이러한 대상 은 코드 에 사용 되 지 않 았 다.
상기 세 가지 조건 을 동시에 갖 추 면 이런 대상 은 회수 할 수 있다 고 생각한다.
회수 방법:
위의 그림 을 통 해 우 리 는 두 개의 빈 공간 이 다른 대상 에 의 해 분리 되 었 다 는 것 을 알 수 있다.비교적 큰 공간 이 필요 하 다 면 신청 에 실패 할 것 이다.
태그-제거 법의 장단 점:
장점:간단 하고 효율 적
단점:메모리 조각 발생
장점:메모리 조각 문 제 를 해결 하여 회수 후 조각 이 존재 하지 않도록 합 니 다.(회수 후 사용 하 는 대상 간 은 연속 적 이 고 남 은 메모리 간 도 연속 적 입 니 다)
단점:별도의 공간 이 필요 하 다.생존 대상 이 많 으 면 비효 율 적 이다.
장점:메모리 조각 문제 도 없고 추가 공간 도 필요 없습니다.
단점:순서 표 와 같은 삭제 작업 으로 효율 이 높 지 않다.
3.분할 회수
대상 의 나이 에 따라 메모리 더 미 를 신세대(에덴 과 생존 지역),옛날 로 나 누 었 다.
대상 의 나 이 는 시간 을 직접 사용 하여 기록 하 는 것 이 아니 라 대상 이 GC 를 살아 서 기록 하 는 것 이다(GC 는 일정한 주기 에 따라 운행 한다).
한 대상 의 일생:
(1)대상 은 신생대 의 에덴 에서 태 어 났 다.새로 생 긴 대상 의 메모 리 는 신세대 의 메모리 이다.
(2)1 차 GC 가 에덴 구역 을 스 캔 하면 대량의 대상 을 회수 할 것 이다.회수 되 지 않 은 소수의 대상 은 표기-복제 알고리즘 을 통 해 생존 지역 에 들어간다
(3)생존 지역 에 들 어간 소수의 대상 이 GC 에 다시 스 캔 된다(이들 대상 에 대한 접근 성 분석).이 대상 이 이미 도달 할 수 없다 는 것 을 발견 하면 소각 된다.삭 제 된 대상 이 없 으 면 다시 태그-복사 알고리즘 을 통 해 다른 생존 지역 으로 복사 합 니 다.
(4)대상 은 두 개의 생존 구역 에서 몇 번 의 복사 본 을 거 쳤 는데 회수 되 지 않 았 다 면 이 대상 들 이 생존 시간 이 비교적 오래 되 었 다 는 것 을 설명 하고 옛날 까지 복사 했다.
(5)옛 시대 의 대상 도 GC 스 캔 을 거 쳐 야 한다.옛날 대상 의 생존 시간 이 비교적 길 었 기 때문이다.따라서 스 캔 주 기 는 신세대 주기 보다 길다.
관련 용어:
쓰레기 수 거기 가 하 는 두 가지 일:태그(접근 성 분석)+회수(태그 제거,태그 복사,태그 정리)
복사 알고리즘 을 사용 하여 단일 스 레 드 로 표시 하고 회수 합 니 다.
복사 알고리즘 을 사용 하여 다 중 스 레 드 를 표시 하고 회수 합 니 다.
사용자 에 게 일정 시간 내 에 GC 를 한 번 완성 하 겠 다 고 약속 한 셈 이다.
다 중 스 레 드 를 사용 하여 태그 정 리 를 완료 하면 효율 이 높 고 CPU 자원 이 더 많이 소 모 됩 니 다.
GCroot 와 관련 된 대상 을 표시 할 뿐 STW 와 관련 이 있 습 니 다.
b)동시 표기
전체 태그 옮 겨 다 니 기 를 실행 하 는 과정(GCroot 부터 접근 할 수 있 는 대상 을 옮 겨 다 니 기)
사용자 스 레 드 를 일시 정지 할 필요 가 없습니다.
소모 하 는 시간 은 상대 적 으로 오래 되 지만 사용자 스 레 드 와 병행 할 수 있 습 니 다.
메모:동시 표 시 를 할 때 사용자 스 레 드 도 실 행 됩 니 다.특정한 대상 을 초래 할 수 있 습 니 다.방금 표 시 했 을 때 쓰레기 가 아니 라 코드 가 실 행 된 후에 쓰레기 가 됩 니 다.
c)다시 표시(CMS remark)[STW]
오 차 를 수정 하 다
d)동시 제거
다 중 스 레 드 방식 은 방금 쓰레기 대상 을 모두 제거 하고 방출 하 며 응용 프로그램 과 동시에 실행 할 수 있 습 니 다.
장점:STW 시간 을 최대한 짧게 할 수 있다.
단점:메모리 조각 이 있 음;GC 작업 과 응용 프로그램 을 병행 하여 진행 하면 CPU 자원 이 많이 소모 된다.
각 사각형 을 하나의 region 이 라 고 합 니 다.
에덴
S 는 생존 구역 을 나타 낸다
옛날
H 는 큰 대상 을 저장 하 는 구역 을 나타 낸다.
region 단위 로 회수 하여 입도 회수 가 더욱 정교 하 다.
신 생 지역 에 대한 region 역시 복제 알고리즘 적용
오래된 시대 에 대한 회수 가 CMS 와 유사 하 다.
a)초기 태그[STW]:GRoot 와 직접 연 결 된 대상 만 찾기
b)동시 태그:응용 프로그램 과 함께 실행 하고 접근 성 분석 을 하여 모든 대상 을 옮 겨 다 닙 니 다.어느 옛날 region 에 생존 대상 이 없 는 것 을 발견 하면 바로 회수 합 니 다.
c)최종 태그:두 번 째 단계 에서 발생 하 는 오 차 를 수정 합 니 다.
d)선별 회수:대상 생존 율 이 낮은 region 을 선택 하여 회수
총화
자바 기반 의 쓰레기 수 거 메커니즘 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 자바 쓰레기 수 거 메커니즘 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.