1. 개요
런타임 데이터 영역에서는 프로그램 카운터, 가상 머신 스택, 로컬 메소드 스택이 모두 스레드로 생성되고 소멸됩니다.
따라서 메모리 할당 및 재활용이 확실하고, 재활용될 때 재활용됩니다. 메소드 또는 스레드가 종료됩니다. Java 힙 및 사각형 영역은 불확실합니다. 프로그램 실행 중에 생성되는 개체의 크기는 프로그램이 실행될 때만 알 수 있습니다. 개체가 살아 있는지 확인하는 데에는 참조 계산 방법과 도달 가능성 분석 알고리즘의 두 가지 주요 알고리즘이 있습니다.
참조 계산 방법참조 카운터는 개체가 한 번 참조될 때마다 카운터 값이 1씩 증가하고 참조 만료는 1씩 감소합니다. 카운터가 0이면 다시 사용되지 않는다는 의미입니다.
이 루트 노드에서 아래로 검색합니다. 객체 GC ROOT에 연결된 참조 체인이 없는 경우(즉, 도달할 수 없는 경우) GC ROOT로 사용할 수 있는 객체는 다음과 같습니다.
가상 머신 스택의 로컬 변수 테이블 참조 객체
메소드 Exclusive의 클래스 정적 속성 참조
메소드의 열기 객체
현재 사용 가능한 도달성 분석 알고리즘이 주류 알고리즘이 되었습니다. 그 이유는 참조 카운터 알고리즘이 서로 참조하는 객체의 문제를 해결할 수 없다는 것입니다. 그러면 그는 연결된 참조 체인이 없다는 것을 알게 됩니다. 필터링 조건은 finalize() 메소드를 실행해야 하는지 여부입니다. 객체가 finalize 메소드를 포함하지 않거나 finalize 메소드가 호출된 경우,
은 이러한 객체를 실행하기 위해 우선 순위가 낮은 Finalizer 스레드를 자동으로 생성합니다. finalize 메소드를 사용하면 GC는 해당 객체를 F-QUEUE에 두 번째로 표시합니다. 이때 객체가 탈출할 수 없으면 재활용됩니다.
위 내용은 JVM 고급 기능-3. 가비지 컬렉션의 객체 생존 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!