< prev index next >

test/jdk/java/lang/invoke/defineHiddenClass/UnloadingTest.java

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com
rev 58568 : [mq]: hidden-class-4

*** 22,31 **** --- 22,32 ---- */ /* * @test * @summary verify if the hidden class is unloaded when the class loader is GC'ed + * @modules jdk.compiler * @library /test/lib/ * @build jdk.test.lib.util.ForceGC * @run testng/othervm UnloadingTest */
*** 104,127 **** /* * Create a nest of two hidden classes. * They can be unloaded even the loader is strongly reachable */ @Test ! public void hiddenClassNest2() throws Exception { TestLoader loader = new TestLoader(); Class<?> helper = Class.forName("LookupHelper", true, loader); Method m = helper.getMethod("getLookup"); Lookup lookup = (Lookup)m.invoke(null); HiddenClassUnloader[] unloaders = createNestOfTwoHiddenClasses(lookup, false, false); // keep a strong reference to the nest member class Class<?> member = unloaders[1].weakRef.get(); // nest host and member will not be unloaded assertFalse(unloaders[0].tryUnload()); assertFalse(unloaders[1].tryUnload()); // clear the reference to the nest member member = null; // nest host and member will be unloaded unloaders[0].unload(); unloaders[1].unload(); --- 105,130 ---- /* * Create a nest of two hidden classes. * They can be unloaded even the loader is strongly reachable */ @Test ! public void hiddenClassNest() throws Exception { TestLoader loader = new TestLoader(); Class<?> helper = Class.forName("LookupHelper", true, loader); Method m = helper.getMethod("getLookup"); Lookup lookup = (Lookup)m.invoke(null); HiddenClassUnloader[] unloaders = createNestOfTwoHiddenClasses(lookup, false, false); // keep a strong reference to the nest member class Class<?> member = unloaders[1].weakRef.get(); + assertTrue(member != null); // nest host and member will not be unloaded assertFalse(unloaders[0].tryUnload()); assertFalse(unloaders[1].tryUnload()); // clear the reference to the nest member + Reference.reachabilityFence(member); member = null; // nest host and member will be unloaded unloaders[0].unload(); unloaders[1].unload();
*** 204,214 **** } static class HiddenClassUnloader { private final WeakReference<Class<?>> weakRef; private HiddenClassUnloader(Class<?> hc) { ! assertTrue(hc.isHiddenClass()); this.weakRef = new WeakReference<>(hc); } void unload() { // Force garbage collection to trigger unloading of class loader and native library --- 207,217 ---- } static class HiddenClassUnloader { private final WeakReference<Class<?>> weakRef; private HiddenClassUnloader(Class<?> hc) { ! assertTrue(hc.isHidden()); this.weakRef = new WeakReference<>(hc); } void unload() { // Force garbage collection to trigger unloading of class loader and native library
< prev index next >