Wooooosh

Rémi Forax forax at univ-mlv.fr
Thu Jun 18 06:37:10 PDT 2009


Christian has sent his first patch to enable compiler support of 
invokedynamic today,
I've worked late last night to do the same for the backport.

I am please to announce that the jsr292 backport now comes with a JIT (a 
kind of) that
recompiles at runtime a tree of method handle adapters to a single blob 
of byte code.

Just a small test: with jdk7
[forax at localhost sandbox]$ /usr/jdk/jdk1.7.0/bin/java 
-XX:+EnableInvokeDynamic JITTest
value 100000
elapsed 30250982 ns

with jdk5 + backport without JIT:
[forax at localhost sandbox]$ java -javaagent:../lib/jsr292-backport.jar 
-Dallow.JIT=false JITTest
value 100000
elapsed 30997166 ns

with jdk5 + backport JIT enable
[forax at localhost sandbox]$ java -javaagent:../lib/jsr292-backport.jar 
JITTest
value 100000
elapsed 14863411 ns

Wooosh, it's faster :)

I hope to come with the complete support of invokedynamic is the next 
milestone.

Enjoy,
Rémi

----------------------------------------------------------------------------------------------------------
JITTest.java:
import java.dyn.MethodHandle;
import java.dyn.MethodHandles;
import java.dyn.MethodType;

public class JITTest {
    public static class Test {
        public static int inc(int value) {
        return value + 1;
        }
    }
   
    public static void main(String[] args) {
    MethodHandle mh=MethodHandles.lookup().findStatic(Test.class, "inc",
        MethodType.make(int.class, int.class));
   
    long start = System.nanoTime();
   
    int value = 0;
    for(int i=0;i<100000;i++) {
      value = mh.<int>invoke(value);
    }
   
    long end = System.nanoTime();
   
    //jsr292.weaver.jit.JIT.debugCounter(Test.class);
   
    System.out.println("value " + value);
    System.out.println("elapsed " + (end - start) + " ns");
    }
}





More information about the mlvm-dev mailing list