JVM이 메모리 영역 중 5 상세하고 빠른 읽기 쓰기 구분됩니다

첫째, 급속한 능력

1. JVM은 무엇입니까

  JVM은 우리가 종종 자바 가상 머신이라고하는 것이, Java 가상 머신의 약자입니다. 가상 컴퓨터는 우리가하는 일의 프로세서, 스택, 특정 이해로, 자신의 하드웨어 아키텍처를 갖춘 추상적 인 컴퓨터이다. 이제 우리는 당신이 먼저 전화 javac 컴파일러를 통과해야합니다, 당신은 자바 파일을 실행하려는 것을 알아야 코드는 클래스 파일로 컴파일하고 식별 할 수있는 각 플랫폼에 대한 기계 코드에 JVM 클래스 파일에 의해 해석하고, 궁극적으로 크로스 플랫폼 실행 코드를 달성한다 .
의 image.png

는 JDK, JRE, JVM 사이 2. 관계

  • JDK : 인 중국에 대한 자바 개발 키트, 자바 개발 키트라는, 자바와 관련된 모든 것들이 같은 JVM 등 운영 환경 JRE, 자바의 핵심 코드로, 그 안에 포함되어 있습니다.
  • JRE : 자바 런타임 환경이라고, 당신은 자바 환경에서 작업을해야합니다 자바 파일을 실행하려는 자바 런타임 환경으로 중국, 이러한 환경을 제공하는 JRE입니다.
  • JVM :로 이미 자바의 핵심 부분입니다 JVM을 언급했다.
    간단하게이 세 사이의 관계를 이해하는 다이어그램을 사용합니다 :
    도 하나 다음 JDK, JRE, JVM의 관계

3. JVM 조성물

그림 2 : JVM도의 조성입니다.
  JVM 학생들이 그림이 조금 무지 힘이 될 수 있습니다보고 난 후에 이해하지 못하는,하지만 괜찮아, 얼마나 1.java 코드 실행, 세 가지 매우 중요한 내용이 있습니다 이해 JVM이 사진을 넣고 싶어? 2. 어떻게 메모리 관리? 3. 어떻게 스레드 자원 사용? 배울 수있는 질문을 머리에 인상이있다.

아마 파일 자바 프로세스를 실행하십시오

  자바 소스 파일을 실행하려면, 당신은을 .class 파일, 바이트 코드 파일로 javac 컴파일러를 통과해야합니다. JVM은 인터프리터는 특정 기계에 기계 코드로 해석했다. 각 시스템에서 통역이 동일하지 않습니다, 우리는 자주 사용하는 윈도우와 리눅스 시스템, 자바 플랫폼은 교차 할 수있는 이유가있다. 처음부터 프로그램을 실행하면 프로그램이 종료 또는 종료 여러 가상 머신 인스턴스를해야합니다 여러 프로그램을 실행, 가상 머신 인스턴스를 시작, 가상 머신 인스턴스는 여러 가상 시스템간에 데이터가, 죽을 것이다 공유되지 않습니다.

두, JVM 런타임 데이터 영역

1. 구성 런타임 데이터 영역

  자바 프로그램의 실행에 가상 머신은 여러 지역에 대한 자신의 사용과 각각 자신의 메모리 관리를 분할, 시간을 만들고 시간이 동일하지 파괴 할 것이다. 메소드 영역, 스택, 스택 가상 머신, 네이티브 메소드 스택, 프로그램 카운터 : 주 프로그램 실행의 메모리 영역에서는이 다섯으로, 즉를 나눌 수 있습니다. 다음 그림에 의해 설명 될 수 있습니다 :
자바 가상 머신 런타임 데이터 영역

2. Java 힙

  자바 힙 메모리 자바 가상 머신 관리의 가장 큰 부분은 메모리 영역의 모든 스레드에 의해 공유된다. 존재의 유일한 목적은 객체 인스턴스, 거의 모든 객체 인스턴스 여기에 할당 된 메모리를 저장하는 것입니다. 하지만 지금은 기술의 지속적인 개발과 함께, 모든 객체 인스턴스는 힙 메모리에 할당되고, 또한 스택이 할당 될 수 있습니다. 상세한 가비지 컬렉션 방법을 언급한다 후 가비지 콜렉션 Java 가상 머신의 주 관리가이 지역에 있으므로 인하여 큰 면적으로하고, 개체의 인스턴스 다양한 저장한다. 긴 논리적으로 연속 될 수 JVM 스펙 스택은 소정의 불연속적인 물리 메모리 공간에있을 수있다. 그리고 그것은 인스턴스에 대한 힙 할당에 충분한 메모리가없는 경우, -Xmx와 -Xms 힙 메모리 크기를 확장 할 수 있으며, 힙을 확장 할 수없는 경우, 예외를 OutOfMemoryError가보고됩니다.

방법 3 영역

자바 힙과 같이, 메소드 영역은 메모리 영역의 각 스레드에 의해 공유되는,이 영역은 내용에 클래스 (클래스 명, 필드 정보, 메소드 정보) 코드 정적 변수, 상수 및 컴파일러를 저장하는 데 사용된다 . JVM 사양 힙 및 방법 영역 만 영역 방법은 로직 스택의 일부로서 설명되어 구분하지 않습니다,하지만이 아닌 별명이라고 스택 (비 힙)가, 목적은 자바 힙에서 분리하는 것입니다. 핫스팟 가상 머신에서 개발 된 경우 생각의 재활용 쓰레기 수집 메커니즘을 대신하여 개척에 따르면, 메소드 영역은 자바 가비지 컬렉션 힙, "영구 세대 '라고 할 수있다 (그러나 이해 될 수 있지만, 본질은 동일하지 않습니다) 영구 세대라는 섹션, 메서드 영역을 구현하는 데 사용되는이 지역으로 나누어, 메소드 영역에 대한 특별한 메모리 관리자를 개발하지 않고, 메모리 관리의 일환으로이 같은 Java 힙을 관리 할 수있는 등의 핫스팟 가비지 컬렉터.

런타임 상수 풀

런타임 상수 풀은 클래스 파일 버전 클래스 필드, 메소드, 및 인터페이스 기술 정보에 부가하여, 정보는 또한, 영역에있어서의 일부가 편집 및 저장 중에 발생하는 문자의 다양한 상수 풀 기호 참조는, 이 부분은 클래스 로딩 시간 상수 풀의 운영 방법에 영역을 입력합니다. 자바 (자연 상수 풀 포함) 클래스 파일의 각 부분에 대한 가상 머신 형식은 각 바이트가 규격의 요구 사항을 충족해야합니다 데이터를 저장하는 데 사용됩니다, 엄격한 규칙을 가지고, 이것은 가상 머신에 의해 인식됩니다 로딩 및 실행.

4. 프로그램 카운터

프로그램 카운터 상기 도면에서 큰 영역이지만, 그러나 실제로 더 작은 메모리 공간의 실행 현재 쓰레드 라인 번호 표시 바이트 코드로서 볼 수있다. 바이트 코드 인터프리터 옆에 의해 결정되는 작업을 수행 할 때. 우리는 모두 알고 스레드 스위치하도록 위해, CPU 프로세서 (단심 가설) 명령들의 스레드 만 실행될가 있다고하는 멀티 스레드 실행 스레드의 CPU가 교대로 스위칭 스레드에 의해 달성되는 경우에 실행이 맞는 위치로 복원 될 수 후, 각 스레드는 독립적으로 서로 독립적 저장소의 스레드 사이에서, 우리는 "스레드 개인"메모리에 대한 메모리 영역이 유형 전화, 별도의 프로그램 카운터를 가져야한다. 물론, 프로그램 카운터는 개인 스레드입니다. 스레드 자바 메소드를 실행하는 경우, 프로그램 카운터가 실행되고있는 가상 머신 바이트 코드 명령어의 주소를 기록하고, 기본 방법을 실행하는 프로그램 카운터 값이 널 레코드 (불확정) 인 경우,이 메모리 영역은 자바 인 그것은 어떤 지역 OutOfMemoryError가 자바 가상 머신 사양의 상황을 제공하지 않습니다.

5. Java 가상 머신 스택

우리는 종종 넣어 자바 메모리 거친 스택은 두 부분으로 스택, 힙 및 스택, 자바 가상 머신 또는 가상 머신 스택, 로컬 변수 테이블 섹션의이 부분으로 나누어 져 있습니다. 프로그램 카운터와 같이, 가상 머신 스레드 스택은 동일한 스레드와 개인의 라이프 사이클이다. 각 방법에있어서의 적층 구조 (스택 프레임), 대응하는 메소드가 호출 될 때마다 스택 프레임, 로컬 변수 테이블 오퍼랜드 스택 동적 정보리스트는, 상기 방법 수출 기억 스택 프레임을 생성하기 위해 동시에 실행된다. 각 방법은 프로세스 스택의 스택으로 스택에서 가상 머신 스택 프레임 상당의 처음부터 끝까지 수행.

  • 로컬 변수 테이블 : 이름에서 알 수 있듯이, 그 데 사용되는 참조 형 변수, 포인터를 저장 대 (방법 비 정적 변수 수명 함수 파라미터 포함)에있어서의 국소 변수, 기본 데이터 타입, 이체 값을 저장할 객체입니다. 방법을 입력 할 때,이 방법은 스택 프레임에 할당 된 많은 지역 변수를 필요로하므로 알려진 고정을 위해 필요한 공간의 이러한 유형의 주소 및 반환 값의 참조 형 저장된 변수의 기본 데이터 형식을 보낸 공간은 완전히 로컬 변수 테이블의 크기를 변경하지 않을 동작 중에있어서 결정된다.
  • 실행하는 상수 풀 기준점 : 불가피 클래스에 정의 된 상수 프로세스의 실행 중에 사용은 따라서 기준 런타임 상수 풀 스택 프레임 포인트에 저장된다.
  • 방법은 주소를 반환 : 당신이 스택 프레임 방식의 반환 주소를 저장해야하므로 메소드 호출의 구현의 끝 전에 그 자리로 돌아 후.

6. 네이티브 메소드 스택

기본 방법 스택 및 가상 머신의 스택은 매우 비슷하지만 차이점은 자바 스택 방식 서비스의 가상 머신의 구현으로, 가상 머신의 네이티브 메소드 스택이 기본 방법 서비스 인 가상 머신이다. 일부 가상 머신과는 네이티브 메소드 스택 구분 및 결합이 직접 일 핫스팟 가상 머신으로 가상 머신을, 스택하지 않습니다.

사진 요약을 사용 (7)

JVM 메모리 요약

 

원래 주소 : HTTPS : //www.cnblogs.com/chaogu94/p/12529692.html

추천

출처www.cnblogs.com/fuqiang-terry/p/12529716.html