Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8008549

NPG: SystemDictionary::find(...) unnecessarily keeps class loaders alive

    Details

    • Subcomponent:
    • Introduced In Version:
    • Resolved In Build:
      b22

      Backports

        Description

        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: NPG: Footprint increase when running Jetty

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  stefank Stefan Karlsson
                  Reporter:
                  stefank Stefan Karlsson
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  1 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: