>  기사  >  Java  >  JVM 고급 기능-2. 힙 내 객체의 JVM 할당, 레이아웃 및 액세스 프로세스

JVM 고급 기능-2. 힙 내 객체의 JVM 할당, 레이아웃 및 액세스 프로세스

巴扎黑
巴扎黑원래의
2017-06-26 11:31:441686검색

 앞서 jvm 런타임 데이터 영역을 소개한 후 메모리에 있는 데이터의 다른 세부 사항을 설명하여 데이터가 어떻게 생성되고 배치되고 액세스되는지 살펴보겠습니다.

   1. 객체 생성

 1. 객체

객체를 생성하고 할당하는 두 가지 주요 방법이 있습니다: 포인터 충돌 및 사용 가능 목록

  포인터 충돌 :

힙 메모리가 절대적으로 규칙적이라고 가정하면, 새로운 경우 개체가 메모리 공간을 할당하면 새 개체에 필요한 크기의 섹션이 나올 때까지 포인터를 여유 공간으로 이동하기만 하면 됩니다. her in in in in in in & >> 일반적으로, 일반적으로, 컴팩트 한 (압축) 프로세스가있는 수집기를 사용할 때 포인터 충돌이 사용됩니다. 어떤 메모리가 사용 가능한지 기록하기 위해 목록을 유지해야 하며, 공간을 할당할 때 목록에서

조각을 찾습니다. 충분히 큰 공간을 개체 인스턴스로 나누고 목록 기록을 업데이트합니다

  2. 객체 초기화 및 설정

  

Initialization

: 메모리 할당이 완료된 후 객체가 초기화됩니다. 가상 머신은 초기화된 메모리 공간을 0의 값으로 초기화합니다.

   이것이 객체 필드의 인스턴스를 사용할 수 있는 이유입니다. Java 코드에서 초기화 없이

   Settings: 그 후 가상 머신은 객체에 필요한 몇 가지 설정을 수행하며 주로 클래스의 메타데이터 정보, 객체의 해시 값 및 객체 헤더 생성 등을 저장합니다. .    

init

: 위의 두 단계 후에 개체가 생성되지만 모든 필드는 여전히 0 값입니다. 마지막 단계는 init 메소드를 실행하고 프로그래머의 의도에 따라 객체를 초기화하는 것입니다

   위의 세 단계를 완료하면 객체가 생성됩니다.

  II. 객체의 메모리 레이아웃

                                                                                        업''                                                     일반적으로 객체 헤더, 인스턴스 데이터, 정렬 패딩 세 부분으로 나뉜다   

객체 헤더

:    객체의 객체 헤더 설정 단계에서 언급했듯이, 즉 설정 단계에서 일부 클래스 메타데이터 정보, 해시 값, 생성 기간 등이 개체 헤더에 저장됩니다. 개체는 주로 런타임 데이터와 유형 포인터의 두 부분으로 나뉩니다.

런타임 데이터

: 위의 개체 설정 단계에 저장된 해시 코드, 세대 정보, 잠금 상태 식별, 스레드가 보유한 잠금 등을 주로 저장합니다.

    타입 포인터: 객체의 클래스 메타데이터, 즉 객체가 어떤 클래스의 인스턴스인지를 주로 저장하는 포인터. 또한, 객체 유형이 배열인 경우                        는 다음 위치에도 저장됩니다. 객체 헤더는 데이터 길이를 나타내는 데이터

Alignment padding

: 반드시 존재하는 것은 아닙니다. Hotspot에서는 객체의 시작 주소가 8바이트의 배수여야 합니다.                                                   ​lain will`Alignment Hotspot의 padding'은 객체의 시작 주소에서 8바이트의 배수가 되어야 합니다. 객체 인스턴스 부분이 정렬되지 않은 경우 정렬 패딩을 사용하여 완성합니다.

  

3. 객체 액세스 위치 지정

  Java 프로그램은 스택의 참조 데이터를 통해 객체 인스턴스를 작동하므로 참조일 뿐입니다. jvm의 특정 위치 지정 방법은 서로 다릅니다

  두 가지 주요 구현 방법이 있습니다. : 핸들과 직접 포인터를 사용하세요   

   

Handle pool:

   원리: 영역은 Java 힙에 핸들 풀로 따로 설정되고 참조는 포인터와 개체 유형이 포함된 핸들 주소를 저장합니다. 객체 인스턴스 데이터 포인터

  장점: 객체가 이동하면 핸들 풀에 저장된 주소만 변경하면 됩니다.  직접 포인터

    원리: 직접 포인터를 사용하면 핸들 풀에 저장된 주소 객체는 참조에 저장됩니다

   장점: 위치 지정 시간이 절약되고 더 효율적입니다

   핫스팟은 직접 포인터 방식을 사용합니다   

     

    

 

  

      

위 내용은 JVM 고급 기능-2. 힙 내 객체의 JVM 할당, 레이아웃 및 액세스 프로세스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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