메모리에 JVM 메모리 모델과 객체 초기화 과정

JVM 메모리 모델

도 여러 런타임 데이터 영역으로 나누어 또한 런타임 데이터 영역이라고도 메모리 Java 가상 머신 관리 영역.
0ba9ef09351b7863b922978619e8ae6d.png

프로그램 카운터 : 줄 번호 표시에 의해 실행 된 현재의 바이트 코드 프로그램

프로그램 카운터 (프로그램 카운터 레지스터) 행 번호는 현재 실행 스레드 바이트의 지표로 간주 될 수 있으며, 작은 메모리 공간이다. 가상 기계의 개념적 모델에서, 바이트 코드 작업을 통해 인터프리터 실행 될 다음 바이트 코드 명령어를 선택하는 카운터의 값을 변경하는 , 지점을 만들며, 분지, 예외 처리, 및 다른 기본 기능 스레드 복구 우리는 완료 카운터에 의존 할 필요가있다.

하여 멀티 - 스레드 자바 가상 머신 번갈아 전환 및 프로세서 실행 시간 스레드 할당 달성하는 방법은, 임의의 시간에, 프로세서 만이 프로그램을 실행한다 (멀티 코어 프로세서는 핵이다) 지침. 따라서, 위치를 전환 한 후에 정상으로 회복시키기 위해, 각 스레드는 별개의 프로그램 카운터, 각 스레드 카운터 사이의 상보 적 영향, 별도의 저장, 소위 같은 분야 가져야 "스레드 전용"메모리 .

스레드 자바 메소드를 실행하는 경우, 실행중인 카운터 기록은 가상 머신 바이트 코드 명령들의 어드레스 , 기본 방법이 수행되고,이 경우 카운터 값이 널 (미정의) . 이 메모리 영역은 지역 OutOfMemoryError가 자바 가상 머신 사양의 모든 상황에 제공 할 수있는 유일한 하나입니다.

자바 가상 머신 스택 : 메모리 모델 Java 메소드가 실행 : 푸시 스택 프레임을 팝

프로그램 카운터와 마찬가지로, 자바 가상 머신 스택 (Java 가상 머신 스택은) 개인적으로, 수명주기와 동일한 스레드를 소유하고 있습니다.

실행되는 가상 머신 스택 자바 메모리 모델 기재된 방법은 : 각각의 공연하면서 작성하는 방법 스택 프레임 로컬 변수 테이블 오퍼랜드 스택, 동적 링킹, 수출 방법을 저장한다. 각 메소드 호출 절차가 완료 될 때까지 가상 머신에서 스택에서 스택 밀어 스택 프레임에 대응한다.

종종 상기 힙 (힙)과 메모리 스택 (스택) 스택 메모리 스택은 가상 머신 또는 가상 머신 스택 로컬 변수 테이블 섹션을 의미한다.

로컬 변수 테이블 데이터 (부울 바이트 문자, 단락의 공지 된 각종 형태의 편집에 저장된 , INT, 플로트, 긴 이중), 오브젝트 참조 (레퍼런스 타입) 및 입력 리턴 주소 (명령어 바이트 코드의 주소를 가리키는 ).

기본 방법은 스택 : 네이티브 메소드의 구현을

네이티브 메소드 스택 (기본 방법 스택) 및 가상 머신 스택의 역할은 그 차이와 매우 유사하다 Java 가상 머신 방법 가상 머신의 실행 스택 (즉, 바이트 코드) 서비스네이티브 메소드 스택은 가상 머신 서비스에 사용되는 기본 방법 .

Java 힙 : 오브젝트 스토리지 배열 인스턴스

대부분의 애플리케이션의 경우, Java 힙 (자바 힙) 에서 Java 가상 머신의 메모리 관리입니다 메모리의 가장 큰 조각 . 자바 힙이되는 메모리 영역에 모든 스레드에 의해 공유 에, 때 가상 머신의 시작을 만들었 . Java 힙의 유일한 목적은 객체의 인스턴스를 저장 , 객체 인스턴스는 메모리를 할당하는 거의 모든 여기에 있습니다. 이것은 자바 가상 머신 사양에 설명되어 있습니다 : 모든 객체 인스턴스와 배열은 힙에 할당되어야한다 . 기본 키 기술의 탈출 JIT 컴파일러 분석의 발전이 성숙으로, 스택에 분포, 스칼라 교체 최적화 기술은 몇 가지 미묘한 변화가 발생합니다, 모든 객체는 힙에 할당되어 점차적하게 적은 "절대적으로"를 .

자바 힙이 가비지 컬렉터에 의해 관리되는 메인 영역 , 또한 종종 언급된다 (가비지 수집이 힙) GC 힙 .

방법 구역 : 클래스 정보 저장 가상 머신로드, 상수, 정적 변수와 컴파일 된 코드

각 스레드가 될 때 지구 방법 (방법 지역)와 Java 힙이 공유 하는 데 사용되는 메모리 영역 정보 기억 입력은 가상 머신에로드되고, 상수, 정적 변수, 타임 컴파일러 코드 및 다른 데이터를 컴파일한다 .

이 지역의 메모리 회복은 주로 재활용 및 유형에 대한 상수 풀을 언로드합니다.

상수 풀 런타임 : 방법의 영역 부분은, 컴파일러가 다양한 부호 및 리터럴을 생성 기억

런타임 상수 풀 (런타임 상수 풀) 영역에있어서의 일부이다. 클래스 필드, 방법 및 인터페이스 기술 정보에 부가하여 클래스 파일 버전, 정보도이다 (상수 풀 테이블로) 정수 풀 저장, 컴파일 생성 다양한 문자 참조 및 심볼 이 부분 동작에있어서, 상기 클래스 로딩 시정 스토리지 풀 후 영역을 입력한다.

(정수 풀 포함) 각 파트의 자바 가상 머신 형식의 클래스 파일은 각 바이트는 데이터가 가상 시스템에서 인식로드 및 실행됩니다 사양을 준수해야 저장하는 데 사용되는 엄격한 규칙을 가지고 그러나 런타임 상수 풀, Java 가상 머신의 사양은이 분야에서 달성하기 위해 자신의 필요에 따라 제공 할 수있는 서로 다른 공급 업체의 상세 정보를 필요로하지 않는다. (부호의 부가는 직접적인 기준 시간 상수는 풀 동작에 저장된다)

각 영역에 대한 자바 가상 머신 런타임 데이터는 고립 된 스레드 스레드의 공유에 의해 발생 될 수 있습니다 각각의 자바 가상 머신 런타임 데이터 영역의 다음과 같은 특정 기능, 공유 스레드 또는 스레드 및 격리도 있습니다, 자신의 기능을 가지고있다 요약 :
Snipaste_2019-08-02_13-24-50.jpg

시간에 더하여, 자바 외부 메모리가 로컬 직접적인 방법에 의해 할당 될 수 있으며,이 메모리는 직접 메모리 호출된다. 직접 메모리 (직접 메모리 직접 메모리 기본) 데이터 영역의 부분은 가상 머신을 실행이나 사양에 정의 된 Java 가상 머신의 메모리 영역입니다하지 않습니다. 그러나이 메모리의 일부는 OutOfMemeoryError 예외로 이어질 수, 자주 사용하지 마십시오.

JDK 1.4에서 새로 NIO (새 입력 / 출력)를 도입에 따라 유형, 추가 채널 (채널) 및 버퍼 (버퍼) 의 I / O 모드에서,이 네이티브 라이브러리를 사용하여 할당 된 힙 메모리 바로 바깥 후, 작동 기준으로서 자바 DirectByteBuffer이 메모리 오브젝트의 스택을 저장함으로써. 앞뒤로 Java 힙 힙과 기본에 복제 된 데이터를 피하기 위해 이것은 크게 몇 가지 시나리오에서 성능을 향상시킬 수 있습니다.

메모리 과정에서 객체를 초기화

public class Person{
    String name;
    int age;
}

주요 방법에서, 개체 아래 JVM 메모리를 할당에있어서, 생성 된
Snipaste_2019-08-02_14-04-31.jpg
클래스 정보는, 하드 디스크 첫번째 클래스 로더로부터 상수, 정적 변수도 컴파일러 경우 가상 머신이로드 바이트 코드 (의 .class) 파일을로드 컴파일 된 코드 데이터에 영역에있어서, 상기 방법은 주 (스택 프레임) 객체를 생성, Java 가상 머신 스택에 저장되는 경우, 개체 참조 테이블은, 로컬 변수 스택 프레임의 특정 객체 할당 및 힙 저장된 메모리.

추천

출처www.cnblogs.com/minghaiJ/p/11288349.html