2012-12-20 18 views
7

Nella descrizione del metodo getLogger() della LogManager, è scritto quanto segue:LogManager e Garbage Collector

"(...) Logger associato al nome String può essere garbage collection in qualsiasi momento se non vi è un forte riferimento al Logger Il chiamante di questo metodo deve controllare il valore di ritorno per null al fine di gestire correttamente il caso in cui il logger è stato garbage collocato. "

Com'è possibile che il GC possa cancellare il Logger, poiché LogManager deve mantenere tutti i riferimenti a tutti i Logger per poter risolvere i nomi dei Logger?

Non è un po 'strano, che l'API Java consente una situazione, che all'inizio della mia app creo e configuro i miei logger ma dimentico di mantenere i rifrattori, e successivamente se utilizzo Logger.getLogger (' someName ') Otterrò di nuovo, di default un instad dei miei logger che ho impostato?

risposta

7

Com'è possibile che il GC possa cancellare il Logger, poiché LogManager deve mantenere tutti i riferimenti a tutti i Logger per poter risolvere i nomi dei Logger?

E 'possibile se LogManager mantiene weak references alle forestale (che credo lo fa).

non è che un po 'strano, che Java API permette una situazione, che all'inizio del mio app creo e impostare il mio logger ma dimenticate di tenere refrences, e poi se uso Logger.getLogger ('someName') Otterrò di nuovo, di default un instad dei miei logger che ho impostato?

Si potrebbe obiettare che, se si preoccupa del proprio registratore, è necessario mantenere un riferimento. Il numero documentation è molto chiaro:

L'applicazione deve mantenere il proprio riferimento all'oggetto Logger per evitare che venga sottoposto a Garbage Collection. LogManager può conservare solo un riferimento debole.