JVM 학습 참고 사항 : JVM 메모리 관리 및 JVM 쓰레기 수집 개념. JVM 메모리 구조는 힙, 스택, 로컬 메소드 스택, 방법 영역 및 기타 부품으로 구성됩니다. 또한 JVM은 각각 새로운 세대와 구식의 다운로드 주소에 대해 서로 다른 쓰레기 수집 메커니즘을 사용합니다.
먼저 힙, 스택, 로컬 메소드 스택, 메소드 영역 및 기타 부품으로 구성된 JVM 메모리 구조를 살펴 보겠습니다. 구조 다이어그램은 다음과 같습니다.
JVM 학습 노트 JVM 메모리 관리 및 JVM 쓰레기 수집
JVM 메모리 구조
JVM 메모리 구조는 힙, 스택, 로컬 메소드 스택, 방법 영역 및 기타 부품으로 구성됩니다. 구조 다이어그램은 다음과 같습니다.
1) 힙
새 객체의 메모리는 힙에 할당되며 크기는 -xmx 및 -xms로 제어 할 수 있습니다. 힙은 ceponymous와 구식으로 나뉘며, Ceponymous는 Eden과 Survivor Zones로 더 나뉩니다. 마지막으로, 생존자는 공간과 음료로 구성됩니다. 구조 다이어그램은 다음과 같습니다.
새로운 세대. 새로운 객체는 새로운 세대에 의해 메모리를 할당합니다. 에덴이 불충분하면 생존 대상은 생존자에게 전달됩니다. 새로운 세대의 크기는 -xmn 또는 -xx로 제어 할 수 있습니다. Survivorratio는 Eden과 생존자의 비율을 제어하는 데 사용될 수 있습니다. 새로운 세대의 여러 쓰레기 수집품에서 살아남은 물건을 보관하는 데 사용됩니다.
2) 스택
각 스레드가 각 메소드를 실행하면 스택의 스택 프레임에 적용됩니다. 각 스택 프레임에는 로컬 가변 영역과 피연산자 스택이 포함되어 있으며,이 방법 호출 중에 임시 변수, 매개 변수 및 중간 결과를 저장하는 데 사용됩니다.
3) 로컬 방법 스택
기본 메소드의 실행을 지원하고 각 기본 메소드 호출의 상태를 저장하는 데 사용됩니다.
4) 방법 영역
로드 할 클래스 정보, 정적 변수 및 최종 유형 상수, 속성 및 방법 정보를 저장합니다. JVM은 PermanetGeneration을 사용하여 방법 영역을 저장하며 최소 및 최대 값은 -xx : permsize 및 -xx : maxpermsize로 지정할 수 있습니다. JVM 메모리 구조를 소개 한 후 JVM 쓰레기 수집 메커니즘의 다운로드 주소를 살펴 보겠습니다.
JVM 쓰레기 수집 메커니즘
JVM은 각각 신규 및 구세대에 대해 서로 다른 쓰레기 수집 메커니즘을 채택합니다.
새로운 세대의 GC :
ceponymous는 일반적으로 생존 시간이 짧으므로 복사 알고리즘에 따라 재활용됩니다. 소위 복사 알고리즘은 살아남은 객체를 스캔하여 에덴과 스페이스 또는 지로 사이에 복사하는 CEPONIMOUS에 해당하는 완전히 미사용 공간으로 복사하는 것입니다. 새로운 세대는 유휴 포인터를 사용하여 GC 트리거링을 제어합니다. 포인터는 마지막으로 할당 된 객체를 차세대 간격으로 유지합니다. 메모리를 할당하는 새로운 객체가 있으면 공간이 충분한 지 확인하는 데 사용됩니다. 충분하지 않으면 GC를 트리거합니다. 물체가 지속적으로 할당되면 물체는 점차 에덴에서 생존자로, 그리고 마지막으로 구식으로 이동합니다.
javavisualvm을 사용하여 명확하게보고 새로운 세대가 가득 찬 후에 객체가 구식으로 전송 된 다음 지우고 계속로드되는 것을 관찰하십시오. 구식이 가득 차면 아래 그림과 같이 외부 제외 예외 가보고됩니다.
실행 메커니즘 측면에서 JVM은 Serial GC (SerialGC), 병렬 재활용 GC (ParallelScavenge) 및 병렬 GC (Parnew)를 제공합니다.
1) 연속 GC
전체 스캐닝 및 복사 프로세스는 단일 스레드 방식으로 수행됩니다. 단일 CPU, 새로운 세대의 작은 공간이있는 응용 프로그램에 적합하며 일시 중지 시간에 대한 요구 사항은별로 높지 않습니다. 클라이언트 레벨의 기본 GC 메소드입니다. -xx :+useerialgc를 통해 그것을 지정해야 할 수 있습니다
2) GC의 병렬 재활용
전체 스캐닝 및 복제 프로세스는 다중 스레드 방식으로 수행됩니다. 멀티 CPU 및 잠시 일시 중지 시간 요구 사항이 짧은 응용 프로그램에 적합합니다. 기본적으로 서버 레벨에서 사용하는 GC 메소드입니다. -xx :+useparallelgc의 사양을 강제로 사용하고 -xx : parallelgcthreads = 4를 사용하여 스레드 수를 지정할 수 있습니다.
3) 병렬 GC
구식 동시 GC와 함께 사용하십시오
구식 GC :
새로운 세대와는 달리, 물체는 오랫동안 살아남으며 비교적 안정적입니다. 따라서 마크 알고리즘은 재활용에 사용됩니다. 소위 마크는 살아남은 물체를 스캔 한 다음 표시되지 않은 물체를 재활용하는 것을 의미합니다. 재활용 후 빈 공간은 다음 번에 쉽게 할당되도록 병합되거나 표시됩니다. 요컨대, 메모리 조각화로 인한 효율 손실을 줄여야합니다. 실행 메커니즘 측면에서 JVM은 직렬 GC (SerialMSC), 병렬 GC (Paremal GC) 및 동시 GC (CMS)를 제공합니다. 특정 알고리즘 세부 사항을 추가로 연구해야합니다.
위의 GC 메커니즘은 조합으로 사용해야하며 지정된 방법은 다음 표에 나와 있습니다.
위의 것은 편집자가 당신에게 가져 오는 Java GC의 작업 원칙에 대한 심층적 인 이해의 모든 내용입니다. 모두가 wulin.com을 더 지원하기를 바랍니다