Java 및 C#에서 메모리의 할당 및 해제는 가상 머신에서 자동으로 관리됩니다. 이전에 CLR에 GC 객체 재활용 방법을 도입했는데, 이는 생성 기반 메모리 재활용 전략입니다. 실제로 Java에서 JVM 객체 재활용 전략은 세대 부문의 아이디어를 기반으로합니다. 이것의 목적은 쓰레기를 늘리는 것입니다
재활용의 성능은 힙의 모든 객체를 확인하여 발생하는 프로그램 응답의 지연을 피합니다. JVM이 GC를 실행할 때 단어가 중지되고, 즉 다른 스레드의 작동을 종료하고, 재활용이 완료된 후에 다른 스레드의 작동 만 복원하기 때문입니다. 세대 부문을 기반으로 한 아이디어는 다음과 같습니다. JVM은 쓰레기 수집기를 실행할 때마다 메모리의 작은 부분 만 필요합니다.
객체 참조가 확인 되며이 소수의 객체는 수명주기가 짧아서 쓰레기 수집의 성능을 높이고 있습니다. 아래에서 우리는 향후 Java에서 생성 기반 메모리 복구 알고리즘의 기본 전략을 소개합니다.
1. JVM 힙 메모리의 세대 부서
세대 기반 메모리 복구 전략에서 힙 공간은 일반적으로 3 세대, 젊은 세대, 구세대 (또는 임기 세대) 및 영구 세대로 나뉩니다. 젊은 세대 중에는 아래 그림과 같이 세 가지 작은 영역이 있습니다. Eden, S0 및 S1이 있습니다.
그중에서도 새로운 물체는 항상 연령대에 할당됩니다. 젊은 세대의 공간이 채워지면, 더 이상 참조되지 않은 물체를 재활용하고 동시에 살아남은 물체의 나이를 증가시키기 위해 쓰레기 수집을 수행해야합니다. 연령대에서 살아남은 대상은 연령 식별 분야를 가지고 있습니다. 일단 특정 임계 값에 도달하면 여전히 살아남은 물체는 구식 공간으로 홍보됩니다.
구식의 공간은 오랫동안 살아남은 물체, 즉 수명이 긴 물체를 저장하는 데 사용됩니다. 젊은 세대 공간의 살아남은 물체가 특정 연령 임계 값에 도달하면 구식으로 자동 홍보됩니다. 구식 공간에 물체가 채워지면 GC의 주요 GC가 한 번 실행됩니다. 소규모 GC와 비교하여, 주요 GC의 실행 수는 작은 GC보다 훨씬 적습니다. 동시에, 주요 GC는 소규모 GC보다 더 오래 실행됩니다. 더 많은 객체 스캔이 포함되기 때문입니다. 이 세대의 아이디어는 실제로 실제로 할당 된 물체가 수명주기가 짧고 노인 물체의 수명주기가 더 긴 더 나은 선택을 기반으로합니다.
동시에, Minor GC와 Major GC가 쓰레기 수집을 수행 할 때, 그들은 World the World 이벤트, 즉 GC가 실행될 때 모든 스레드를 복원합니다.
영구 생성 메모리의 경우 주로 메타 데이터의 관련 정보, 클래스 및 방법의 정보를 저장하는 데 사용됩니다. 클래스가 더 이상 사용되지 않으면 재활용됩니다. 전체 GC가 실행되면 쓰레기 수집을 위해 영구 생성 메모리가 스캔됩니다.
2. 생성 기반 쓰레기 수집의 가공 프로세스
먼저, 처음에는 새 객체가 Eden 지역에 할당되며 S0 및 S1은 비어 있습니다. 에덴의 공간이 채워지면 작은 GC를 한 번 수행하십시오. 쓰레기 수집기는 참조 된 객체를 S0 영역으로 이동시키고 더 이상 참조되지 않은 객체가 삭제됩니다. 동시에, 생존 객체의 나이는 1입니다. GC가 식별 된 후, Eden과 S1 영역은 아래 그림과 같이 비어 있습니다.
다음에 작은 GC가 이전 실행 단계와 동일하게 실행되는 경우, 유일한 차이점은 참조 된 객체, 즉 생존 객체가 S1 영역으로 이동하고 S0 영역에서 생존하는 물체의 나이가 아래 그림과 같이 1만큼 증가하고 2가됩니다.
사소한 GC가 다시 실행되면 생존 객체는 S0 영역으로 이동하여 아래 그림과 같이 생존 객체의 나이에 1을 추가합니다.
마이너 GC가 마침내 실행되면 S1의 생존 객체가 8에 도달하고 (임계 값이 8으로 설정되어 있음) 아래 그림과 같이 객체가 노년 메모리로 홍보됩니다.
지
오래된 힙 공간에 물체가 채워지면 주요 GC가 한 번 실행되며, 이는 오래된 힙이 더 이상 참조되지 않으며 동시에 공간을 압박한다는 물체를 제거합니다. 아래 그림과 같이.
JVM의 쓰레기 재활용 전략에 대한 위의 간단한 논의는 내가 공유하는 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.