JVM 노트 5 힙 영역

JVM 노트 5 힙 영역

JVM에서는 힙 영역이 최우선 순위입니다. 이전 기사의 연구를 통해 스택 영역에 가비지 콜렉션이 없음을 알기 때문에 자주 참조되는 가비지 콜렉션은 실제로 힙 영역의 데이터입니다. 여기에서 전설적인 신세대, 구세대, 영구 세대 (메타 스페이스)를 볼 수 있습니다. Kaige Java (kaigejava)는 모두가 함께 배우는 것을 환영합니다.

더미:

JVM 인스턴스에 대한 힙 메모리는 하나 뿐이며 힙 메모리의 크기를 조정할 수 있습니다. 클래스 로더는 클래스 파일을 읽은 후 모든 참조 유형의 실제 정보를 저장하기 위해 힙 메모리에 클래스, 메서드 및 상수 변수를 넣어야 실행기를 쉽게 실행할 수 있습니다. 힙 메모리는 세 부분으로 나뉩니다.

힙 메모리 파티션 :

젊은 세대 스페이스 Young / New

임기 세대 공간 老 年代 Old / Tenure

영구 공간 파마

Java 7 이전의 힙 메모리 개략도 :

0kivWHDU4Se


짧은 버전 프로세스 :

0kivWHfEwq0

0kivWHwtvEm


신생아 영역은 클래스가 태어나고, 성장하고, 죽는 영역으로, 가비지 수집기가 클래스를 생성, 적용, 수집하여 수명을 다합니다.

신생아 영역은 Eden 공간과 Survivor 공간의 두 부분으로 나뉩니다. 모든 수업은 Eden Park에서 새로워졌습니다.

두 개의 생존 영역이 있습니다 : 영역 0 (생존자 0 공간) 및 영역 1 (생존자 1 공간).

Eden Park의 공간이 다 사용되면 프로그램은 객체를 생성해야합니다 .JVM의 가비지 수집기는 Eden Park에서 가비지 수집 (Minor GC, light GC 또는 YGC라고도 함)을 수행하여 더 이상 다른 객체에서 Eden Park를 사용하지 않습니다. 참조 된 개체가 삭제됩니다. 그런 다음 Garden of Eden의 나머지 개체는 생존 영역 0 (시작 영역이라고도 함)으로 이동합니다. 남은 영역 0도 가득 차면 해당 영역은 다시 가비지 수거 된 다음 영역 1로 이동합니다 (영역으로도 불림).

1 군도 만석이면 어떻게됩니까? 15 개의 YGC가 지나면 Surviving Area 1도 꽉 차게되는데 이때 JVM은 데이터를 은퇴 영역으로 옮깁니다. 퇴직 구역도 만석 인 경우, MajorGC (Full GC 검사 FGC라고도 함)가 이때 수행됩니다. 노인 케어 영역에서 메모리를 정리하기 위해 전체 GC를 수행합니다. 노후화 된 영역에서 Full GC를 수행 한 후에도 여전히 객체를 저장할 수없는 것이 발견되면 이때 OOM (OutOfMemoryError) 예외가 발생합니다.

java.lang.OutOfMemoryError : java 힙 공간이 비정상입니다. Java 가상 머신의 힙 메모리가 충분하지 않음을 보여줍니다. 두 가지 주요 이유가 있습니다.

1 : Java 가상 머신의 힙 메모리 설정이 충분하지 않습니다. 매개 변수 -Xms 및 -Xmx를 통해 조정할 수 있습니다.

2 : 코드에 많은 수의 대형 개체가 생성되어 오랫동안 가비지 수집기에서 재활용 할 수 없습니다 (메모리 주소가 참조 됨)

당신의 재능이 당신의 야망을 지원할 수 없을 때, 당신은 진정하고 배워야합니다.

당신의 능력이 당신의 목표를 통제 할 수 없을 때, 당신은 정착하고 연습해야합니다.

꿈은 성급한 것이 아니라 강수와 축적이다. 말할 수있는 아름다움 만이 아니라 기다리지 않은 광채. 기회는 항상 가장 원하는 사람에게 맡겨진다. 마음 속 깊이 이야기하고 원하는 것을 스스로에게 묻는 법을 배우십시오. 삶, 배우기 위해 침착하고, 참을성있게 정착하고, 자신에게주고, 서로를 격려하십시오!


추천

출처blog.51cto.com/kaigejava/2541126