Caricatore di classi -Java Security-

Il compilatore Java (javac Myprogram.java) converte il codice sorgente in linguaggio macchina di una macchina ipotetica, chiamata virtual machine. Il codice della virtual machine viene memorizzato in file di classe con estensione .class.I file di classe contengono il codice per tutti i metodi della stessa classe e vanno interpretati da un programma che traduce le istruzioni della virtual machine nel linguaggio macchina del computer di destinazione.
Si noti che l'interprete della virtual machine carica solo i file necessari per l'esecuzione del programma: se l'esecuzione del programma inizia con la classe MyProgramm.class, la virtual machine opera le seguenti operazioni:

1. La virtual machine dispone di un meccanismo per il caricamento dei file di classe MyProgram.class;

2. Se Myprogram.class contiene campi dati o superclassi di altri tipo,vengono caricati anche i relativi  file di classe.Il processo di caricamento di tutte le classi collegate a una classe si chama risoluzione della classe;

3. La virtual machine esegue quindi il metodo main della classe MyProgram;

4. Se il metodo main o uno dei metodi chiamati da main lo richiedono, vengono caricate eventuali classi aggiuntive.

Il meccanismo di caricamento delle classi, tuttavia, non utilizza un singolo caricatore di classi.Ogni programma Java ha infatti almeno tre caricatori di classi differenti:

- il caricatore di classi bootstrap;
- il caricatore di classi per le estensioni;
- il caricatore di classicdi sistema.

Il caricatore di classi bootstrap carica le classi di sistema (tipicamenete contenute nel file JAR rt.jar).Si tratta di una parte integrante della virtual machine, ed e' solitamente scritto in C.
Il caricatore di classi per le estensioni carica un'estensione standard dalla directory jre/lib/ext. Si possono aggiungere file JAR in quella directory, e il caricatore per estensione li trovera', anche se non e' presente alcun percorso per la classe.Il caricatore di classi per le estensioni e' implementato in Java.
Il caricatore di classi di sistema carica le classi dell'applicazione.Localizza le classi nella directory e nei file Jar/Zip nel percorso della classe,come definito nella variabile d'ambiente CLASSPATH o nell'opzione della riga di comando -classpath.Anche questo caricatore di classe e' implementato in Java.
I caricatori di classe hanno una relazione genitore/figilo.Ogni caricatore di classi, ad eccezione del caricatore di classi bootstrap, ha un un caricatore di classi genitore.Un caricatore di classi dovrebbe  dare al suo genitore la possibilita' di caricare qualsiasi classe, e caricarla da se' solo se il genitore non e' riuscito a terminare l'operazione.Per Es., quando al caricatore di classe di sistema e' richiesto di caricare una classe(magari java.event.ActionEvent) , esso ne fa richiesta prima al caricatore di classi per estensioni, il qual einterroga il caricatore di classi bootstrap che trova la classe e la carica in rt.jar, e nessuna caricatore di classi continua la sua ricerca.  
Le applet, le servlet e gli stub RMI vengono caricati con caricatori di classe personalizzati. E' anche possibile scrivere un proprio caricatore di classi ad hoc per scopi specializzati.Questo permette di portare a termine controlli di sicurezza specifici prima di passare il bytecode alla virtual machine.

Privacy Policy