variable una tipos tipo referencias referenciados referencia que parametros parametro objetos objeto instancia ejemplos datos como java jvm

una - variable objeto java



Qué está en el encabezado del objeto java (3)

La siguiente presentación le da una idea general de los contenidos del objeto y el encabezado del objeto: http://www.slideshare.net/cnbailey/memory-efficient-java

El encabezado real de cualquier objeto es el proveedor de JVM, la versión y el tipo de objeto específico.

¿Podría darme alguna información sobre lo que se almacena exactamente en el encabezado del objeto? Lo sé, es probable que sea dependiente de JVM, ¿pero tal vez para HotSpot al menos? Estoy buscando una descripción exacta específicamente para una primera fila.

He leído información que no puedo verificar positivamente con la información que encuentro. ¿Tal vez tienes un enlace a la wiki de OpenJDK que lo dice todo?



Para HotSpot:

El encabezado del objeto consiste en una palabra de marca y un puntero de klass.

La palabra de marca tiene tamaño de palabra ( 4 byte en arquitecturas de 32 bits, 8 byte en arquitecturas de 64 bits) y

el puntero klass tiene tamaño de palabra en arquitecturas de 32 bit . En 64 bit arquitecturas de 64 bit , el puntero de klass tiene un tamaño de palabra, pero también puede tener 4 byte si las direcciones del montón se pueden codificar en estos 4 bytes .

Esta optimización se denomina "oops comprimidos" y también puede controlarla con la opción UseCompressedOops .

También puedes encontrar una entrada wiki sobre esto 1 .

La palabra de marca se usa realmente para muchas cosas.

  1. Uno es Biased Locking 2 través del cual HotSpot puede implementar un bloqueo eficiente.
  2. También se usa durante GC to set forward pointers y to store the age of the objects . El código hash de identidad de un objeto se puede almacenar dentro de la marca ( System.identityHashCode / Object.hashCode one).

Hay un comentario en el código fuente de 1 que describe el diseño dependiendo de la arquitectura:

// 32 bits: // -------- // hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object) // JavaThread*:23 epoch:2 age:4 biased_lock:1 lock:2 (biased object) // size:32 ------------------------------------------>| (CMS free block) // PromotedObject*:29 ---------->| promo_bits:3 ----->| (CMS promoted object) // // 64 bits: // -------- // unused:25 hash:31 -->| unused:1 age:4 biased_lock:1 lock:2 (normal object) // JavaThread*:54 epoch:2 unused:1 age:4 biased_lock:1 lock:2 (biased object) // PromotedObject*:61 --------------------->| promo_bits:3 ----->| (CMS promoted object) // size:64 ----------------------------------------------------->| (CMS free block) // // unused:25 hash:31 -->| cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && normal object) // JavaThread*:54 epoch:2 cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && biased object) // narrowOop:32 unused:24 cms_free:1 unused:4 promo_bits:3 ----->| (COOPs && CMS promoted object) // unused:21 size:35 -->| cms_free:1 unused:7 ------------------>| (COOPs && CMS free block)

También puede encontrar el archivo de encabezado de oop 2 .