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

SystemDictionary::resolve_super_or_fail() should look for the super class first

    XMLWordPrintable

    Details

    • Subcomponent:
    • Resolved In Build:
      b09

      Description

      In SystemDictionary::resolve_super_or_fail()

      http://hg.openjdk.java.net/jdk/jdk/file/5ac19bd3a1e2/src/hotspot/share/classfile/systemDictionary.cpp#l338

      It seems that we should first check if the super class has already been loaded. That way, we don't need the expensive operation of updating the placeholder for the child class, etc:

      E.g.,

          ClassLoaderData* loader_data = class_loader_data(class_loader);
          Dictionary* dictionary = loader_data->dictionary();
      + {
      + unsigned int sd_hash = dictionary->compute_hash(super_name);
      + InstanceKlass* squick = dictionary->find(sd_hash, super_name, protection_domain);
      + if (squick != NULL) {
      + return squick;
      + }
      + }
          unsigned int d_hash = dictionary->compute_hash(child_name);
          unsigned int p_hash = placeholders()->compute_hash(child_name);

      The placeholder code in this function is for checking ClassCircularityError. However, if the super has already been loaded (i.e., super doesn't have ClassCircularityError), we cannot cause ClassCircularityError by simply adding a sub class the to super.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              coleenp Coleen Phillimore
              Reporter:
              iklam Ioi Lam
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: