RFR(M,v9): JDK-8059036 : Implement Diagnostic Commands for heap and finalizerinfo

Peter Levart peter.levart at gmail.com
Wed May 27 07:34:34 UTC 2015

Hi Dmitry,

The jdk part looks OK (no great changes on this side from last webrev). 
Is there a particular reason why the return type of 
printFinalizayionQueue() method is Object[] and not Map.Entry<String, 
int[]>[] ?

For the hotspot part, I have a few reservations. You expect that the 
type of array elements will be HashMap.Node and that the key/value 
fields will be at fixed offsets. Is this even true for all architectures 
(32bit, 64bit +-UseCompressedOops)?

The type of HashMap entry is controlled by code in HashMap which has a 
long history of changes. Next time the implementation of HashMap 
changes, your code could break. Would it be possible to only use public 
API? To invoke methods on Map.Entry interface to obtain the key and value?

Regards, Peter

On 05/26/2015 04:16 PM, Dmitry Samersoff wrote:
> Hi Everybody,
> http://cr.openjdk.java.net/~dsamersoff/JDK-8059036/webrev.09/
> Please review updated webrev -
> printFinalizationQueue now returns and array of Map.Entry<String, int[])
> and all formatting is done on VM side.
> -Dmitry
> On 2015-05-21 02:07, Mandy Chung wrote:
>>> On May 19, 2015, at 11:51 PM, Dmitry Samersoff
>>> <dmitry.samersoff at oracle.com <mailto:dmitry.samersoff at oracle.com>> wrote:
>>> Other alternatives could be to do all hashing/sorting/printing on native
>>> layer i.e. implement printFinalizationQueue inside VM.
>>> Both options has pros and cons - Java based solution requires less JNI
>>> calls and better readable but takes more memory.
>>> It might be better to return an array of Map.Entry<String, int[]>
>>> objects to VM rather than one huge string.
>> The output and formatting should be done by jcmd.  What you really need
>> to get a peek on the finalizer queue and print the histogram.   The VM
>> has the heap histogram implementation.  Have you considered leveraging
>> that?
>>     5:          1012          40480  java.lang.ref.Finalizer
>> You can find the registered Finalizer instances.  The downside is that
>> icmd -finalizerinfo stops the world.  I think it’s not unreasonable for
>> this diagnostic command to be expensive like -heap command.
>> Mandy

More information about the core-libs-dev mailing list