3.1 IL SOTTOSISTEMA CLASS LOADER
La parte della JVM che recupera e carica i tipi è il sottosistema class loader. La JVM contiene due tipi di class loader : un class loader di bootstrap che è parte dell'implementazione della JVM e class loaders user-defined che sono parte dell'applicazione Java in esecuzione. Le classi caricate da differenti class loader sono piazzati in differenti namespaces all'interno dalla JVM.
Il sottosistema class loader coinvolge molte altre parti della JVM e diverse classi della libreria java.lang. Ad esempio, class loader user-defined sono normali oggetti Java le cui classi derivano dal java.lang.ClassLoader. I metodi della classe ClassLoader permettono alle applicazioni Java di accedere al meccanismo di class loading della JVM. O anche, per ogni tipo che la JVM carica, essa crea un'istanza della classe java.lang.Class per rappresentare quel tipo. Come tutti gli oggetti, i class loader user-defined e le istanze della classe Class risiedono sullo heap. I dati per i tipi caricati risiedono nell'area metodo.
Figura 3. Il sottosistema Class-loader
Il sottosistema class loader oltre che localizzare ed importare i dati binari per le classi. Esso deve realizzare ulteriori operazioni nel seguente specifico ordine:
1. Caricamento: recuperare ed importare i dati binari per un tipo
2. Linkaggio: relizzare la verifica, preparazione e (opzionalmente) risoluzione
Verifica: assicura la correttezza dei tipi importati
Preparazione: alloca la memoria per le classi ed la inizializza coi valori di default
Risoluzione: trasformazione dei riferimenti simbolici in riferimenti diretti.
3. Inizializzazione: invocare il codice Java che inizializza le classi coi valori di partenza.