Esto se almacena en el "grupo constante" de la clase (junto con todo lo demás, clases y nombres de métodos, etc.).
Usaría Javap para mirar el Bytecode en un formato legible.
Ver El excelente blog de Anton Arhotov sobre Bytecode Fundaments
Un ejemplo tomado de allí para la clase:
public class Foo {
private String bar;
public String getBar(){
return bar;
}
...
... produce bytecode:
public java.lang.String getBar();
Code:
0: aload_0
1: getfield #2; //Field bar:Ljava/lang/String;
4: areturn
Y tiene una piscina constante:
Compiled from "Foo.java"
public class Foo extends java.lang.Object
SourceFile: "Foo.java"
minor version: 0
major version: 50
Constant pool:
const #1 = Method #4.#17; // java/lang/Object."<init>":()V
const #2 = Field #3.#18; // Foo.bar:Ljava/lang/String;
const #3 = class #19; // Foo
const #4 = class #20; // java/lang/Object
const #5 = Asciz bar;
const #6 = Asciz Ljava/lang/String;;
const #7 = Asciz <init>
const #8 = Asciz ()V;
const #9 = Asciz Code;
const #10 = Asciz LineNumberTable;
const #11 = Asciz getBar;
const #12 = Asciz ()Ljava/lang/String;;
const #13 = Asciz setBar;
const #14 = Asciz (Ljava/lang/String;)V;
const #15 = Asciz SourceFile;
const #16 = Asciz Foo.java;
const #17 = NameAndType #7:#8;// "<init>":()V
const #18 = NameAndType #5:#6;// bar:Ljava/lang/String;
const #19 = Asciz Foo;
const #20 = Asciz java/lang/Object;
Puede rastrear la referencia a String
de Foo#getBar
a través de la piscina constante como:
- Getfield #2
- donde #2 es un campo, haciendo referencia al #3. #18
- donde #3 está haciendo referencia a la clase #19
- que es clase
Foo
- que es clase
- y #18 es una referencia de NameAndtype #5 y #6
- y #5 es bar (campo)
- y #6 es la referencia a
java.lang.String
- donde #3 está haciendo referencia a la clase #19
Aconsejo leer el blog de Anton. ¡Está realmente bien hecho!
También leí Artículo interno JVM de James D. Bloom ya que cubre mucha arquitectura interna JVM. Sin embargo, tenga en cuenta las fechas y las versiones a las referenciadas a medida que cambian las cosas (como el uso del montón de Java en Java 8 y en la incrustación.