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

JVMCIEnv::get_jvmci_type does not keep klasses alive

XMLWordPrintable

    • b25
    • generic
    • generic

        Erik Osterlund wrote:
        The JVMCIEnv::get_jvmci_type() function has the following block of code:

        #ifdef INCLUDE_ALL_GCS
            if (UseG1GC) {
              // The klass might have come from a weak location so enqueue
              // the Class to make sure it's noticed by G1
              G1SATBCardTableModRefBS::enqueue(klass()->java_mirror());
            }
        #endif // Klass* don't require tracking as Metadata*

        This serves the purpose of keeping the Klass alive so that the handle may be used safely. However, the INCLUDE_ALL_GCS does not exist in jdk13, and therefore, the ifdef block will not be embedded into the binary. In fact, the G1SATBCardTableModRefBS class does not exist either. Nowadays, rather than explicitly enqueueing things for G1, we use the Access API to keep things alive. So the JVMCI adaptation to jdk13 needs to adapt to that. As a result, classes are not kept alive, leading to crashes.

              kvn Vladimir Kozlov
              kvn Vladimir Kozlov
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: