2014-11-28 3 views
5

In Java sono presenti oggetti speciali denominati Root raccolta dati obsoleti (radici GC). Servono come oggetti radice per il meccanismo di marcatura Garbage Collection (vedi immagine).Quali sono le radici di GC per le classi?

enter image description here

This article descrive quattro tipi di radici GC:

  • variabili locali
  • fili attivi
  • variabili statiche
  • JNI riferimento

Si è anche menzionato che:

Le classi stesse possono essere raccolte da rifiuti.

Le radici di GC non vengono raccolte pertanto le classi stesse non sono radici di GC.

Quindi quali sono le radici GC per le classi?

+0

Le radici GC sono quelli che hai elencato per tutto.La tua domanda riguarda davvero che tipo di oggetti in genere contengono riferimenti a oggetti di classe. L'istanza del programma di caricamento classe – biziclop

risposta

9

Quindi quali sono le radici GC per le classi?

Classloader, efficacemente - tramite altre radici di GC.

Se non c'è nulla che possa raggiungere un classloader - il che significa che nulla può raggiungere qualsiasi istanza di classi create da quel classloader - allora sia il classloader che le classi create sono eleggibili per la garbage collection.

+0

si trova nell'heap? – gstackoverflow

+0

@gstackoverflow: Beh, certamente non sono in pila. Quale parte precisa dell'heap è una questione diversa. –

+0

e non generazione/metaspace permanente? – gstackoverflow

1

Una radice di raccolta dati obsoleti è un oggetto accessibile dall'heap.

Memory Analyzer categorizza radici raccolta dei rifiuti secondo il seguente elenco: (. Java *, ecc)

  1. Classe caricati dal ClassLoader sistema
    • campo statico nelle classi JDK
  2. dal vivo thread
    • stack -local vars, params metodo
    • java.lange.Thread esempio
  3. oggetto tenuto come monitor di sincronizzazione
  4. JNI riferimento
  5. speciali JVM ...

Source 1 Source 2