가비지 수집 과정은 어떻게 되나요?

세대별 가비지 수집은 JVM(Java Virtual Machine)의 일반적인 가비지 수집 전략입니다. 이 전략은 힙 메모리를 여러 세대(Generation)로 나누며, 일반적으로 Young Generation(Young Generation)과 Old Generation(Old Generation)으로 나뉩니다. 다양한 세대의 개체는 수명 주기와 수집 빈도가 다릅니다.

다음은 Java의 일반적인 가비지 수집 프로세스입니다.

1. 젊은 세대

Young Generation은 일반적으로 Eden 영역과 두 개의 Survivor 영역(보통 From 및 To)으로 구분됩니다. 새로운 객체가 생성되면 Eden에 할당됩니다. Eden 영역이 가득 차면 Minor GC(Young Generation Garbage Collection)가 시작되고, 살아남은 모든 객체가 Survivor 영역 중 하나로 복사되는 동시에 Eden 영역이 지워집니다. 생존자 영역에서 여러 번 살아남은 개체는 노년기로 승격됩니다.

2. 구세대

구세대는 주로 수명주기가 긴 객체를 저장합니다. Old 세대에 공간이 충분하지 않으면 Major GC(또는 Full GC)가 실행되어 Old 세대에서 가비지를 수집합니다. 구세대 가비지 수집 프로세스는 전체 힙을 검색하고 정리해야 하기 때문에 일반적으로 시간이 많이 걸립니다.

다음으로, 세대별 가비지 수집 프로세스를 보여주는 간단한 Java 코드 데모를 살펴보겠습니다.

public class GarbageCollectionDemo {
    
    
    public static void main(String[] args) {
    
    
        // 创建对象1(位于年轻代)
        Object obj1 = new Object();

        // 创建对象2(位于年轻代)
        Object obj2 = new Object();

        // 对象1不再被引用,成为垃圾
        obj1 = null;

        // 创建对象3(位于年轻代)
        Object obj3 = new Object();

        // 垃圾收集(Minor GC)
        System.gc();

        // 创建对象4(位于老年代)
        Object obj4 = new Object();

        // 对象2不再被引用,成为垃圾
        obj2 = null;

        // 对象3不再被引用,成为垃圾
        obj3 = null;

        // 垃圾收集(Major GC)
        System.gc();
    }
}

위의 예에서는 젊은 세대에 상주하는 처음 두 개체(obj1 및 obj2)가 생성됩니다. 그런 다음 obj1은 null로 설정되어 개체가 더 이상 참조되지 않으며 이때 obj1은 가비지가 됩니다. 그런 다음 역시 젊은 세대에 또 다른 객체(obj3)가 생성됩니다. 그런 다음 System.gc()를 통해 가비지 수집이 시작되고, Young 세대의 가비지를 정리하기 위해 Minor GC가 수행됩니다.

다음으로, 이전 세대에 상주하는 객체(obj4)가 생성됩니다. 그런 다음 obj2와 obj3은 모두 null로 설정되어 더 이상 참조되지 않으며 이 두 개체는 가비지가 됩니다. 가비지 수집은 System.gc()를 통해 다시 트리거됩니다. 이번에는 이전 세대 가비지를 포함하여 전체 힙을 정리하는 Major GC입니다.

가비지 수집의 특정 동작은 JVM의 구현 및 구성에 따라 달라집니다. JVM마다 가비지 수집 알고리즘 및 전략이 다를 수 있으므로 실제 동작이 다를 수 있습니다. 위의 예는 단지 단순화된 설명일 뿐 실제 상황은 더 복잡할 수 있습니다.

Supongo que te gusta

Origin blog.csdn.net/cz_00001/article/details/132719438
Recomendado
Clasificación