Improve root set used by hat

A. Sundararajan Sundararajan.A at Sun.COM
Wed Oct 7 20:11:20 PDT 2009


Hi,

This change looks good to me. Thanks for finding this issue and the fix!

Thanks,
-Sundar

Keith Randall wrote:
> Here's a simpler patch that never makes Roots for these static fields 
> in the first place:
>
> --- com/sun/tools/hat/internal/model/JavaStatic.java
> ***************
> *** 57,64 ****
>               id = ((JavaObjectRef)value).getId();
>           }
>           value = value.dereference(snapshot, field);
> !         if (value.isHeapAllocated() &&
> !             clazz.getLoader() == snapshot.getNullThing()) { // 
> static fields are only roots if they are in classes loaded by the root 
> classloader.
>               JavaHeapObject ho = (JavaHeapObject) value;
>               String s = "Static reference from " + clazz.getName()
>                          + "." + field.getName();
> --- 57,63 ----
>               id = ((JavaObjectRef)value).getId();
>           }
>           value = value.dereference(snapshot, field);
> !         if (value.isHeapAllocated()) {
>               JavaHeapObject ho = (JavaHeapObject) value;
>               String s = "Static reference from " + clazz.getName()
>                          + "." + field.getName();
>
>
> On Wed, Oct 7, 2009 at 1:49 AM, Alan Bateman <Alan.Bateman at sun.com 
> <mailto:Alan.Bateman at sun.com>> wrote:
>
>     A. Sundararajan wrote:
>
>         I agree. Static fields of classes loaded by non-bootstrap
>         loaders should not be part of root set.
>
>         PS. I am not sure  if this is a bug with hat or with heap
>         dumpers (the hotspot built-in dumper and SA's dumper). I don't
>         remember how "roots" is filled. May be, these static fields
>         should not be flagged as roots?
>
>         -Sundar
>
>     At least for the built-in heap dumper, static fields aren't
>     generated as roots (instead it's system classes and temporary
>     placeholders in the dictionary that are generated to the dump as
>     "sticky classes", to use a HPROF term). So I suspect this is more
>     likely to be a jhat issue.
>
>     -Alan.
>
>



More information about the jdk6-dev mailing list