jcmd GC.run to invoke GC fails if -XX:+DisableExplicitGC is set.
Kevin Walls
kevin.walls at oracle.com
Tue Aug 22 14:38:24 UTC 2017
Hi,
jcmd GC.run to invoke GC fails if -XX:+DisableExplicitGC is set: this
seems like a mistake?
This behaviour is obstructive for a live app that _needs_ a GC, and was
started with -XX:+DisableExplicitGC.
DisableExplicitGC to protect from Java code calling System.gc frequently
makes sense, but if I can attach and run a dcmd, I should have
permission to inspect and maintain the JVM, including invoking a GC.
(This is as the user who owns the process and can kill it off.)
The behaviour (checking DisableExplicitGC in SystemGCDCmd::execute)
comes in with:
https://bugs.openjdk.java.net/browse/JDK-8004095
8004095: Add support for JMX interface to Diagnostic Framework and Commands
The JMX relation I suppose suggests we didn't want JMX to override
DisableExplicitGC by way of using a jcmd/DCmd.
But also, we now have:
8072913: [REDO] GCCause should distinguish jcmd GC.run from System.gc()
Summary: GCCause which is caused by GC.run diagnostic command should be
different from System.gc() .
..at least the causes are distinct.
I don't think we document this clearly. Our comment in globals.hpp is
""Ignore calls to System.gc()". I don't think we say anywhere that jcmd
is subject to being disabled by the flag.
Interested to hear any reason in favour of the current behaviour! If
there's nothing, I'll log a bug and ask for review of the change to
remove it...
Thanks
Kevin
More information about the serviceability-dev
mailing list