JavaRush /Java Blog /Random-IT /Livello 34. Risposte alle domande dell'intervista sull'ar...
lichMax
Livello 40
Санкт-Петербург

Livello 34. Risposte alle domande dell'intervista sull'argomento del livello

Pubblicato nel gruppo Random-IT
Ho cercato nel sito utilizzando la mia ricerca nativa e ho cercato tutto utilizzando Google: non ci sono risposte alle domande di questo livello. Forse mi sono perso qualcosa e sono ancora qui da qualche parte sul sito!? Livello 34. Risposte alle domande dell'intervista sull'argomento del livello - 1Per ogni evenienza, allego le risposte che ho scritto per me stesso: Domande per l'intervista:
  1. Cos'è la raccolta dei rifiuti?
  2. Quando viene chiamato il metodo finalize?
  3. Cosa succede se finalizesi verifica un'eccezione in un metodo?
  4. Che è successo SoftReference?
  5. Che è successo WeakReference?
  6. Che è successo PhantomReference?
  7. Come funziona WeakHashMap? Dove viene utilizzato?
  8. Perché è necessario passare una coda al costruttore PhantomReference?
  9. Perché hai bisogno di un registratore?
  10. Quali impostazioni del registratore conosci?
Le mie risposte:
  1. 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 metodo main().

    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ов. После этого сборщик мусора завершает свою работу.

  2. Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод System.runFinalization() or Runtime.getRuntime().runFinalization().

  3. Это исключение будет проигнорировано, и произойдёт выход из метода.

  4. SoftReference переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы.

  5. WeakReference — это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора.

  6. 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 уже уничтожен).

  7. WeakHashMap — это HashMap, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на an object существует только link в WeakHashMap, то из WeakHashMap будет удалена вся пара "ключ-meaning", связанная с этим an objectом.

    В связи с этим данная коллекция может быть использована для хранения Howой-то дополнительной, не очень важной информации об an objectе. Также её удобно использоваться для хранения Howой-то временной информации (которая нужная только в рамках данной операции).

  8. Эта очередь используется для отслеживания того, что an object больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным an objectом (например, удаление созданных файлов).

  9. È 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.).

  10. 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
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION