What are threads (i.e. lightweight processes) named `{java}` created for?

后端 未结 1 913
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-18 10:56

I wrote a Java program that sleeps for a while:

package com.mycompany.app;

import java.lang.System;
import java.util.concurrent.TimeUnit;

public class Main         


        
1条回答
  •  傲寒
    傲寒 (楼主)
    2021-01-18 11:42

    All of these threads belong to JVM.
    Run jstack to get the thread list.

    "main" #1 prio=5 os_prio=0 cpu=150.00ms elapsed=8.04s tid=0x00007f9f90011000 nid=0x107 waiting on condition  [0x00007f9f99f9f000]
       java.lang.Thread.State: TIMED_WAITING (sleeping)
            at java.lang.Thread.sleep(java.base@11.0.1/Native Method)
            at java.lang.Thread.sleep(java.base@11.0.1/Thread.java:339)
            at java.util.concurrent.TimeUnit.sleep(java.base@11.0.1/TimeUnit.java:446)
            at com.mycompany.app.Main.main(Main.java:10)
    
    "Reference Handler" #2 daemon prio=10 os_prio=0 cpu=0.00ms elapsed=7.95s tid=0x00007f9f901f9000 nid=0x10e waiting on condition  [0x00007f9f6c10f000]
       java.lang.Thread.State: RUNNABLE
            at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.1/Native Method)
            at java.lang.ref.Reference.processPendingReferences(java.base@11.0.1/Reference.java:241)
            at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.1/Reference.java:213)
    
    "Finalizer" #3 daemon prio=8 os_prio=0 cpu=0.00ms elapsed=7.95s tid=0x00007f9f901fd800 nid=0x10f in Object.wait()  [0x00007f9f65fef000]
       java.lang.Thread.State: WAITING (on object monitor)
            at java.lang.Object.wait(java.base@11.0.1/Native Method)
            - waiting on <0x0000000712108f80> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(java.base@11.0.1/ReferenceQueue.java:155)
            - waiting to re-lock in wait() <0x0000000712108f80> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(java.base@11.0.1/ReferenceQueue.java:176)
            at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.1/Finalizer.java:170)
    
    "Signal Dispatcher" #4 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=7.93s tid=0x00007f9f90210000 nid=0x110 runnable  [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
    "C2 CompilerThread0" #5 daemon prio=9 os_prio=0 cpu=40.00ms elapsed=7.93s tid=0x00007f9f90212000 nid=0x111 waiting on condition  [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
       No compile task
    
    "C1 CompilerThread0" #7 daemon prio=9 os_prio=0 cpu=40.00ms elapsed=7.93s tid=0x00007f9f90214000 nid=0x112 waiting on condition  [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
       No compile task
    
    "Sweeper thread" #8 daemon prio=9 os_prio=0 cpu=10.00ms elapsed=7.93s tid=0x00007f9f90216000 nid=0x113 runnable  [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
    "Service Thread" #9 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=7.90s tid=0x00007f9f902d3800 nid=0x114 runnable  [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
    "Common-Cleaner" #10 daemon prio=8 os_prio=0 cpu=0.00ms elapsed=7.89s tid=0x00007f9f902df800 nid=0x116 in Object.wait()  [0x00007f9f656ef000]
       java.lang.Thread.State: TIMED_WAITING (on object monitor)
            at java.lang.Object.wait(java.base@11.0.1/Native Method)
            - waiting on <0x0000000712002df0> (a java.lang.ref.ReferenceQueue$Lock)
            at java.lang.ref.ReferenceQueue.remove(java.base@11.0.1/ReferenceQueue.java:155)
            - waiting to re-lock in wait() <0x0000000712002df0> (a java.lang.ref.ReferenceQueue$Lock)
            at jdk.internal.ref.CleanerImpl.run(java.base@11.0.1/CleanerImpl.java:148)
            at java.lang.Thread.run(java.base@11.0.1/Thread.java:834)
            at jdk.internal.misc.InnocuousThread.run(java.base@11.0.1/InnocuousThread.java:134)
    
    "Attach Listener" #11 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=0.21s tid=0x00007f9f44001000 nid=0x126 waiting on condition  [0x0000000000000000]
       java.lang.Thread.State: RUNNABLE
    
    "VM Thread" os_prio=0 cpu=0.00ms elapsed=7.95s tid=0x00007f9f901f1000 nid=0x10d runnable
    
    "GC Thread#0" os_prio=0 cpu=0.00ms elapsed=8.01s tid=0x00007f9f90038800 nid=0x108 runnable
    
    "G1 Main Marker" os_prio=0 cpu=0.00ms elapsed=8.00s tid=0x00007f9f90097800 nid=0x109 runnable
    
    "G1 Conc#0" os_prio=0 cpu=0.00ms elapsed=8.00s tid=0x00007f9f90099800 nid=0x10a runnable
    
    "G1 Refine#0" os_prio=0 cpu=0.00ms elapsed=8.00s tid=0x00007f9f9018d000 nid=0x10b runnable
    
    "G1 Young RemSet Sampling" os_prio=0 cpu=0.00ms elapsed=8.00s tid=0x00007f9f9018f000 nid=0x10c runnable
    "VM Periodic Task Thread" os_prio=0 cpu=0.00ms elapsed=7.90s tid=0x00007f9f902d6000 nid=0x115 waiting on condition
    

    Here nid is the hexadecimal ID of a thread in the OS - you may match it to the output of pstree.

    • The first thread named main is the thread executing your code.

    • Reference Handler thread is responsible for adding Weak, Soft and Phantom references discovered by Garbage Collector into their registered ReferenceQueues.

    • Finalizer thread runs finalize method of the objects ready to be finalized.

    • Signal Dispatcher waits for specific OS signals and handles them. In particular, it makes thread dump on SIGQUIT, and also initiates VM shutdown process on SIGTERM, SIGINT and SIGHUP.

    • CompilerThreads perform JIT compilation of the bytecode.

    • Sweeper thread cleans up obsolete compiled methods.

    • Service Thread runs several background JVM tasks: detects low memory condition, cleans up StringTable and SymbolTable, sends deferred JVMTI events and GC notifications and so on.

    • Common-Cleaner runs cleaning actions of java.lang.ref.Cleaner instances.

    • Attach Listener thread supports Dynamic Attach mechanism. It listens for incoming Dynamic Attach connections and executes VM commands. For example, it is used by jstack, jmap and jcmd utilities.

    • VM Thread runs internal VM operations that require a safepoint. The examples of such operations are deoptimization, class redifinition, biased lock revocation, thread dump, heap inspection etc.

    • G1 threads are involved in Garbage Collection.

    • VM Periodic Task Thread is used to simulate timer interrupts.

    0 讨论(0)
提交回复
热议问题