코드짐/자바 코스/All lectures for KO purposes/Java의 가비지 수집기 유형

Java의 가비지 수집기 유형

사용 가능

직렬 GC

가비지 수집은 힙에서 참조되지 않은 객체를 제거하고 새로 생성된 객체를 위한 공간을 만들어 Java의 메모리 효율성을 향상시킵니다.

JVM(Java Virtual Machine)에는 8가지 유형의 가비지 콜렉터가 있습니다. 각각을 자세히 살펴 보겠습니다.

직렬 GC는 가장 간단한 GC 구현입니다. 단일 스레드 환경에서 실행되는 소규모 응용 프로그램을 위한 것입니다. 모든 가비지 수집 이벤트는 동일한 스레드에서 순차적으로 실행됩니다. 압축은 각 가비지 수집 후에 수행됩니다.

직렬 GC

수집기를 실행하면 전체 응용 프로그램이 일시 중단되는 "세계 중지" 이벤트가 발생합니다. 가비지 수집 중에 전체 응용 프로그램이 중지되므로 지연을 가능한 한 낮게 유지하려면 실생활에서 이에 의존해서는 안 됩니다.

직렬 가비지 수집기를 사용하기 위한 JVM 인수는 -XX:+UseSerialGC 입니다 .

병렬 GC

병렬 가비지 수집기는 다중 스레드 또는 다중 프로세서 하드웨어에서 실행되는 중대형 데이터 세트가 있는 애플리케이션용으로 설계되었습니다. 이것은 기본 GC 구현이며 처리량 수집기라고도 합니다.

젊은 세대에서 작은 가비지 수집을 위해 여러 스레드가 지정됩니다. 유일한 스레드는 이전 세대의 기본 가비지 수집으로 사용 중입니다.

병렬 GC

병렬 GC를 실행하면 세상이 "중지"되고 응용 프로그램이 중단됩니다. 이 동작은 배치 작업을 실행할 때와 같이 많은 작업을 완료해야 하고 긴 일시 중지가 허용되는 다중 스레드 환경에 더 적합합니다.

병렬 가비지 수집기를 사용하기 위한 JVM 인수는 -XX:+UseParallelGC 입니다 .

씨엠에스GC

낮은 나머지 병렬 피커 라고도 합니다 .

여기에서 작은 가비지 수집의 경우 여러 스레드가 관련되며 이는 병렬 수집기에서와 동일한 알고리즘을 통해 발생합니다. 주요 가비지 수집은 이전 병렬 GC와 마찬가지로 멀티스레드 방식이지만 CMS는 애플리케이션 프로세스와 동시에 실행되어 "월드 스톱" 이벤트를 최소화합니다.

씨엠에스GC

이 때문에 CMS 컬렉터는 다른 컬렉터보다 더 많은 CPU를 소비합니다. 성능을 향상시키기 위해 더 많은 CPU를 할당할 수 있는 능력이 있다면 단순한 병렬 수집기보다 CMS가 더 좋습니다. CMS GC는 압축되지 않습니다.

병렬 마크 스윕 가비지 수집기를 사용하기 위한 JVM 인수는 -XX:+UseConcMarkSweepGC 입니다 .

G1(쓰레기 우선) ​​GC

G1GC는 CMS를 대체할 것으로 생각되었으며 큰 힙 크기(4GB 이상)가 특징인 다중 스레드 응용 프로그램용으로 개발되었습니다. CMS와 같이 병렬적이고 경쟁력이 있지만 내부적으로는 이전 가비지 수집기와는 매우 다르게 작동합니다.

G1도 세대별로 운영되지만 젊은 세대와 기성세대를 위한 별도의 공간은 없다. 대신 각 세대는 영역 집합이므로 젊은 세대의 크기를 유연하게 변경할 수 있습니다.

G1은 힙을 동일한 크기의 영역 세트(힙 크기에 따라 다름)로 분할하고 여러 스레드로 스캔합니다. 프로그램이 실행되는 동안 영역은 반복적으로 오래되고 젊어질 수 있습니다.

마크업 단계가 완료되면 G1은 어느 영역에 정크가 가장 많은지 알게 됩니다. 사용자가 일시 중지를 최소화하는 데 관심이 있는 경우 G1은 일부 영역만 선택할 수 있습니다. 일시 중지 시간이 사용자에게 중요하지 않거나 일시 중지 시간 제한이 높게 설정된 경우 G1은 더 많은 영역을 이동합니다.

G1 GC는 가비지가 가장 많은 영역을 식별하고 해당 영역에서 먼저 가비지 수집을 수행하므로 "Garbage First"라고 합니다.

Eden, Survivors, Old Memory 영역 외에도 G1GC에는 두 가지 유형이 더 있습니다.

  • Humongous (Huge) - 크기가 큰 객체용(힙 크기의 50% 이상).
  • 사용 가능 - 사용되지 않거나 할당되지 않은 공간입니다.

G1 가비지 수집기를 사용하기 위한 JVM 인수는 -XX:+UseG1GC 입니다 .

셰넌도어(샨다라)

Shenandoah 는 JDK 12의 일부로 출시된 새로운 GC입니다. G1에 비해 Shenandoah의 주요 이점은 대부분의 가비지 수집 주기가 애플리케이션 스레드와 동시에 수행된다는 것입니다. G1은 응용 프로그램이 일시 중단된 경우에만 힙 영역을 비울 수 있으며 Shenandoah는 응용 프로그램과 동시에 개체를 이동합니다.

Shenandoah는 사용 가능한 메모리가 발견되는 즉시 라이브 개체를 압축하고, 쓰레기를 정리하고, RAM을 해제할 수 있습니다. 이 모든 것이 애플리케이션을 일시 중단하지 않고 동시에 발생하기 때문에 Shenandoah는 CPU를 더 많이 사용합니다.

Shenandoah 가비지 수집기에 대한 JVM 인수: -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC .

ZGC

ZGC 는 JDK 11의 일부로 릴리스되고 JDK 12에서 개선된 또 다른 GC입니다.

속도와 낮은 대기 시간(10ms 미만의 일시 중지)이 필요하거나 매우 큰 힙(수 테라바이트)을 사용하는 애플리케이션을 위한 것입니다.

ZGC의 주요 목표는 낮은 대기 시간, 확장성 및 사용 편의성입니다. 이를 위해 가비지 수집 작업이 진행 중임에도 불구하고 Java 응용 프로그램이 계속 실행될 수 있습니다. 기본적으로 ZGC는 사용하지 않는 메모리를 해제하고 운영 체제에 반환합니다.

따라서 ZGC는 매우 낮은 불감 시간(일반적으로 2ms 이내)을 제공함으로써 다른 기존 GC에 비해 상당한 개선을 가져옵니다.

ZGC의 주요 목표 

ZGC 가비지 수집기를 사용하기 위한 JVM 인수는 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC 입니다 .

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다