> 类库下载 > java类库 > JVM 메모리 영역

JVM 메모리 영역

高洛峰
풀어 주다: 2016-11-05 16:34:46
원래의
1855명이 탐색했습니다.

메모리 영역

프로그램 카운터

이 기능은 프로세서의 프로그램 카운터와 유사합니다.

그러나 프로세서의 프로그램 카운터는 프로세스를 제공하고 jvm의 프로그램 카운터는 스레드를 제공합니다

따라서 jvm의 프로그램 카운터는 스레드 전용이며 선언 기간은 다음과 같습니다. 스레드 사이의 프로그램 카운터는 서로 간섭하지 않습니다

다음 바이트코드의 주소를 기록하기 때문에 Java에서는 네이티브 메서드를 제공하지 않습니다. 네이티브 메서드는 프로세스를 직접 시작합니다. CPU의 프로그램 카운터에 의해 제어됩니다

프로그램 카운터는 JVM에서 OutOfmemoryError를 발생시키지 않는 유일한 영역입니다


가상 머신 스택

이것도 CPU 내부의 스택과 같습니다. 거의 이와 같이 메소드를 입력하면 스택 프레임이 스택에 로컬 변수 테이블, 피연산자 스택, 동적 링크 등을 기록합니다. 메소드 종료. 이 메서드를 종료할 때 현재 스택 프레임을 팝합니다.

가상 머신 스택은 메서드 서비스를 지향하므로 스레드 전용입니다


부분 변수 테이블

지역 변수 테이블은 메소드의 지역 변수 유형(예: int, boolean, char,..., 참조 유형)과 이 변수의 메모리 주소를 기록합니다


연산 스택

피연산자 스택은 CPU의 일반 레지스터와 동일하며 논리 연산 장치에서 처리된 값을 저장하는 많은 명령어입니다. 이 영역에서 값을 읽어야 합니다(add,cmp,mov,...)


메소드 종료

현재 메소드를 처리한 후 실행할 다음 단계 명령어의 주소

네이티브 메소드 스택

로컬 메소드 스택은 실제로 가상 머신 스택과 유사하지만, 기본 메서드를 제공하고 가상 머신 스택은 바이트코드만 제공합니다. 서비스


이 영역은 대부분의 개체가 사는 곳입니다. . 당연히 가비지 수집기의 초점이기도 합니다.

객체의 인스턴스를 저장하는 영역으로, 객체의 메모리 공간이 여기에 할당됩니다. 대부분의 객체가 여기에 살기 때문에 모든 스레드가 공유하는 영역입니다.

힙도 신세대 영역과 구세대 영역으로 세분화됩니다. 신세대 영역의 주요 생존자들은 자주 "살고 죽는" 개체들이다. 이들은 자주 태어나고 자주 파괴되는 개체들이다. Old Generation 영역의 생존을 위해서는 안정적인 객체가 필요하기 때문에 Garbage Collector가 이곳을 거의 방문하지 않습니다.

대부분의 개체는 생존 시간이 짧으며 새로운 세대에 살고 있습니다. 따라서 신생대 지역은 일반적으로 구시대 지역보다 넓습니다.

메서드 영역

메서드 영역에는 로드된 클래스의 정보가 기록됩니다. 정규화된 이름(패키지 이름 + 클래스 이름), 메서드, 필드, 설명자, 매개 변수, 상수 및 정적 변수 등이 있습니다. 이 영역은 모든 스레드에서도 공유됩니다.

이 지역에는 영원시대라는 이름도 있는데, 이는 이 지역이 거의 청소되지 않는다는 의미입니다. 클래스의 정리 범위는 매우 작고 클래스가 더 이상 필요하지 않은지 여부를 결정하기 위한 요구 사항이 더 까다롭기 때문에 가비지 수집기는 이 영역을 거의 정리하지 않습니다.

런타임 상수 풀

컴파일 중에 생성된 리터럴 및 기호 참조를 기록하는 영역입니다. 또한 모든 스레드에서 공유됩니다.


리터럴

리터럴에는 큰따옴표 ""로 표시된 문자열과 코드 유형에 하드 코딩된 일부 기본 데이터가 포함됩니다. 상수입니다.

jdk1.6에서 런타임 상수 풀은 메서드 영역의 일부입니다. 상수가 발견되면 먼저 해당 상수가 런타임 상수 풀에 이미 저장되어 있는지 확인합니다. 그렇지 않은 경우 복사본을 런타임 상수 풀에 복사합니다. 동일한 값을 가진 상수를 생성하려는 모든 후속 시도는 런타임 상수 풀을 직접 참조합니다.

jdk1.7부터 런타임 상수 풀이 힙으로 나누어졌습니다. 상수가 처음 발생하는 경우 더 이상 런타임 상수 풀에 복사되지 않지만 참조는 런타임 상수 풀에 유지되어 상수가 처음 나타나는 메모리 주소를 가리킵니다.

직접 메모리

이 영역은 실제로 jvm의 일부가 아니고 다른 프로세스에 속합니다. 네이티브 메서드가 호출되면 직접 메모리가 생성될 수 있습니다.

다이렉트 메모리란 네이티브 방식에서 사용하는 메모리 공간을 말합니다. 예를 들어 NIO 작업은 파일을 읽고 쓰는 데 기본 방법을 사용합니다. 이때 파일을 읽고 쓰는 메모리(캐시)를 가리키는 직접 메모리가 생성됩니다.

직접 메모리는 jvm에 없지만 참조는 jvm 힙에 유지되어 메모리 공간의 직접 메모리를 가리킵니다. 이렇게 하면 NIO와 유사한 작업에서 메모리 공간과 Java 힙 사이에서 데이터가 자주 복사되는 것을 방지할 수 있습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿