The NoClassDefFoundError bug is back :(

Rémi Forax forax at univ-mlv.fr
Tue Dec 6 01:34:59 PST 2011


On 12/05/2011 04:28 PM, Rémi Forax wrote:
> John, Christian,
> I was updating the multi-dispatch sample from the cookbook
> when the NoClassDefFoundError bug re-appear.

I've reduced the code to this simple sample:
public class NoClassDefFoundSample {
   public void foo() {
     // do nothing
   }

   public static void main(String[] args) {
     NoClassDefFoundSample classDefFoundSample = new 
NoClassDefFoundSample();
     for(int i=0; i < 100000; i++) {
       classDefFoundSample.foo();   // invokedynamic
     }
   }
}

public class NoClassDefFoundBug {
   // bootstrap method
   public static CallSite invokevirtual(Lookup lookup, String name, 
MethodType type) throws Throwable {
     MethodHandle mh = lookup.findVirtual(type.parameterType(0), name,
         type.dropParameterTypes(0, 1));

     CallSite invokerCallSite = new MutableCallSite(mh);

     MethodHandle dynamicInvoker = invokerCallSite.dynamicInvoker();

     CallSite callSite = new MutableCallSite(type);
     callSite.setTarget(dynamicInvoker);

     return callSite;
   }
}

The sample triggers the JIT and the JITed code of the dynamicInvoker() 
throws
the NoClassDefFoundError.

Code is available here:
https://code.google.com/p/jsr292-cookbook/source/browse/#svn/trunk/multi-dispatch/src/bug
https://code.google.com/p/jsr292-cookbook/source/browse/trunk/multi-dispatch/NoClassDefFoundSample.java

cheers,
Rémi






More information about the mlvm-dev mailing list