Could you rerun the test with a recent JDK 8 build?

-- Chris

On Oct 10, 2012, at 3:02 PM, Ashwin Jayaprakash <ashwin.jayaprak...@gmail.com> 
wrote:

> Hi, I was looking at the Java 7 InvokeDynamic/MethodHandle feature set and I 
> was curious to know how it performed compared to good old Reflection. 
> 
> I had refrained from posting this question for some time but I couldn't wait 
> any longer after I saw a reference to this bug fix 
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7023639 (Bug ID: 7023639 
> JSR 292 method handle invocation needs a fast path for compiled code) on this 
> forum. I suppose this change will go into the Oracle JDK sometime later.
> 
> I still went ahead with Oracle JDK 7u7 and ran a simple test using Google 
> Caliper (http://code.google.com/p/caliper/) on a Win 7, 64bit, 1 cpu x 2 core 
> x 4 HT, i7 920 laptop.
> 
> Q1: MethodHandle still seems slower than Reflection. Will that change 
> sometime in the future?
> 
> Q2: Also, am I using MethodHandle the right way in the code 
> Temp::timeHandle(int) below?
> 
> Test results:
>  0% Scenario{vm=java, trial=0, benchmark=Reflect, serverMode=-server, 
> memoryMin=-Xmx96M, memoryMax=-Xmx96M} 16.76 ns; ?=0.18 ns @ 10 trials
> 20% Scenario{vm=java, trial=0, benchmark=Handle, serverMode=-server, 
> memoryMin=-Xmx96M, memoryMax=-Xmx96M} 21.98 ns; ?=0.57 ns @ 10 trials
> 40% Scenario{vm=java, trial=0, benchmark=Direct, serverMode=-server, 
> memoryMin=-Xmx96M, memoryMax=-Xmx96M} 4.93 ns; ?=0.06 ns @ 10 trials
> 60% Scenario{vm=java, trial=0, benchmark=Iface, serverMode=-server, 
> memoryMin=-Xmx96M, memoryMax=-Xmx96M} 4.94 ns; ?=0.30 ns @ 10 trials
> 80% Scenario{vm=java, trial=0, benchmark=Static, serverMode=-server, 
> memoryMin=-Xmx96M, memoryMax=-Xmx96M} 4.88 ns; ?=0.03 ns @ 3 trials
> 
> benchmark    ns linear runtime
>   Reflect 16.76 ======================
>    Handle 21.98 ==============================
>    Direct  4.93 ======
>     Iface  4.94 ======
>    Static  4.88 ======
> 
> vm: java
> trial: 0
> serverMode: -server
> memoryMin: -Xmx96M
> memoryMax: -Xmx96M
> 
> 
> Test code:
> public class Temp extends SimpleBenchmark {
>     public static void main(String[] args) throws Exception {
>         Runner.main(Temp.class, args);
>     }
> 
>     public void timeReflect(int reps) throws Exception {
>         Method m = K.class.getMethod("exec", Object.class);
> 
>         K k = new K();
> 
>         for (int i = 0; i < reps; i++) {
>             m.invoke(k, i);
>         }
>     }
> 
>     public void timeHandle(int reps) throws Throwable {
>         MethodHandle mh = MethodHandles.lookup().findVirtual(K.class, "exec", 
> MethodType.methodType(void.class, Object.class));
> 
>         K k = new K();
> 
>         for (int i = 0; i < reps; i++) {
>             mh.invokeExact(k, (Object) i);
>         }
>     }
> 
>     public void timeDirect(int reps) throws Exception {
>         Method m = K.class.getMethod("exec", Object.class);
> 
>         K k = new K();
> 
>         for (int i = 0; i < reps; i++) {
>             k.exec(i);
>         }
>     }
> 
>     public void timeIface(int reps) throws Exception {
>         M m = new K();
> 
>         for (int i = 0; i < reps; i++) {
>             m.exec(i);
>         }
>     }
> 
>     public void timeStatic(int reps) throws Exception {
>         for (int i = 0; i < reps; i++) {
>             K.execS(i);
>         }
>     }
> }
> 
> public class K implements M {
>     static long s = 0;
> 
>     long l = 0;
> 
>     @Override
>     public void exec(Object o) {
>         l += o.hashCode();
>     }
> 
>     public static void execS(Object o) {
>         s += o.hashCode();
>     }
> }
> 
> public interface M {
>     void exec(Object o);
> }
> 
> Thanks,
> Ashwin (http://www.ashwinjayaprakash.com).
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev@openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to