Nice programing

Young, Tenured 및 Perm 세대

nicepro 2020. 12. 4. 20:34
반응형

Young, Tenured 및 Perm 세대


나는 Heap, Young, Tenured 및 Perm 세대와 혼동됩니다.

누구든지 설명해 주시겠습니까?


Java 가비지 수집기는 세대 별 가비지 수집기 라고합니다 . 응용 프로그램의 개체는 생성 된 위치와 사용 방법에 따라 다양한 시간 동안 유지됩니다. 여기서 핵심적인 통찰력은 수명이 짧은 개체와 수명이 긴 개체에 대해 서로 다른 가비지 수집 전략을 사용하면 GC가 각 경우에 맞게 최적화 될 수 있다는 것입니다.

느슨하게 말해서, 객체는 Young Generation 에서 반복되는 가비지 수집을 "생존" 할 때 Tenured Generation으로 마이그레이션됩니다 . 영구 세대는 , 특별한 경우 반드시 클래스와 메소드를 나타냅니다 예를 들어 개체에 대한, 프로그램에 표시되지 않은 JVM에 필요한 개체가 포함되어 있습니다.

때문에 젊은 세대는 보통 쓰레기를 많이 포함, 그것은 한 번에 사용되지 않는 객체를 많이 제거하기에 최적화되어 있습니다. 종신 세대 는 많은 메모리를 낭비하지 않고 빠른 가비지 컬렉션에 최적화되어 긴 수명 개체가 포함되어 있기 때문이다.

가비지 콜렉션 기술의 개선으로 세부 사항이 매우 복잡해지고 JVM 및 구성 방법에 따라 달라집니다. 무슨 일이 일어나고 있는지 정확히 알아야 할 경우 사용중인 특정 JVM에 대한 문서읽어야합니다 .

즉, 개념적 수준에서 여전히 유용한 간단한 역사적 배열이 있습니다. 역사적으로 Young Generation카피 컬렉터가 되고 Tenured Generation마크 앤 스윕 컬렉터가되었습니다 . 복사 수집기가 기본적으로 쓰레기를 치우는에 대한 CPU 비용을 지불하지, 비용의 대부분은 라이브 개체 유지에,이 효율성의 가격은 무거운 메모리 사용량입니다. 마크 스윕 수집기는 모두 라이브 및 사용되지 않는 개체에 대한 일부 CPU의 비용을 지불하지만, 메모리를보다 효율적으로 사용합니다.


Java Heap Memory 는 운영 체제에서 JVM에 할당 한 메모리의 일부입니다. 객체를 만들 때마다 자바의 힙 내부에 생성됩니다 .

Java 힙 공간Young Generation, Old 또는 Tenured Generation 및 Permanent Generation 이라는 가비지 콜렉션을 위해 세 영역 또는 세대로 나뉩니다 . 영구 생성은 핫스팟 JVM에서 전체 gc 중에 가비지 수집됩니다.

젊은 세대는 모든 새로운 객체를 할당하고 세 곳이다. 젊은 세대가 가득 차면 사소한 가비지 콜렉션이 발생합니다. 죽은 물건으로 가득 찬 젊은 세대는 매우 빠르게 수집됩니다. 일부 살아남은 물체는 노화되어 결국 구세대로 이동합니다.

이전 세대는 오래 생존 한 개체를 저장하는 데 사용됩니다. 일반적으로 젊은 세대 개체에 대한 임계 값이 설정되고 해당 연령이 충족되면 개체가 이전 세대로 이동됩니다. 결국 구세대를 수집해야합니다. 이 이벤트를 주요 가비지 수집이라고합니다.

영구 생성 메타 데이터 애플리케이션에서 사용되는 종류 및 방법을 설명하기 위해 필요한 JVM 포함한다. 영구 생성은 애플리케이션에서 사용중인 클래스를 기반으로 런타임시 JVM에 의해 채워집니다.

PermGenJava 8 릴리스 이후 Metaspace 로 대체되었습니다. PermSize 및 MaxPermSize 매개 변수는 이제 무시됩니다. Metaspace에 대해 이해하려면 Pierre-Hugues Charbonneau의 dzone 기사살펴보십시오.

여기에 이미지 설명 입력

이미지 출처 : http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

자세한 내용은 같은 기사를 참조하십시오.


힙의 모든 개체는 참조 될 때 유지됩니다. 더 많지 않으면 가비지 수집기 (GC)가 메모리를 회수합니다.

PermGen, Young 및 Tenured는 객체 (또는 객체가있을 수있는 힙의 공간)의 다른 분류입니다.

PermGen : 이러한 개체는 항상 거기에 있으며 가비지 수집되지 않습니다. 클래스 객체, 인턴 문자열 등이 있습니다. 거기에 GC가 있는지 모르겠습니다 (시스템이 클래스를 언로드 할 때 ...하지만 정상적인 것은 아닙니다)

Young : 개체가 생성되면 여기에 있습니다.

Tenured : 개체가 N GC 통과 (생존 = GC 통과이지만이 개체는 참조되므로 회수 할 수 없음)를 통과하면이 분류 / 카테고리로 이동합니다.

사용 된 GC 및 일부 매개 변수화에 따라 GC는 다소 자주 전달됩니다.

그런 다음 가비지 수집은 힙의 개체를 관리하는 다른 접근 방식을 가질 수 있습니다. 이러한 객체 분류는이를 수행하는 데 도움이됩니다.


다음은 GC 매개 변수를 조정 / 크기 조정하는 방법에 대한 또 다른 훌륭한 (긴하지만) 기사입니다.

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/

GC 문제가 있고 GC 로그를 읽는 방법을 알아야하거나 현재 GC 수집기가 작동하는 방식을 이해해야하는 경우 매우 유용한 읽기입니다.

실행중인 시스템의 원격 모니터링을 연결하여 실시간 메모리 사용량과 GC 실행을 확인하려면이 도구를 확인하세요.

http://java.sun.com/performance/jvmstat/visualgc.html

참고 URL : https://stackoverflow.com/questions/2070791/young-tenured-and-perm-generation

반응형