2009-07-24 4 views

risposta

6

JVM carica solo le classi richieste dal Jar quando viene richiamato. Se l'applicazione richiede una classe, verranno caricate la classe e tutte le altre classi dipendenti. Non sono sicuro, ma suppongo che questo sia compito del programma di caricamento classi per localizzare la classe dal classpath e caricare.

0

Il programma di caricamento classe predefinito carica solo ciò di cui ha bisogno, quando ne ha bisogno. Se si dispone di un JAR da 10 MB nel CLASSPATH e è necessario un solo file .class, la JVM caricherà tale classe solo la prima volta che il codice tenta di accedervi. Il bytecode .class entra nello spazio perm.

È "controllabile" nel senso che è possibile scrivere il proprio caricatore di classe, ma per farlo è necessaria una certa esperienza.

1

Dipende interamente dalla JVM e dal classloader. La specifica JVM specifica che la classe deve essere compaia per essere caricata al primo utilizzo attivo. I caricatori di classe possono caricare alcune delle classi prima del previsto in anticipo. In realtà la maggior parte dei caricatori di classi ritarda il caricamento il più a lungo possibile.

2

I file jar sono una forma di file zip.

Il modo in cui vengono gestiti dipende fortemente da JRE.

Le vecchie versioni di Sun JRE utilizzate per la memorizzazione mappano l'intero file. Questo alloca la memoria logica, ma non necessariamente causa il caricamento di qualsiasi dato dal disco. (Windows a 32 bit in genere non è in grado di allocare 3 GB di memoria contigua, sebbene sia possibile farlo su altri sistemi operativi).

Credo che il comportamento corrente sia quello di mappare la directory centrale nella parte posteriore del file in Windows. Sotto altri sistemi operativi, è appena letto. Questo è controllato da #define s nella fonte.

JDK7 è probabile che faccia qualcos'altro.

Le classi vengono generalmente caricate pigramente. Le risorse vengono rilette ogni volta. java.util.ResourceBundle cache.