> On 28 maj 2015, at 20:06, Mandy Chung <[email protected]> wrote:
>
>
> On 05/28/2015 07:35 AM, Peter Levart wrote:
>> Hi Mandy,
>>
>> On 05/27/2015 03:32 PM, Mandy Chung wrote:
>>> Taking it further - is it simpler to return String[] of all classnames
>>> including the duplicated ones and have the VM do the count? Are you
>>> concerned with the size of the String[]?
>>
>> Yes, the histogram is much smaller than the list of all instances. There can
>> be millions of instances waiting in finalizer queue, but only a few distinct
>> classes.
>
> Do you happen to know what libraries are the major contributors to these
> millions of finalizers?
>
> It has been strongly recommended to avoid finalizers (see Effective Java Item
> 7). I'm not surprised that existing code is still using finalizers while we
> should really encourage them to migrate away from it.
Having ways to introspect the finalizer queue is one way to make people aware
that they have a problem :-)
>
>> What could be done in Java to simplify things in native code but still not
>> format the output is to convert the array of Map.Entry(s) into an Object[]
>> array of alternating {String, int[], String, int[], .... }
>>
>> Would this simplify native code for the price of a little extra work in
>> Java? The sizes of old and new arrays are not big (# of distinct classes of
>> finalizable objects in the queue).
>
> I also prefer writing in Java and writing less native code (much simplified).
> It's an interface that we have to agree upon and keep it simple. Having the
> returned Object[] as alternate String and int[] is a reasonable compromise.
>
> ReferenceQueue.java - you can move @SuppressWarning from the method to just
> the field variable "rn"
> @SuppressWarnings("unchecked")
> Reference<? extends T> rn = r.next;
>
> Finalizer.java
> It's better to rename printFinalizationQueue as it inspects the finalizer
> reference queue (maybe getFinalizerHistogram?). Can you move this method to
> the end of this class and add the comment saying that this is invoked by VM
> for jcmd -finalizerinfo support and @return to describe the returned content.
> I also think you can remove @SuppressWarnings for this method.
>
> Mandy