Tracing Collector는 일련의 GC Roots에서 시작하여 개체 간의 참조 상태를 전역적으로 기록하는 중앙 집중식 관리 방법을 사용합니다. 객체에서 해당 노드 아래로 모든 참조 체인을 검색합니다. 객체에 GC 루트에 대한 참조 체인이 없으면 이 객체를 사용할 수 없음이 증명됩니다.
아래 그림에서는 Object6, Object7, Object8이 서로를 참조하지만 해당 GC는 뿌리는 닿을 수 없으므로 재활용품으로 간주됩니다.
GC 루트로 사용할 수 있는 개체는 다음과 같습니다.
가상 머신 스택의 참조 개체입니다(스택 프레임의 로컬 변수 테이블).
메서드 영역의 클래스 정적 속성에 의해 참조되는 개체
메서드 영역의 상수에 의해 참조되는 개체
로컬 메서드 스택의 JNI 참조 개체입니다.
메인 하나는 복사, 표시 제거, 표시 압축의 세 가지 구현 알고리즘입니다.
1. 마크 클리어 알고리즘
마크 앤 클리어 알고리즘은 가장 기본적인 수집 알고리즘이며, 다른 수집 알고리즘도 이 아이디어를 기반으로 합니다. 마크 앤 클리어 알고리즘은 "마킹"과 " 클리어"의 두 단계로 나누어집니다. 먼저 재활용이 필요한 객체를 마킹하고, 마킹이 완료된 후 객체를 균일하게 클리어합니다.
주요 단점:
① 마킹 및 클리어 과정이 효율적이지 않습니다
②입니다. 삭제 많은 수의 불연속적인 메모리 조각이 생성됩니다.
2. 복제 알고리즘
한 번에 하나의 청크만 사용하여 사용 가능한 메모리 용량을 동일한 크기의 청크로 두 개로 나눕니다. 이 블록이 다 소모되면 남은 객체를 다른 블록에 복사한 후, 사용한 메모리 공간을 한꺼번에 정리하세요. 이렇게 하면 매번 메모리 한 조각이 재활용되어 조각화가 발생하지 않으며, 힙의 포인터를 이동하여 순서대로 메모리를 할당하면 됩니다.
주요 단점:
>메모리가 원래 크기의 절반으로 줄어듭니다.
3 . 태그- 대조 알고리즘
주요 단점:표시 작업은 다음과 일치합니다. 후속 작업은 객체를 직접 정리하는 것이 아니라 쓸모 없는 객체를 정리한 후 남아 있는 모든 객체를 한쪽 끝으로 이동하고 해당 객체를 참조하는 포인터를 업데이트합니다.
마크 정리를 기반으로 개체를 이동해야 하며 비용은 상대적으로 높지만 메모리 조각화가 없다는 장점이 있습니다.
참조 카운팅 수집기
참조 카운팅 수집기는 분산 관리 방식을 사용하여 여부를 기록합니다. 개체는 카운터를 통해 참조됩니다. 카운터가 0에 도달하면 해당 개체가 더 이상 사용되지 않으며 재활용될 수 있음을 의미합니다.주요 단점:
순환 참조 시나리오 재활용 불가 예를 들어 아래 그림에서 ObjectC와 ObjectB는 서로를 참조하므로 ObjectA가 ObjectC와 ObjectB에 대한 참조를 해제하더라도 재활용할 수 없습니다. sunJDK는 GC를 구현할 때 이 방법을 사용하지 않습니다.
위 내용은 Java 가상 머신러닝 - 가비지 컬렉션 알고리즘에 대한 내용이며, 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요. )!