>  기사  >  Java  >  JVM 가비지 수집 알고리즘이란 무엇입니까?

JVM 가비지 수집 알고리즘이란 무엇입니까?

青灯夜游
青灯夜游원래의
2021-04-22 14:58:4032864검색

jvm 가비지 수집 알고리즘: 1. "Mark-Clear" 알고리즘은 먼저 재활용이 필요한 모든 개체를 표시한 다음 표시가 완료된 후 표시된 모든 개체를 균일하게 재활용합니다. 2. 복사 알고리즘; 메모리를 두 개의 동일한 크기 블록으로 나누고 한 번에 하나만 사용합니다. 3. "마크-조직" 알고리즘 4. 세대별 수집 알고리즘.

JVM 가비지 수집 알고리즘이란 무엇입니까?

이 튜토리얼의 운영 환경: windows7 시스템, java8 버전, DELL G3 컴퓨터.

JVM 가비지 수집 알고리즘


두 가지 개념:

신세대: 수명 주기가 짧은 객체가 저장되는 영역.
구세대(Old Generation): 수명이 긴 물건을 보관하는 구역.

동일한 점: 모두 Java 힙에 있습니다

1. 표시 지우기 알고리즘

실행 단계:

  • 표시: 메모리 영역을 순회하고 필요한 객체를 표시합니다. 재활용됩니다.
  • Clear: 메모리를 다시 탐색하고 표시된 메모리를 재활용합니다.

그림:

JVM 가비지 수집 알고리즘이란 무엇입니까?

JVM 가비지 수집 알고리즘이란 무엇입니까?

단점:

  • 효율성 문제; 메모리 공간이 두 번 통과됩니다(첫 번째는 표시되고 두 번째는 지워집니다).
  • 공간 문제: 많은 수의 메모리 조각이 생성되기 쉽습니다. 더 큰 메모리가 필요한 경우 요구 사항을 충족하는 조각을 찾을 수 없으므로 GC를 다시 시작해야 합니다.

2. 복사 알고리즘

메모리를 동일한 크기의 블록 두 개로 나누고 한 번에 하나만 사용합니다. 블록이 모두 소모되어 GC가 발생하면 블록에 남아 있는 객체들을 다른 영역으로 복사한 후, 쓸모없는 메모리를 한꺼번에 비워냅니다. 다음에 GC가 실행되면 해당 블록의 남은 부분이 이 블록에 복사된 다음 해당 블록이 지워지고 주기가 반복됩니다.

그림:

JVM 가비지 수집 알고리즘이란 무엇입니까?

JVM 가비지 수집 알고리즘이란 무엇입니까?

장점

  • 마크 정리 알고리즘에 비해 메모리 조각화 문제를 해결합니다.
  • 더 효율적입니다(메모리 정리 시 첫 번째 주소와 마지막 주소를 기억하고 한 번에 삭제).

단점:

  • 메모리 활용도가 높지 않아 한 번에 메모리의 절반만 사용할 수 있습니다.

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. 마킹 – 대조 알고리즘

기존 복사 알고리즘은 상대적으로 생존율이 높기 때문에 계속해서 복사하는 것은 의미가 없고 시간 낭비입니다. 따라서 노년층을 대상으로 '마킹 정렬' 알고리즘이 제안되었다.

실행 단계:

  • 표시: 재활용이 필요한 항목을 표시합니다.
  • Decluttering: 살아남은 개체를 메모리 한쪽 끝으로 옮긴 다음 쓸모 없는 메모리를 직접 정리합니다.

그림:

JVM 가비지 수집 알고리즘이란 무엇입니까?JVM 가비지 수집 알고리즘이란 무엇입니까?

4. 세대별 수집 알고리즘

현재 대부분의 상용 가상머신은 이 세대별 수집 알고리즘을 사용하고 있습니다. 이 알고리즘에는 새로운 콘텐츠가 없습니다. 단지 개체의 생존 시간에 따라 메모리를 신세대와 구세대로 나누어 다양한 개체를 대상으로 할 수 있습니다. 영역에서는 해당 알고리즘을 채택합니다. 예:

  • 신세대에서는 매번 많은 수의 개체가 죽습니다. 구세대는 메모리 보장으로 사용되며 복사 알고리즘을 채택합니다.
  • 구세대에서는 객체의 생존 시간이 길며 마크 정렬 또는 마크 정리 알고리즘을 사용할 수 있습니다.

MinorGC와 FullGC의 차이점

MinorGC: 신세대에서 발생하는 가비지 콜렉션은 신세대의 특성상 MinorGC가 매우 빈번하고, 재활용 속도도 상대적으로 빠르며, 양도 많습니다. 각 컬렉션의 크기도 큽니다.
FullGC: MajorGC라고도 불리는 Old Generation에서 발생하는 가비지 수집은 비교적 느립니다. MinorGc보다 약 10배 느립니다. FullGC에는 일반적으로 여러 MinorGC가 수반됩니다.

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !

위 내용은 JVM 가비지 수집 알고리즘이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.