2013-03-06 3 views
14

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

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

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

+2

Параллельно против параллельного: http://stackoverflow.com/questions/1897993/difference-between-concurrent-programming-and-parallel-programming – m0skit0

+1

PCG vs CGC in Hotspot: http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#available_collectors – assylias

+2

КомпиляторThread предназначен для JIT-компилятора. – Chochos

ответ

3

Вы можете найти краткое объяснение на OpenJDK website:

Основные виды VM нитей следующим образом:

  • VM нить: Это одноточечно экземпляр VMThread отвечает за выполнение операций VM , которые обсуждаются ниже
  • Периодическая задача: этот экземпляр Singleton WatcherThread имитирует таймерные прерывания для выполнения периодических операций в пределах VM
  • GC нитей: Эти нити, различных типов, поддержка параллельного и одновременного сбора мусора
  • Компилятор темы: Эти нити выполняют во время выполнения компиляции байт-кода в машинный код
  • сигнала диспетчеру резьбы: Этот поток ожидает процесс, направленный сигналов и отправок их к способу обработки сигнала уровня Java

Вы можете прочитать весь пункт управления потоками, поскольку она продолжает дальнейшие объяснения, например, на что отвечает поток VM.

2

Ok, благодаря комментариям, у нас есть начало ответа:

1) Так как сборщик мусора имеет стоп-мире Механизм, существуют, кроме строев два пути, чтобы уменьшить эти паузы:

  • С параллельными GC, проходящими через PGCThreads, так что, если n ядер доступны, то n потоков можно запускать во время пауз, чтобы сократить их.
  • С параллельным GC, работающим через CGCThread и заканчивающим работу обычной паузы GC, одновременно с основным потоком программы.

2) CompilerThread запускает компилятор Just-In-Time.

3) WatcherThread имитирует прерывания таймера каждые 50 мс для запуска периодических операций в виртуальной машине.

1

И я бы добавил, что есть Тип резьбы по 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 
    }; 
Смежные вопросы