RFR: JDK-8068589: GCCause should distinguish jcmd GC.run from System.gc()

Staffan Larsen staffan.larsen at oracle.com
Mon Jan 26 11:34:39 UTC 2015


HeapDumper uses GCCause::_heap_dump as the cause. That looks good to me.

/Staffan

> On 26 jan 2015, at 11:07, Kirk Pepperdine <kirk at kodewerk.com> wrote:
> 
> Hi Staffan,
> 
> There are other entry points in diagnosticCommand that will trigger a Full GC.
> 
> void ClassHistogramDCmd::execute(DCmdSource source, TRAPS) {
>   VM_GC_HeapInspection heapop(output(),
>                               !_all.value() /* request full gc if false */);
>   VMThread::execute(&heapop);
> }
> 
> and
> void HeapDumpDCmd::execute(DCmdSource source, TRAPS) {
>   // Request a full GC before heap dump if _all is false
>   // This helps reduces the amount of unreachable objects in the dump
>   // and makes it easier to browse.
>   HeapDumper dumper(!_all.value() /* request GC if _all is false*/);
>   int res = dumper.dump(_filename.value());
>   if (res == 0) {
>     output()->print_cr("Heap dump file created");
>   } else {
>     // heap dump failed
>     ResourceMark rm;
>     char* error = dumper.error_as_C_string();
>     if (error == NULL) {
>       output()->print_cr("Dump failed - reason unknown");
>     } else {
>       output()->print_cr("%s", error);
>     }
>   }
> }
> 
> For example. For consistency, how would you suggest these be handled.
> 
> Kind regards,
> Kirk Pepperdine
> 
> On Jan 26, 2015, at 9:12 AM, Staffan Larsen <staffan.larsen at oracle.com <mailto:staffan.larsen at oracle.com>> wrote:
> 
>> A bit of terminology here. ‘GC.run’ is called a ‘Diagnostic Command’. ‘jcmd’ is one way to invoke a Diagnostic Command. Another way is via a JMX MBean. With this in mind I think your references to ‘jcmd’ should be changed to ‘diagnostic command’ (or an abbreviation thereof). For example: _jcmd_gc_run -> _dcmd_gc_run.
>> 
>> Thanks,
>> /Staffan
>> 
>>> On 25 jan 2015, at 14:15, Yasumasa Suenaga <yasuenag at gmail.com <mailto:yasuenag at gmail.com>> wrote:
>>> 
>>> Hi all,
>>> 
>>> GCCause which is printed in gc log is "System.gc()" when jcmd GC.run is invoked. 
>>> I think that GCCause which is caused by jcmd GC.run should be different from System.gc() . 
>>> 
>>> I uploaded webrev for this enhancement:
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8068589/webrev.00/ <http://cr.openjdk.java.net/~ysuenaga/JDK-8068589/webrev.00/>
>>> 
>>> This patch prints "jcmd GC.run" to gc log when jcmd GC.run is invoked. 
>>> 
>>> 
>>> Could you review it?
>>> 
>>> 
>>> Thanks,
>>> 
>>> Yasumasa
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-gc-dev/attachments/20150126/b9484e32/attachment.html>


More information about the hotspot-gc-dev mailing list