Что такое родительский поток сборщика мусора Daemon Thread?

#java #garbage-collection

#java #сборка мусора

Вопрос:

Сборщик мусора — это поток демона, который вызывается и управляется JVM. Есть ли у него родительский поток? Я немного смущен этим..

Ответ №1:

Java не записывает родительский поток (создание) какого-либо потока, и (гипотетическое) отношение родитель-потомок не имеет отношения к способу работы потоков.

Самое близкое, что есть в Java к этому, — это концепция ThreadGroup. Каждый поток является членом ThreadGroup, ThreadGroups могут содержать другие ThreadGroups, при этом ThreadGroups образуют дерево навигации, корни которого уходят в начальную ThreadGroup. Однако группы потоков на самом деле не позволяют вам многого делать, учитывая, что приостановка / возобновление / уничтожение потоков с помощью ThreadGroup опасна и не рекомендуется.

Потоки сборщика мусора, возможно, являются членами начальной ThreadGroup. Однако также возможно, что потоки GC являются частным случаем и не являются членами какой-либо ThreadGroup. В любом случае, это ни на что не влияет… если только вы не напишете программу, которая пересекает дерево ThreadGroup.

Потоки Daemon — это просто потоки, для которых перед запуском был установлен флаг daemon. Это не зависит от механизма ThreadGroup.

Ответ №2:

Нет, это не так. Поток демона продолжает выполняться до тех пор, пока либо вы не вызовете exit (), либо все недемоновые потоки не будут отключены.

Другими словами, это не потому, что вы создаете поток внутри другого потока, что между ними существует родительско-дочернее отношение. У них независимая жизнь.

Ответ №3:

В случае, если каждый поток java сопоставлен с lwp в используемой вами ОС, все потоки, которые JVM создает по умолчанию, являются дочерними по отношению к родительскому процессу, который запускает сам процесс Java. Итак, в java-процессе нет родительского потока для сбора мусора. Итак, такие потоки, как поток сборки мусора, завершитель и поток обработки ссылок, являются дочерними элементами родительского процесса java process наряду с основным потоком.

Вы можете посмотреть на вывод ps -elL на компьютере Solaris, чтобы подтвердить это.

Я думаю, это отвечает на ваш вопрос. Пожалуйста, вернитесь назад, если нет.