- Qu’est-ce que la collecte des déchets ?
- Quand la méthode est-elle appelée
finalize
? - Que se passe-t-il si
finalize
une exception se produit dans une méthode ? - Ce qui s'est passé
SoftReference
? - Ce qui s'est passé
WeakReference
? - Ce qui s'est passé
PhantomReference
? - Comment ça marche
WeakHashMap
? Où est-il utilisé ? - Pourquoi faut-il passer une file d'attente au constructeur
PhantomReference
? - Pourquoi avez-vous besoin d'un enregistreur ?
- Quels paramètres de l'enregistreur connaissez-vous ?
-
Il s'agit d'un mécanisme permettant de détruire les objets inutiles. Les objets inutiles sont des objets inutilisés. Il existe deux manières de trouver de tels objets : le comptage de références et le traçage. Dans le premier cas, chaque objet est associé à une variable qui stocke le nombre de références à cet objet. Si ce nombre tombe à zéro, alors l'objet est considéré comme mort. Dans le second cas, le garbage collector suit les références d'objet depuis les points racines jusqu'à la fin (jusqu'à la valeur nulle), en parcourant l'intégralité de cette arborescence. Les objets qu'il ne peut pas atteindre depuis les points racines sont considérés comme morts. Les points racines sont tous les threads actifs, la méthode principale, les arguments de la méthode
main()
, ainsi que toutes les variables statiques de la classe dans laquelle se trouve la méthodemain()
.Déterminer quels objets peuvent être détruits n'est que la première partie du travail du garbage collector. La deuxième partie consiste à les supprimer et à travailler avec la mémoire. Une approche hybride est utilisée ici. Toute la mémoire disponible pour les objets est divisée en trois zones : la zone des objets jeunes, la zone des objets anciens et la zone des objets permanents (ce sont les classes, les métadonnées, les chaînes internées, etc.). La première zone est divisée en trois sous-zones supplémentaires : Eden et les espaces survivants 1 et 2. Eden stocke tous les objets nouvellement créés. Les deux zones restantes stockent les objets qui ont survécu au dernier garbage collection. Le garbage collector travaille avec toute cette zone (la zone des jeunes objets) comme suit. Lors du prochain ramassage des ordures, il retrouve des objets vivants dans la zone Eden et les copie dans la deuxième zone des survivants. Après cela, il recherche également des objets vivants dans la première zone et les copie soit dans la deuxième zone des survivants, soit, s'ils sont déjà assez « vieux », dans la zone de l'ancienne génération. Ensuite, il nettoie la zone Eden et la zone des premiers survivants. Ensuite, il considère le deuxième domaine des survivants comme le premier. Et voilà, le ramassage des déchets se termine pour cette zone.
Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые 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ом (например, удаление созданных файлов).
-
Un enregistreur est nécessaire pour enregistrer des informations sur le comportement du programme, ainsi que certains de ses états. Peut être utilisé pour déboguer et identifier les erreurs et les échecs du programme. Le logger permet également au développeur de recevoir des retours de son programme pendant son exécution. De plus, en cas de pannes critiques, l'enregistreur peut rapidement informer les bonnes personnes (par exemple, développeurs, clients, chefs de projet, support technique, etc.) de ces pannes.
-
Lors de la configuration de la journalisation, vous pouvez spécifier les éléments suivants :
- l'endroit où seront écrites les informations (fichier, console, base de données, réseau, etc.)
- quel niveau les messages seront enregistrés
- type d'entrées de journal
- pour les fichiers, vous pouvez spécifier : le chemin d'accès au fichier et au répertoire, la taille du fichier, le nombre de fichiers
- spécifier pour chaque package individuel son propre niveau de messages qui seront écrits dans le journal
GO TO FULL VERSION