>  기사  >  Java  >  JVM 고급 기능 - Java 메모리 구조 영역 소개

JVM 고급 기능 - Java 메모리 구조 영역 소개

巴扎黑
巴扎黑원래의
2017-06-26 10:21:501673검색

영역 분할:

프로그램이 실행되는 동안 Java 가상 머신은 아래와 같이 메모리를 다양한 기능을 가진 여러 영역으로 나눕니다.

이 그림에는 다양한 메모리 분할 영역이 나열되어 있습니다.

스레드 전용: 프로그램 카운터, 가상 머신 스택, 로컬 메소드 스택

스레드 공유: 힙, 메소드 영역

아래에서는 각 영역의 기능과 기능을 하나씩 소개합니다

프로그램 카운터 :

   1. 프로그램 카운터는 주로 실행 중인 바이트코드 라인 번호를 가리키는 데 사용됩니다. 각 스레드에는 서로 공유되지 않는 별도의 프로그램 카운터가 있으며, 프로그램은 가리키는 바이트코드 라인 번호를 변경하여 실행됩니다.

   2. 루프, 점프, 예외 처리 등과 같은 메커니즘은 모두 이 카운터에 의존하여 완료됩니다.

   3. 프로그램이 Java 프로그램을 실행하면 실행 중인 바이트코드를 가리킵니다. 네이티브 메서드이면 그 값은 비어 있습니다

Java 가상 머신 스택:

   1. 가상 머신 스택은 스레드 전용입니다. 각 메서드는 로컬 변수를 저장하기 위해 실행될 때 스택 프레임을 생성합니다. table., 메소드 종료, 동적 링크, 피연산자 스택 및 기타 정보,

  2. 각 메소드의 실행 프로세스는 가상 머신 스택의 스태킹에서 팝핑까지의 과정입니다.

   많은 사람들이 Java 메모리를 힙 메모리로 나눈다고 말합니다. 및 스택 메모리, 여기서 스택 메모리는 위에서 언급한 가상 머신 스택

  , 기본 데이터 유형(intbytecharlong 등), 객체 참조 및 컴파일러가 알고 있는 반환 주소 유형을 주로 저장하는 지역 변수 테이블

  확장:

   객체 참조(참조): 객체 자체가 아니며, 객체의 시작 주소를 가리키는 참조 포인터일 수도 있고, 객체를 나타내는 핸들이거나 기타 관련 위치일 수도 있습니다.

   ReturnAddress: 객체가 아닙니다. Java API를 입력하면 우리가 원하는 것이 될 수 없습니다. 호출하면 바이트코드 명령어의 주소를 가리킵니다.

기본 메소드 스택

가상 머신 스택과 유사하게, 제공하는 메모리입니다. 기본 메소드

Java 힙

  힙 메모리는 스레드 공유 메모리로, 주요 목적은 객체를 저장하는 것이며 가비지 컬렉터가 관리하는 주요 영역이기도 합니다.

  


메서드 영역(비힙이라고도 함)

                                      역시 메모리 공유 메모리이며, 저장하는 데 사용됩니다. 로드된 클래스 정보, 상수, 정적 변수, JIT(Just-In-Time) 컴파일러로 컴파일된 코드 등     런타임 상수 풀 : 메소드 영역의 일부이며 컴파일러에서 생성된 다양한 리터럴 및 기호 참조를 저장하는 데 사용됩니다

 

다이렉트 메모리:

  가상 머신 런타임 데이터 영역의 일부가 아니며 JVM에서 관리하는 메모리에 속하지 않습니다.    NIO에서는 네이티브 기능을 사용하여 다이렉트 메모리를 직접 할당할 수 있습니다. , 그리고 이 메모리에 대한 참조로 Java의 DirectByteBuffer 객체를 통해 작동합니다

   장점: 메모리 복사 단계가 절약되고 효율성이 더 빠릅니다

   단점: 제어가 어렵고 메모리 누수가 발생하기 쉽습니다

 

위 내용은 JVM 고급 기능 - Java 메모리 구조 영역 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.