Does CollectedHeap::print_on() need Heap_lock?
Thomas Schatzl
thomas.schatzl at oracle.com
Fri Apr 29 12:35:19 UTC 2016
Hi,
On Fri, 2016-04-29 at 21:12 +0900, Yasumasa Suenaga wrote:
> Hi Thomas,
>
> Thank you for replying.
>
> >
> > It is not required. The methods are only ever called at a
> > safepoint.
> No, it is called from Attach Listener thread.
> I run JDK 9 EA b112 x64 Linux on GDB, and I got call stack as below:
>
> ----------------
> Breakpoint 2, 0x00007ffff659b970 in HeapInfoDCmd::execute(DCmdSource,
> Thread*)
> () from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> (gdb) bt
> #0 0x00007ffff659b970 in HeapInfoDCmd::execute(DCmdSource, Thread*)
> ()
> from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> #1 0x00007ffff65a764c in DCmd::parse_and_execute(DCmdSource,
> outputStream*, char const*, char, Thread*) () from /usr/local/jdk-
> 9/lib/amd64/server/libjvm.so
> #2 0x00007ffff633bf80 in jcmd(AttachOperation*, outputStream*) ()
> from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> #3 0x00007ffff633cca9 in attach_listener_thread_entry(JavaThread*,
> Thread*) ()
> from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> #4 0x00007ffff6b6f876 in JavaThread::thread_main_inner() ()
> from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> #5 0x00007ffff6b6f982 in JavaThread::run() ()
> from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> #6 0x00007ffff69faad2 in java_start(Thread*) ()
> from /usr/local/jdk-9/lib/amd64/server/libjvm.so
> #7 0x00007ffff79b060a in start_thread (arg=0x7fffa490c700)
> at pthread_create.c:334
> #8 0x00007ffff72d8a4d in clone ()
> at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
> ----------------
>
> According to you, I guess HeapInfoDCmd should enter safepoint or get
> Heap_lock.
> Is it correct?
I always thought that DCmds doing heap operations tend to start a
safepoint, but of course this is configurable.
To get some kind of consistent view on the heap, print_on() should hold
the heap lock or be at a safepoint.
Thanks,
Thomas
More information about the hotspot-runtime-dev
mailing list