1. Mark-and-clear 알고리즘
Mark-and-clear 알고리즘은 가장 기본적인 수집 알고리즘입니다. 실행 프로세스는 이름과 마찬가지로 Marking과 Clear의 두 단계로 나뉩니다. , 재활용이 필요한 개체를 표시하세요. 표시 완료되면
아래 그림과 같이 표시된 개체가 균일하게 재활용됩니다. 구체적인 마킹 프로세스에 대한 소개는 가비지 컬렉션을 위한 객체 생존 알고리즘 결정에 대한 이전 기사에서 소개한 "도달성 분석"을 참조하세요
재활용 후 상태
단점:
1. 표시와 지우기 두 가지 작업의 효율성이 그리 높지 않습니다
2. 그림에서 볼 수 있듯이 지우고 나면 메모리에 조각이 많이 남게 됩니다. 큰 객체에 메모리 공간을 할당할 때 충분히 큰 연속 공간을 찾지 못해 미리 GC가 발생할 수 있다는 점이다. 2. 복사 알고리즘 복사 알고리즘의 원리는 메모리 공간을 동일한 크기의 두 부분으로 나누는 것입니다. 가비지 수집이 필요할 때 사용된 메모리에 남아 있는 개체는 메모리 조각에 다른 메모리 조각으로 복사한 다음 이전 메모리 조각을 지웁니다. 아래 사진과 같습니다재활용 전 상태
재활용 후 상태
장점: 복제 알고리즘이 더 효율적입니다
단점: 이 알고리즘 희생 공간은 더 커졌고 결국 사용 가능한 메모리 공간은 원래의 절반이되었습니다
3. 마크 정렬 알고리즘이것은 구세대에서 일반적으로 사용되는 알고리즘입니다. 생성 개체는 오랜 시간 동안 저장됩니다.
마킹 및 정렬 알고리즘의 마킹 프로세스는 마크 클리닝 알고리즘과 동일하지만 후속 단계가 다릅니다. 마킹 및 정렬 알고리즘은 살아남은 개체를 한쪽 끝으로 이동시키고,
그리고 그 다음은 다음과 같습니다. 다음과 같이 살아남은 끝 경계의 반대쪽 끝에 있는 모든 메모리를 정리합니다.
재활용 후 상태
4. 세대별 수집 알고리즘
현재 가상머신에서는 세대별 수집 알고리즘을 사용하고 있으며, 이 알고리즘은 객체의 다양한 생존 기간에 따라 메모리를 여러 영역으로 나눕니다.
상용 가상 머신에서는 복사 알고리즘을 사용하여 새로운 세대를 가비지 수집합니다. 그 이유는 새로운 세대의 개체 중 98%가 매우 짧은 생존 시간을 가지기 때문입니다. 메모리를 동일한 크기의 두 부분으로 나눌 필요가 없습니다. 블록은 살아남은 개체를 복사할 수 있도록 작은 공간만 남겨두면 됩니다. 따라서메모리는 일반적으로 더 큰 Eden 영역과 두 개의 작은 Survivor 영역으로 구분됩니다.
위 내용은 JVM 고급 기능 - 가비지 수집 알고리즘 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!