The NoClassDefFoundError bug is back :(
Rémi Forax
forax at univ-mlv.fr
Tue Dec 6 01:52:01 PST 2011
On 12/06/2011 10:34 AM, Rémi Forax wrote:
> 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
I've forget to say that a workaround is to erase the type used the callsite
before calling dynamicInvoker().
>
> cheers,
> Rémi
cheers,
Rémi
More information about the mlvm-dev
mailing list