To quote a discussion here and other studies.
Some of the main JVM threads are:
- Attach Listener: This is a thread that always listens on other JVM threads to send a request. A practical example is in the case of profiling or (I'm not talking about that though) monitoring tools for production-level applications such as DynaTrace.
- Signal Manager: When the OS picks up a signal on the JVM, the signal manager thread passes the signal to the appropriate handler.
- Help handler: High priority thread for queue for pending links. GC creates a simple linked list of links that need to be processed, and this thread quickly adds them to the desired queue and notifies ReferenceQueue listeners.
- Finalizer: The Finalizer thread calls finalizer methods.
- DestroyJavaVM:. This thread unloads the Java virtual machine at the output of the program. Most of the time he has to wait.
- Garbage Collector: The topic responsible for the Java garbage collection mechanism, depending on whether the GC is enabled or not.
- main: The main thread executing your program containing the
main method.
One important thing to note is that it will depend on the JVM implementation, how many and which all the main threads it will start, but even if the Java program is written as single-threaded, more than one thread in the JVM.
A Java program can be single-threaded, but the JVM (which launches the Java user program) is multithreaded and will have (at least for the latest JVMs) more than one thread, even from the very beginning.
The following is a snapshot of my Java HotSpot (TM) 24.55-b03 client virtual machine running a single-threaded Java program:
To answer your request
What do they do and why do they show so little CPU usage and TIME +?
Which part:. The JVM starts for a specific purpose, as described above, how the JVM wants to listen if any profiling or monitoring program wants to get some details from the JVM.
Why part:. Since they are really inactive or running, they are in a standby or parked state (see Yellow topics in my attached picture, if you have a GUI monitoring application, then you should also see Yellow or else if command line, and then threads in WAIT state), and therefore they do not take any or less processor cycles and therefore less CPU usage. Again TIME+ will show you the time when they were active, and since it is not, this parameter is also smaller.
Hope this helps!

source share