- Cos'è la raccolta dei rifiuti?
- Quando viene chiamato il metodo
finalize
? - Cosa succede se
finalize
si verifica un'eccezione in un metodo? - Che è successo
SoftReference
? - Che è successo
WeakReference
? - Che è successo
PhantomReference
? - Come funziona
WeakHashMap
? Dove viene utilizzato? - Perché è necessario passare una coda al costruttore
PhantomReference
? - Perché hai bisogno di un registratore?
- Quali impostazioni del registratore conosci?
-
Questo è un meccanismo per distruggere oggetti non necessari. Gli oggetti non necessari sono oggetti inutilizzati. Esistono due modi per trovare tali oggetti: conteggio dei riferimenti e tracciamento. Nel primo caso ad ogni oggetto è associata una variabile che memorizza il numero di riferimenti a tale oggetto. Se questo numero scende a zero, l'oggetto è considerato morto. Nel secondo caso, il garbage collector segue i riferimenti agli oggetti dalla radice alla fine (fino al valore null), attraversando l'intero albero. Gli oggetti che non può raggiungere dai punti radice sono considerati morti. I punti radice sono tutti i thread attivi, il metodo principale, gli argomenti del metodo
main()
e tutte le variabili statiche della classe in cui si trova il metodomain()
.Determinare quali oggetti sono idonei per la distruzione è solo la prima parte del lavoro del garbage collector. La seconda parte consiste effettivamente nell'eliminarli e nel lavorare con la memoria. Qui viene utilizzato un approccio ibrido. Tutta la memoria disponibile per gli oggetti è divisa in tre aree: l'area degli oggetti giovani, l'area degli oggetti vecchi e l'area degli oggetti permanenti (si tratta di classi, metadati, stringhe internate, ecc.). La prima area è divisa in altre tre sottoaree: Eden e gli spazi sopravvissuti 1 e 2. Eden memorizza tutti gli oggetti appena creati. Le restanti due zone archiviano gli oggetti che sopravvivono all'ultima Garbage Collection. Il garbage collector funziona con l'intera area (l'area degli oggetti giovani) come segue. Durante la successiva raccolta dei rifiuti, trova oggetti viventi nell'area dell'Eden e li copia nella seconda area dei sopravvissuti. Successivamente cerca anche gli oggetti viventi nella prima area e li copia nella seconda area dei sopravvissuti o, se sono già abbastanza "vecchi", nell'area della vecchia generazione. Successivamente, ripulisce l'area dell'Eden e la prima area dei sopravvissuti. Successivamente, considera la seconda area dei sopravvissuti la prima. E basta, per questa zona termina la raccolta rifiuti.
Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые an objectы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых an objectов. После этого сборщик мусора завершает свою работу.
-
Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод
System.runFinalization()
orRuntime.getRuntime().runFinalization()
. -
Это исключение будет проигнорировано, и произойдёт выход из метода.
-
SoftReference
переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы. -
WeakReference
— это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора. -
PhantomReference
— это самая слабая link. Механизм работы с такими link запускается только если на an object нет больше ниHowих других ссылок. Призрачные ссылки используются для сложной proceduresы удаления an object. Это может быть необходимо, если an object делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС or пишет своё состояние в файл, or делает ещё что-то важное и сложное.Механизм работы с такими linkми следующий. Если на an object не осталось больше ниHowих других ссылок, и у него переопределён метода
finalize()
, то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот an object пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный an object помещается в очередь призрачных an objectов, из которой будет удалён, когда у его призрачной ссылки вызовут методclear()
. Также стоит отметить, что методаget()
у призрачной link всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращаетnull
, только если an object уже уничтожен). -
WeakHashMap
— этоHashMap
, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на an object существует только link вWeakHashMap
, то изWeakHashMap
будет удалена вся пара "ключ-meaning", связанная с этим an objectом.В связи с этим данная коллекция может быть использована для хранения Howой-то дополнительной, не очень важной информации об an objectе. Также её удобно использоваться для хранения Howой-то временной информации (которая нужная только в рамках данной операции).
-
Эта очередь используется для отслеживания того, что an object больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным an objectом (например, удаление созданных файлов).
-
È necessario un logger per salvare le informazioni sul comportamento del programma, nonché alcuni dei suoi stati. Può essere utilizzato per il debug e l'identificazione di errori e guasti del programma. Il logger consente inoltre allo sviluppatore di ricevere feedback dal suo programma mentre è in esecuzione. Inoltre, in caso di guasti critici, il logger può notificare rapidamente tali guasti alle persone giuste (ad esempio sviluppatori, clienti, project manager, supporto tecnico, ecc.).
-
Quando si configura la registrazione, è possibile specificare quanto segue:
- il luogo in cui verranno scritte le informazioni (file, console, database, rete, ecc.)
- a quale livello verranno registrati i messaggi
- tipo di voci di registro
- per i file è possibile specificare: percorso del file e della directory, dimensione del file, numero di file
- specificare per ogni singolo pacchetto il proprio livello di messaggi che verranno scritti nel log
GO TO FULL VERSION