[9] RFR (S): 8141420: Compiler runtime entries don't hold Klass* from being GCed

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Mar 10 19:10:31 UTC 2016

Looks good.

 > Filed JDK-8141420 [1] to refactor the code to use mirrors instead.

Should be https://bugs.openjdk.java.net/browse/JDK-8151620

Vladimir K

On 3/10/16 6:02 AM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8141420/webrev.01/
> https://bugs.openjdk.java.net/browse/JDK-8141420
> Though compiler runtime entries use raw Klass*, they don't ensure the
> classes can't be unloaded. It causes rare crashes when Full GC and class
> unloading happens when freshly loaded class is being constructed and the
> only live reference to it is the Klass* passed into the runtime call.
> There are KlassHandles/instanceKlassHandles, but they don't do anything
> after PermGen was removed.
> The fix is to add mirror handles to keep classes alive across safepoints
> during the runtime calls. FTR handles aren't needed for primitive arrays.
> I chose the conservative fix, since I plan to backport it into 8u. Filed
> JDK-8141420 [1] to refactor the code to use mirrors instead. It should
> simplify the logic to track class liveness.
> No regression test provided, since I wasn't able to write one w/o
> instrumenting the JVM.
> Testing: manual (instrumented build which triggers class unloading from
> runtime entries), JPRT.
> Thanks!
> Best regards,
> Vladimir Ivanov
> [1] https://bugs.openjdk.java.net/browse/JDK-8141420

More information about the hotspot-dev mailing list