Что делают разные типы потоков JVM (HotSpot)?
Я вижу, что в JSM HotSpot реализовано шесть типов потоков: VMThread, CGCThread, PGCThread, JavaThread, CompilerThread и WatcherThread. Однако я не знаю, какой тип потока делает то, что именно. Вот что я понял до сих пор:
- VMThread: выполните задачи VM, такие как сборщик мусора.
- CGCThread: одновременный сборщик мусора.
- PGCThread: параллельный сборщик мусора (отличия от CGC?).
- JavaThread: программные потоки, я думаю.
- CompilerThread: поток для компилятора?
- WatcherThread:?
Дополнительный вопрос: как насчет других JVM?
Ответы
Ответ 1
Краткое описание сайта OpenJDK:
Основные виды потоков VM следующие:
- VM thread: этот экземпляр singleton VMThread отвечает за выполнение операций VM, которые обсуждаются ниже.
- Периодическая задача: этот одноэлементный экземпляр WatcherThread имитирует таймерные прерывания для выполнения периодических операций внутри VM
- GC threads: эти потоки различных типов поддерживают параллельную и параллельную сборку мусора.
- Потоки компилятора: эти потоки выполняют компиляцию времени выполнения байт-кода на собственный код
- поток диспетчера сигналов: этот поток ожидает сигналов, направленных на управление процессом, и отправляет их методу обработки сигналов уровня Java.
Возможно, вы захотите прочитать весь абзац управления потоками, так как он продолжит дальнейшие объяснения, например. за что отвечает поток VM.
Ответ 2
Хорошо, благодаря комментариям, у нас есть начало ответа:
1) Поскольку сборщик мусора имеет стоп-мир-меканизм, существуют, помимо настроек, два способа уменьшить эти паузы:
- С параллельными GC, запущенными через PGCThreads, так что, если n ядер доступны, то n потоков можно запускать во время пауз, чтобы сократить их.
- С параллельным GC, выполняющимся через CGCThread и заканчивающим работу обычных пауз GC, одновременно с основным потоком программы.
2) CompilerThread запускает компилятор Just-In-Time.
3) WatcherThread имитирует прерывания таймера каждые 50 мс для запуска периодических операций в виртуальной машине.
Ответ 3
И я бы добавил, что существуют 7 типы потоков в JVM! Не пропустите os_thread
путь: Определено в: /hotspot/src/share/vm/runtime/os.hpp
enum ThreadType {
vm_thread,
cgc_thread, // Concurrent GC thread
pgc_thread, // Parallel GC thread
java_thread, // Java, CodeCacheSweeper, JVMTIAgent and Service threads.
compiler_thread,
watcher_thread,
os_thread
};