2012-02-17 17 views

risposta

6

Java file di classe e bytecode

file di classe Java (bytecode-files) è composto da diverse componenti:

http://en.wikipedia.org/wiki/Java_class_file

  • numero magico: 0xCAFEBABE
  • versione del file di classe Formato: le versioni minori e principali del file di classe
  • Pool costante: pool di costanti per la classe
  • (...)
  • campi: Eventuali campi nella classe
  • metodi: Tutti i metodi della classe
  • attributi: Tutti gli attributi della classe (ad esempio il nome del file sorgente, ecc)

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):

http://jasmin.sourceforge.net/

4

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!