JVMCI compiler thread idle state is RUNNABLE

Doug Simon doug.simon at oracle.com
Wed Sep 7 10:34:08 UTC 2016

> On 06 Sep 2016, at 23:39, Christian Thalinger <cthalinger at twitter.com> wrote:
> One thing we noticed here at Twitter is that JVMCI threads are not hidden (is_hidden_from_external_view) but at the same time they show up as always active.
> I don’t know the history here but I’m speculating that since compiler threads were always hidden no-one bothered.  In the SIGQUIT thread dump compiler threads show up as RUNNABLE:
> "C1 CompilerThread3" #8 daemon prio=9 os_prio=31 tid=0x00007fdcc2016800 nid=0x5103 waiting on condition [0x0000000000000000]
>    java.lang.Thread.State: RUNNABLE
> "C2 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fdcc2821800 nid=0x4f03 waiting on condition [0x0000000000000000]
>    java.lang.Thread.State: RUNNABLE
> The specification of RUNNABLE is:
>         /**
>          * Thread state for a runnable thread.  A thread in the runnable
>          * state is executing in the Java virtual machine but it may
>          * be waiting for other resources from the operating system
>          * such as processor.
>          */
>         RUNNABLE,
> and that makes sense.  But this is very confusing to the user (as one of our internal users reported to me).  Maybe JVMCI threads should just be hidden, too?

Why is this very confusing? All sorts of non-app threads show up in a SIGQUIT thread dump don’t they?

Not sure if this is covered by your proposal/question but I don’t think JVMCI compiler threads should be hidden from JVMTI otherwise they could never be debugged by a Java IDE.


More information about the hotspot-compiler-dev mailing list