Review request: 8008549: NPG: SystemDictionary::find(...) unnecessarily keeps class loaders alive
stefan.karlsson at oracle.com
Thu Feb 21 08:57:20 PST 2013
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
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
JDK-8001590 <https://jbs.oracle.com/bugs/browse/JDK-8001590>: NPG:
Footprint increase when running Jetty
StefanK & Erik Helin
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the hotspot-runtime-dev