Questo è memorizzato nel "pool costante" della classe (insieme a tutto il resto, classi e nomi di metodi, ecc.).
Utilizzeresti Javap per guardare il bytecode in un formato leggibile.
Vedere L'eccellente blog di Anton Arhipov sui fondamentali bytecode
Un esempio preso da lì per la lezione:
public class Foo {
private String bar;
public String getBar(){
return bar;
}
...
... resa bytecode:
public java.lang.String getBar();
Code:
0: aload_0
1: getfield #2; //Field bar:Ljava/lang/String;
4: areturn
E ha una piscina costante:
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;
Puoi rintracciare il riferimento a String
da Foo#getBar
attraverso la piscina costante come:
- Getfield #2
- dove #2 è un campo, riferendosi #3. #18
- dove #3 fa riferimento alla classe #19
- che è classe
Foo
- che è classe
- e #18 è un nameandtype che fa riferimento #5 e #6
- e #5 è bar (campo)
- e #6 è il riferimento a
java.lang.String
- dove #3 fa riferimento alla classe #19
Consiglio vivamente a leggere il blog di Anton. È davvero ben fatto!
Ho anche letto L'articolo interno di James D. Bloom JVM poiché copre molta architettura interna JVM. Sii consapevole delle date e delle versioni citate sebbene le cose cambiano (come l'uso del cumulo di Java in Java 8 e la corda in linea.