Что делают разные типы потоков JVM (HotSpot)? - программирование
Подтвердить что ты не робот

Что делают разные типы потоков JVM (HotSpot)?

Я вижу, что в JSM HotSpot реализовано шесть типов потоков: VMThread, CGCThread, PGCThread, JavaThread, CompilerThread и WatcherThread. Однако я не знаю, какой тип потока делает то, что именно. Вот что я понял до сих пор:

  • VMThread: выполните задачи VM, такие как сборщик мусора.
  • CGCThread: одновременный сборщик мусора.
  • PGCThread: параллельный сборщик мусора (отличия от CGC?).
  • JavaThread: программные потоки, я думаю.
  • CompilerThread: поток для компилятора?
  • WatcherThread:?

Дополнительный вопрос: как насчет других JVM?

4b9b3361

Ответ 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
  };