Prev   Top   Next 

Il Class Manager

Il Class Manager è il modulo della Macchina Astratta che si interfaccia con il "mondo esterno". Tale componente si preoccupa di caricare le classi che formano il programma da eseguire all'interno della Method Area, prelevandone le definizioni da un insieme eterogeneo di sorgenti ( Hard Disk, LAN, Web, etc ...), genericamente indicato con il termine Class Repository.
Poiché il Class Manager dialoga sia con l'esterno che con il resto della macchina, è possibile evidenziare al suo interno due parti, una per l'interfaccia con il Class Repository e l'altra per l'interelazione con il resto della macchina.

Schema funzionale del Class Manager

La prima di tali parti è il Class Loader, ed è quella che realmente si occupa di ricercare le definizioni di classe nel Class Repository. I dettagli di come avvenga questo processo di loading non vengono trattati: in linea di principio si tratta di elaborare le informazioni contenute nel file .class per ottenere una Class Structure ( cfr. Method Area ) per la classe o l'interfaccia che si sta caricando. In tale trasformazione può essere necessario risalire la gerarchia delle classi, ( in particolare per consentire la creazione della Field Table all'interno della Class Structure, usata nella creazione di nuovi oggetti ).
Si noti inoltre che caricare una classe provoca anche l'avvio del processo di loading per la superclasse o per tutte le interfacce che tale classe implementa, e cosí via ricorsivamente.

Una volta caricata una classe, il Class Manager deve tenerne traccia, e per questo dispone di un'altra sotto-componente, indicata in figura come Class Table. Tramite questa tabella è possibile risalire, per ogni classe, alla Class Structure ad essa associata.

Ma il compito del Class Manager non è solo quello di creare la Class Structure per le varie classi e interfacce; esso è anche preposto alla manipolazione di questa struttura dati.
L'interprete si rivolgerà al Class Manager, ad esempio, per accedere ai campi di classe di un dato tipo, o per sapere quanto spazio allocare per creare una nuova istanza di una classe, o ancora per conoscere i valori delle costanti a cui i bytecode del metodo corrente fanno riferimento tramite indicizzazione nella Run-Time Costant Pool.

Il Class Manager è anche responsabile del linkage dinamico, e di ogni eventuale ottimizzazione di questo processo: è tale componente che si occupa di risolvere i link contenuti nella Run-Time Costant Pool di ogni Class Structure, che inizialmente sono tutti simbolici (ovvero fanno riferimento alle varie classi e ai loro membri per mezzo di stringhe rappresentanti il loro nome ), e possono, a seconda del livello di complessità del Class Manager, successivamente venire sostituiti con puntatori, offset e quant'altro possa servire ad accelerare il successivo reperimento delle medesime informazioni.

 Prev   Top   Next