JAVA 프로그램은 가상 머신에서 실행되며 실행 시 메모리 공간이 필요합니다. 가상 머신이 JAVA 프로그램을 실행할 때 관리하는 메모리는 쉽게 관리할 수 있도록 여러 데이터 영역으로 나누어집니다. 가상 머신 관리 메모리 데이터 영역은 다음과 같이 구분됩니다.
Java 학습 영상 추천: java 온라인 튜토리얼
1. 프로그램 카운터(Program Counter Register)
라인 번호 표시, 바이트코드 명령어 분기, 루핑, 점핑, 예외 처리, 스레드 복구(CPU 전환), 각 스레드에는 독립적인 카운터가 필요하며 스레드 전용 메모리는 서로 영향을 미치지 않으며 이 영역에서는 메모리 오버플로 예외가 발생하지 않습니다.
2. 가상 머신 스택(VM Stack)
가상 머신 스택(VM Stack)은 스레드 전용이며 스레드와 동일한 선언 주기를 갖습니다. 가상 머신 스택은 Java 메소드 실행을 위한 메모리 모델입니다. 각 메소드가 실행되면 메소드 실행 시 기본 데이터 구조인 스택 프레임이 생성됩니다.
스택 프레임은 로컬 변수 테이블, 피연산자 스택, 동적 링크, 메서드 종료 등을 저장하는 데 사용됩니다. 각 메서드 실행은 스택에서 스택으로의 가상 머신 스택 프레임 프로세스에 해당합니다. 물리 계층 위의 프로그램 데이터 모델에 해당하는 가상 머신의 로컬 변수 테이블인 데이터 구조입니다.
로컬 변수 테이블은 컴파일 중에 알려진 다양한 데이터 유형(예:
Boolean, byte, char, short, int, float, long, double, 객체 참조 유형(객체 메모리 주소 변수, 포인터 또는 핸들). 프로그램이 실행되면 로컬 변수 테이블에 따라 스택 프레임 공간 크기가 할당됩니다. 작업 중에는 크기가 변경되지 않습니다. 예외 유형: stackOverFlowError. 스레드 요청 스택 깊이가 가상 머신에서 허용되는 깊이보다 큽니다. OutOfMemory
메모리 공간이 소진되어 확장할 수 없습니다. OutOfMemory
内存空间耗尽无法进行扩展。
三、本地方法栈(Native Method Stack)
与虚拟机栈类似,虚拟机栈为Java程序服务,本地方法栈支持虚拟机的运行服务,具体实现由虚拟机厂商决定,也会抛出 stackOverFlowError
、OutOfMemory
3. 네이티브 메서드 스택
가상 머신 스택과 유사하게 가상 머신 스택은 Java 프로그램을 제공하고 로컬 메서드 스택은 가상 머신의 실행 서비스를 지원합니다. 구체적인 구현은 가상 머신 제조업체에 의해 결정됩니다. ,stackOverFlowError
, OutOfMemory
예외가 발생합니다.
4. 힙
힙은 모든 스레드에 의해 공유되며 물리적으로 불연속적인 메모리 공간입니다. GC 수집기는 여러 세대에 걸쳐 수집하며 다음 세대의 Eden, From SurVivor 공간, To SurVivor 공간, 할당 버퍼(할당 공간)로 구분되며 여러 스레드의 전용 버퍼를 이전 세대로 나눌 수 있습니다.5. 메소드 영역
메서드 영역은 힙 영역과 마찬가지로 스레드가 공유하는 메모리 영역입니다. 클래스 정보, 상수, 정적 변수 및 JIT 컴파일러 컴파일을 저장하는 데 사용됩니다. 가상 머신(OSGI 동적으로 로드) 및 기타 데이터. 이론적으로는 JVM(Java Virtual Machine)의 일부로 구분하여 Non-Heap이라고 합니다.이 영역에서 가비지 수집을 수행하지 않도록 선택할 수 있습니다. 이 영역의 재활용 목적은 주로 상수 풀을 재활용하고 클래스를 제거하는 것입니다. 메모리 영역이 부족하면 OutOfMemory 예외가 발생합니다.
런타임 상수 풀: 메소드 영역, 클래스 버전, 필드, 인터페이스, 메소드 등의 일부와 컴파일 중에 생성된 다양한 리터럴 및 기호 참조로, 컴파일된 클래스가 로드된 후 이 영역에 저장됩니다. OutOfMemory 예외가 발생합니다. 다이렉트 메모리는 채널과 버퍼 기반의 IO 방식으로 참조되는 외부 메모리 주소를 직접 할당할 수 있습니다. 1.4 이후에 제공되는 NIO는 참조에 저장되며, 메모리를 직접 참조하는 작업은 효율성을 크게 향상시키고 힙 메모리와 네이티브 메모리 간의 앞뒤 복사 작업을 방지합니다. 가상 머신 메모리가 비정상적으로 종료됩니다. 🎜🎜추천 관련 기사 및 튜토리얼: 🎜Java 개발 시작하기🎜🎜위 내용은 JVM 메모리 데이터 영역에 대한 심층 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!