2011-09-13 9 views
5

Eventuali duplicati:
Unloading classes in java?Quando si fa una classe scaricare dalla memoria heap

Quando fa una classe scarico dalla memoria?

Per il caricamento di una classe è possibile chiamare Class.forName("NameOfClass"); o quando viene creato un oggetto di una classe, quindi la classe viene caricata in memoria.

+0

circa era per rispondere, ma il primo collegamento su google è stata questa domanda su SO: [Unloading classes in java?] (http://stackoverflow.com/questions/148681/unloading-classes-in-java) –

+0

Perché ne hai bisogno? Btw, che dipende dalla JVM e potrebbe non essere fatto affatto (si veda il famigerato problema PermGen) – Thomas

risposta

1

In parole semplici:

Classe viene scaricato quando tutti i riferimenti alla classe (e le loro istanze) vengono rimossi e la classloader utilizzato è garbage collection.

+0

No, potrebbe essere quindi idonea per la garbage collection ma in alcuni casi la classe potrebbe non essere mai raccolta. – Thomas

+0

Non corretto. Una classe verrà (può) essere scaricata solo se il programma di caricamento della classe recupera i dati inutili. Stai rispondendo a * oggetti/istanze *. –

+0

Accetto, i riferimenti alla classe e al classloader devono essere rimossi. – Muse

2

Classi

Classi saranno caricati da un classloader e sarà (possono) essere scaricati quando che classloader è garbage collection. Nelle applicazioni normali, dove non ci importa dei classloader: le classi non verranno mai scaricate.

istanze delle classi/oggetti

oggetti verranno creati mucchio e eliminati quando il garbage collector rileva che non v'è alcun riferimento a tale istanza/oggetto più.

(Just in breve, meglio i dettagli: vedi domanda Unloading classes in Java?)

+1

Le classi Java fornite da JDK (ad esempio 'java.util.ArrayList' e' java.math.BigIntege'r) non vengono affatto caricate? – Pacerier

0

Quando esattamente una classe sarà scaricato non è definito, proprio come quando esattamente un oggetto può essere garbage collection non è definito. Nei è definito è quando può essere scaricato:

Una classe o interfaccia può essere scaricato se e solo se la classe che definisce caricatore può essere recuperato dal garbage collector

Problemi correlati