Stavo leggendo bytecode Java e ho visto questo:Lettura di un'istruzione bytecode Java: cosa significa il numero?
getfield #5 (Field java.lang.String name)
Cosa #5
significa?
E come posso scrivere un programma in bytecode?
Stavo leggendo bytecode Java e ho visto questo:Lettura di un'istruzione bytecode Java: cosa significa il numero?
getfield #5 (Field java.lang.String name)
Cosa #5
significa?
E come posso scrivere un programma in bytecode?
Java file di classe e bytecode
file di classe Java (bytecode-files) è composto da diverse componenti:
http://en.wikipedia.org/wiki/Java_class_file
Il numero # 5 si riferisce semplicemente a una posizione nel pool costante. E in questa posizione viene trovato un valore CONSTANT_FieldRef che contiene un riferimento a un CONSTANT_NameAndType tra altri attributi. E CONSTANT_NameAndType contiene un riferimento a un CONSTANT_Utf8
Così il flusso si presenta così (che contiene l'attuale string/nome.):
getfield #number -> FieldRef -> NameAndType -> Utf8 -> string
http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
Così, invece di salvare un'intera stringa in ogni getfield
l'istruzione di un numero è stata salvata. Ciò migliora le prestazioni nell'interprete (o JIT) e lo spazio nel file di classe.
bytecode a mano scrittura
bytecode scritte a mano possono essere assemblate in un file di classe con questo strumento (che contiene un sacco di esempi):
L'istruzione getfield
(IIRC) crea un riferimento nel pool costante del file di classe per informazioni su quale campo deve essere cercato. Il numero 5 indica "numero di lotto costante 5" e questo pool costante contiene informazioni che indicano "cercare il campo name
di tipo java.lang.String
. Il motivo è che mantiene le stesse dimensioni dell'istruzione getfield
, indipendentemente del nome o del tipo del campo da cercare
Non sono sicuro di capire cosa intendi con "come posso scrivere il programma in bytecode?" Questa è una domanda abbastanza aperta, è come chiedere come scrivere programmi in qualsiasi lingua, e richiede un sacco di apprendimento. Si consiglia di esaminare la Jasmin Java assembler, che può semplificare notevolmente questo processo.
Spero che questo aiuti!
scrivendo un programma in Java e compilarlo. – Jeffrey
Cosa stai cercando di realizzare? Ottimizzazioni simil-ASM per JVM? – Thomas