FYI...
I haven't forgotten about this, still trying to fit it into my
schedule. I'll do openjdk6 too.
I'd like to create a testcase, but I may need to give up on that,
takes too much time to get it right, and make it test the right thing.
Any ideas on a testcase would be welcome.
-kto
Joseph D. Darcy wrote:
Sundar,
If you think this change should go back to OpenJDK 6 and other releases,
please work with Keith to sponsor the change.
Thanks,
-Joe
A. Sundararajan wrote:
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 <[email protected]
<mailto:[email protected]>> 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.