Florian Richoux
Florian Richoux

Reputation: 1533

What do the different (HotSpot) JVM thread types do?

I see there are six thread types implemented into the HotSpot JVM: VMThread, CGCThread, PGCThread, JavaThread, CompilerThread and WatcherThread. However I don't know which thread type is doing what exactly. Here is what I understood so far:

Additional question: what about other JVMs?

Upvotes: 15

Views: 1650

Answers (3)

skytree
skytree

Reputation: 1100

And I would add that there are 7 threads type in JVM! Don't miss os_thread

path: Defined in: /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
  };

Upvotes: 1

box
box

Reputation: 3246

You can find a brief explanation on the OpenJDK website:

The main kinds of VM threads are as follows:

  • VM thread: This singleton instance of VMThread is responsible for executing VM operations, which are discussed below
  • Periodic task thread: This singleton instance of WatcherThread simulates timer interrupts for executing periodic operations within the VM
  • GC threads: These threads, of different types, support parallel and concurrent garbage collection
  • Compiler threads: These threads perform runtime compilation of bytecode to native code
  • Signal dispatcher thread: This thread waits for process directed signals and dispatches them to a Java level signal handling method

You might want to read the whole Thread Management paragraph since it continues further explanations, e.g. what the VM thread is responsible for.

Upvotes: 5

Florian Richoux
Florian Richoux

Reputation: 1533

Ok, thanks to comments, we have the beginning of an answer:

1) Since the garbage collector has a stop-the-world mecanism, there exist besides tunings two ways to reduce these pauses:

  • With parallel GCs running via PGCThreads such that, if n cores are available, then n threads can be run during pauses to shorten them.
  • With a concurrent GC, running via a CGCThread and finishing the job of the regular GC off pauses, concurrently with the main program thread.

2) The CompilerThread runs the Just-In-Time compiler.

3) The WatcherThread simulates timer interrupts every 50ms to run periodic operations in the VM.

Upvotes: 3

Related Questions