> On 28 maj 2015, at 20:06, Mandy Chung <mandy.ch...@oracle.com> 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