사진 먼저 보세요:
java 관련 동영상 튜토리얼: java 강좌
1. 프로그램 카운터(PC)
는 스레드 전용입니다. 이는 더 작은 메모리 조각이며 현재 스레드에서 실행되는 바이트 코드의 행 번호 표시기입니다. 이는 JVM(Java Virtual Machine) 사양에서 OOM(OutOfMemoryError)을 지정하지 않는 유일한 영역입니다.
2. Java 가상 머신 스택
은 스레드 전용입니다. 수명주기는 스레드의 수명주기와 동일합니다. Java 메소드 실행을 위한 메모리 모델입니다. 각 메서드를 실행하면 지역 변수와 피연산자(객체 참조)를 저장하는 스택 프레임이 생성됩니다. 로컬 변수에 필요한 메모리 공간은 컴파일 중에 할당됩니다. 따라서 스택 프레임의 크기는 변경되지 않습니다.
두 가지 예외가 있습니다.
1) 스레드 요청 깊이가 스택 깊이보다 크면 StackOverFlowError가 발생합니다.
2) 동적으로 확장할 때 스택이 충분한 메모리를 요청할 수 없으면 OOM이 발생합니다.
3. 힙
Java 힙은 모든 스레드에서 공유됩니다. 가상 머신이 시작될 때 생성됩니다. 객체의 인스턴스와 배열이 저장됩니다. 가장 큰 메모리를 차지합니다. 신세대(Young 영역)와 구세대(Old 영역)로 구분됩니다. 신세대는 에덴(Eden) 영역과 서비어(Servior) 영역으로 나누어진다. 서비스 영역은 From 공간 영역과 To 공간 영역으로 구분됩니다. Eden 영역과 Servior 영역의 메모리 비율은 8:1입니다. 확장 메모리가 사용 가능한 메모리보다 크면 OOM이 발생합니다.
4. 로컬 메서드 스택
로컬 메서드 스택은 스레드 전용입니다. Java 가상 머신 스택과 유사하지만 Java 메소드(바이트코드)를 제공하는 대신 Java가 아닌 기본 메소드를 제공합니다. StackOverFlowError 및 OOM도 발생합니다.
5. 메소드 영역
메소드 영역은 모든 스레드에서 공유됩니다. 비힙이라고도 하는 가상 머신에 의해 로드된 클래스 정보, 상수, 정적 변수 및 기타 데이터를 저장하는 데 사용됩니다. 메소드 영역은 "영구 생성"이라고도 합니다. 이 영역에서는 GC가 거의 수행되지 않지만 재활용되지 않는다는 의미는 아닙니다. 이 지역 재활용의 목표는 주로 상수 풀의 재활용과 유형의 하역을 위한 것입니다. 메모리 요청이 실제 사용 가능한 메모리보다 크면 OOM이 발생합니다.
Java 관련 추천 기사: Java 시작하기
위 내용은 JVM의 런타임 데이터 영역은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!