JVM 은 대상 이 이미 죽 었 는 지 어떻게 판단 합 니까?

2320 단어
Java            ,         ,             。  JVM                      ?            。

인용 계수
대상 에 게 인용 계수 기 를 추가 합 니 다. 한 곳 에서 인용 할 때마다 카운터 값 은 1 을 추가 합 니 다.인용 이 실 효 될 때 계수기 값 이 1 감소 합 니 다.언제든지 카운터 가 0 인 대상 은 다시 사용 할 수 없다.
주류 JVM 에 서 는 인용 계수 알고리즘 을 사용 하여 메모 리 를 관리 하지 않 았 는데 그 중에서 가장 중요 한 이 유 는 대상 간 의 상호 순환 인용 문 제 를 해결 하기 어렵 기 때문이다.2. 접근 성 분석 알고리즘
일부 열 을 통 해 'GC Roots' 라 고 부 르 는 대상 을 시작 점 으로 하고 이 노드 에서 아래로 검색 하기 시작 하 며 검색 한 경 로 를 인용 체인 이 라 고 합 니 다. 한 대상 이 GC Roots 와 아무런 인용 체인 이 연결 되 지 않 을 때 (GC Roots 에서 이 대상 까지 는 불가능 합 니 다) 이 대상 이 사용 할 수 없다 는 것 을 증명 합 니 다.그래서 그들 은 회수 가능 대상 으로 판정 된다 (예 를 들 어 그림 B 의 대상 은 도달 할 수 없다).
접근 성 분석 알고리즘 에서 한 대상 의 사망 을 진정 으로 선고 하려 면 적어도 두 번 의 표기 과정 을 거 쳐 야 한다.
1. 대상 이 접근 성 분석 을 한 후에 GC Roots 와 연 결 된 인용 체인 이 없 는 것 을 발견 하면 첫 번 째 로 표시 되 고 선별 되 며 선별 조건 은 이 대상 이 finalize () 방법 을 실행 할 필요 가 있 는 지 여부 입 니 다.대상 이 finalize () 방법 을 덮어 쓰 지 않 았 거나 finalize () 방법 이 가상 컴퓨터 에 호출 되 었 을 때 가상 컴퓨터 는 이 두 가지 상황 을 모두 '실행 할 필요 가 없다' 고 여 긴 다.
2. 이 대상 이 finalize () 방법 을 실행 할 필요 가 있다 고 판정 되면 이 대상 은 F - Queue 라 는 대기 열 에 놓 여 있 고 나중에 가상 컴퓨터 에서 자동 으로 만들어 진 낮은 우선 순위 의 Finalizer 스 레 드 로 실 행 됩 니 다.finalize () 방법 은 대상 이 사망 운명 에서 벗 어 날 수 있 는 마지막 기회 입 니 다. 잠시 후에 GC 는 F - Queue 의 대상 에 대해 두 번 째 소 규모 표 시 를 할 것 입 니 다. 대상 이 finalie () 에서 자신 을 구 하 는 데 성공 하려 면 인용 체인 의 모든 대상 과 다시 연결 하면 됩 니 다. 예 를 들 어 자신 (this 키워드) 을 특정한 변수 나 대상 의 구성원 변수 에 할당 하면 됩 니 다.두 번 째 표 시 를 할 때 '회수 예정' 의 집합 이 삭 제 됩 니 다.만약 대상 이 이때 아직 탈출 하지 않 았 다 면, 기본적으로 그것 은 정말 회수 되 었 을 것 이다.3. 대상 의 생존 여 부 를 판단 하 는 것 은 '인용' 과 관련 이 있다.
JDK 1.2 이후 자바 가 인용 개념 을 확장 하면 서 인용 을 강 인용 (Strong Reference), 소프트 인용 (Soft Reference), 약 인용 (Weak Reference), 허 인용 (Phantom Reference) 네 가지 로 나 눠 인용 강도 가 차례로 약화 했다.
강 인용: 프로그램 코드 에 보편적으로 존재 하 는 'Object obj = new Object ()' 와 같은 인용 을 말 합 니 다. 강 인용 이 존재 한다 면 쓰레기 수집 기 는 인 용 된 대상 을 영원히 회수 하지 않 습 니 다.
소프트 인용: 아직 유용 하지만 필요 한 대상 은 아 닙 니 다.시스템 에 메모리 넘 침 이상 이 발생 하기 전에 이 대상 들 을 회수 범위 에 넣 고 두 번 째 로 회수 합 니 다.
약 인용: 사용자 설명 이 필요 하지 않 습 니 다.약 인용 관련 대상 은 다음 쓰레기 수집 이 발생 하기 전 까지 만 생존 할 수 있다.쓰레기 수집 기 가 작 동 할 때 현재 메모리 가 충분 하 든 상 관 없 이 약 한 인용 대상 만 회수 합 니 다.
가상 인용: 한 대상 이 가상 인용 이 존재 하 는 지 여 부 는 생존 시간 에 영향 을 주지 않 고 가상 인용 을 통 해 대상 의 인 스 턴 스 를 얻 을 수 없습니다.대상 에 게 가상 인용 을 설정 하 는 유일한 목적 은 이 대상 이 수집 기 에 의 해 회수 되 는 시간 에 시스템 통 지 를 받 는 것 이다.

좋은 웹페이지 즐겨찾기