jvm 가비지 수집 알고리즘: 1. "Mark-Clear" 알고리즘은 먼저 재활용이 필요한 모든 개체를 표시한 다음 표시가 완료된 후 표시된 모든 개체를 균일하게 재활용합니다. 2. 복사 알고리즘; 메모리를 두 개의 동일한 크기 블록으로 나누고 한 번에 하나만 사용합니다. 3. "마크-조직" 알고리즘 4. 세대별 수집 알고리즘.
이 튜토리얼의 운영 환경: windows7 시스템, java8 버전, DELL G3 컴퓨터.
두 가지 개념:
신세대: 수명 주기가 짧은 객체가 저장되는 영역.
구세대(Old Generation): 수명이 긴 물건을 보관하는 구역.
동일한 점: 모두 Java 힙에 있습니다
1. 표시 지우기 알고리즘
실행 단계:
그림:
단점:
2. 복사 알고리즘
메모리를 동일한 크기의 블록 두 개로 나누고 한 번에 하나만 사용합니다. 블록이 모두 소모되어 GC가 발생하면 블록에 남아 있는 객체들을 다른 영역으로 복사한 후, 쓸모없는 메모리를 한꺼번에 비워냅니다. 다음에 GC가 실행되면 해당 블록의 남은 부분이 이 블록에 복사된 다음 해당 블록이 지워지고 주기가 반복됩니다.
그림:
장점
단점:
Improvements
연구에 따르면 신세대의 대부분의 물건은 "살고 죽는다"는 것입니다. 즉, 수명 주기가 매우 짧고 물건이 오래 살수록 재활용하기가 더 어려워집니다. GC가 발생하면 재활용해야 할 개체는 많고 살아남는 개체는 거의 없으므로 다른 메모리로 이동해야 하는 개체가 거의 없으므로 메모리 공간을 1:1로 나눌 필요가 없습니다. 대신, 전체 신세대는 8:1:1의 비율로 세 개의 영역으로 나누어집니다. 가장 큰 영역을 Eden 영역이라고 하고, 두 개의 작은 영역을 각각 To Survivor 및 From Survivor라고 합니다.
첫 번째 GC 중에는 Eden에서 살아남은 개체만 To에 복사하면 됩니다. 그러면 에덴 지역 전체가 재활용됩니다. 다시 GC가 발생하면 살아남은 Eden과 To to From을 복사하고 이 과정을 반복한다. 이러한 방식으로 각 신세대에서 사용 가능한 메모리는 전체 신세대의 90%를 차지하여 메모리 활용도가 크게 향상됩니다. [관련 추천 : Java 영상 튜토리얼]
하지만 매번 살아남는 객체가 항상 전체 신세대의 10% 미만이라는 보장은 없습니다. 이때 복사된 과거는 저장할 수 없으므로 또 다른 작품입니다. Old Generation의 경우 할당 보장이 이루어지고 객체는 Old Generation에 저장됩니다. 충분하지 않으면 OOM이 발생합니다.
Old Generation: 여러 번의 재활용 시도에서 살아남은 개체를 새로운 세대에 저장합니다(기본값 15회).
3. 마킹 – 대조 알고리즘
기존 복사 알고리즘은 상대적으로 생존율이 높기 때문에 계속해서 복사하는 것은 의미가 없고 시간 낭비입니다. 따라서 노년층을 대상으로 '마킹 정렬' 알고리즘이 제안되었다.
실행 단계:
그림:
4. 세대별 수집 알고리즘
현재 대부분의 상용 가상머신은 이 세대별 수집 알고리즘을 사용하고 있습니다. 이 알고리즘에는 새로운 콘텐츠가 없습니다. 단지 개체의 생존 시간에 따라 메모리를 신세대와 구세대로 나누어 다양한 개체를 대상으로 할 수 있습니다. 영역에서는 해당 알고리즘을 채택합니다. 예:
MinorGC와 FullGC의 차이점
MinorGC: 신세대에서 발생하는 가비지 콜렉션은 신세대의 특성상 MinorGC가 매우 빈번하고, 재활용 속도도 상대적으로 빠르며, 양도 많습니다. 각 컬렉션의 크기도 큽니다.
FullGC: MajorGC라고도 불리는 Old Generation에서 발생하는 가비지 수집은 비교적 느립니다. MinorGc보다 약 10배 느립니다. FullGC에는 일반적으로 여러 MinorGC가 수반됩니다.
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !
위 내용은 JVM 가비지 수집 알고리즘이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!