메모리 영역
프로그램 카운터
이 기능은 프로세서의 프로그램 카운터와 유사합니다.
그러나 프로세서의 프로그램 카운터는 프로세스를 제공하고 jvm의 프로그램 카운터는 스레드를 제공합니다
따라서 jvm의 프로그램 카운터는 스레드 전용이며 선언 기간은 다음과 같습니다. 스레드 사이의 프로그램 카운터는 서로 간섭하지 않습니다
다음 바이트코드의 주소를 기록하기 때문에 Java에서는 네이티브 메서드를 제공하지 않습니다. 네이티브 메서드는 프로세스를 직접 시작합니다. CPU의 프로그램 카운터에 의해 제어됩니다
프로그램 카운터는 JVM에서 OutOfmemoryError를 발생시키지 않는 유일한 영역입니다
가상 머신 스택
이것도 CPU 내부의 스택과 같습니다. 거의 이와 같이 메소드를 입력하면 스택 프레임이 스택에 로컬 변수 테이블, 피연산자 스택, 동적 링크 등을 기록합니다. 메소드 종료. 이 메서드를 종료할 때 현재 스택 프레임을 팝합니다.
가상 머신 스택은 메서드 서비스를 지향하므로 스레드 전용입니다
부분 변수 테이블
지역 변수 테이블은 메소드의 지역 변수 유형(예: int, boolean, char,..., 참조 유형)과 이 변수의 메모리 주소를 기록합니다
연산 스택
피연산자 스택은 CPU의 일반 레지스터와 동일하며 논리 연산 장치에서 처리된 값을 저장하는 많은 명령어입니다. 이 영역에서 값을 읽어야 합니다(add,cmp,mov,...)
메소드 종료
현재 메소드를 처리한 후 실행할 다음 단계 명령어의 주소
네이티브 메소드 스택
로컬 메소드 스택은 실제로 가상 머신 스택과 유사하지만, 기본 메서드를 제공하고 가상 머신 스택은 바이트코드만 제공합니다. 서비스
힙
이 영역은 대부분의 개체가 사는 곳입니다. . 당연히 가비지 수집기의 초점이기도 합니다.
객체의 인스턴스를 저장하는 영역으로, 객체의 메모리 공간이 여기에 할당됩니다. 대부분의 객체가 여기에 살기 때문에 모든 스레드가 공유하는 영역입니다.
메서드 영역
이 지역에는 영원시대라는 이름도 있는데, 이는 이 지역이 거의 청소되지 않는다는 의미입니다. 클래스의 정리 범위는 매우 작고 클래스가 더 이상 필요하지 않은지 여부를 결정하기 위한 요구 사항이 더 까다롭기 때문에 가비지 수집기는 이 영역을 거의 정리하지 않습니다.
런타임 상수 풀
리터럴
jdk1.6에서 런타임 상수 풀은 메서드 영역의 일부입니다. 상수가 발견되면 먼저 해당 상수가 런타임 상수 풀에 이미 저장되어 있는지 확인합니다. 그렇지 않은 경우 복사본을 런타임 상수 풀에 복사합니다. 동일한 값을 가진 상수를 생성하려는 모든 후속 시도는 런타임 상수 풀을 직접 참조합니다.
직접 메모리
다이렉트 메모리란 네이티브 방식에서 사용하는 메모리 공간을 말합니다. 예를 들어 NIO 작업은 파일을 읽고 쓰는 데 기본 방법을 사용합니다. 이때 파일을 읽고 쓰는 메모리(캐시)를 가리키는 직접 메모리가 생성됩니다.