Review request: 8008549: NPG: SystemDictionary::find(...) unnecessarily keeps class loaders alive
Stefan Karlsson
stefan.karlsson at oracle.com
Thu Feb 21 08:57:20 PST 2013
http://cr.openjdk.java.net/~stefank/8008549/webrev.00/
This change fixes a bug, which showed up as a regression in our Jetty
footprint regression testing. The bug prevents the young GCs from
reclaiming some java.util.zip.Inflaters, which in turn holds on to 7 KB
of native memory each.
Description from the bug report:
Before the PermGen removal a class loader could be garbage collected by
a young GC if it didn't load any classes and all references to it were
dropped.
After the PermGen removal, there's an unnecessary call to
register_loader in the SystemDictionary::find(...) function:
ClassLoaderData* loader_data = register_loader(class_loader, CHECK_NULL);
which prevents these kind of class loader from being garbage collected
by the young GCs.
Fortunately, we don't have to register a ClassLoaderData for the class
loader in the find(...) function. The rational is that if we haven't
already setup a ClassLoaderData for the class loader, then it won't have
an entry in the dictionary, and we can safely return NULL.
This bug is one of the reasons for the memory footprint regressions seen
in:
JDK-8001590 <https://jbs.oracle.com/bugs/browse/JDK-8001590>: NPG:
Footprint increase when running Jetty
thanks,
StefanK & Erik Helin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/attachments/20130221/2c8dad3c/attachment.html
More information about the hotspot-runtime-dev
mailing list