Hello, I heard that jsr292 makes dynamic method lookup&invocation faster than reflection so I did some performance comparison against plain reflection. I'm sending this mail since the result looks strange to me.
Code is here: https://raw.github.com/nahi/jsr292-sandbox/master/src/jp/gr/java_conf/jruby/MethodHandleTest.java And here's the result of above code on my linux 64bit box. % uname -a Linux ubuntu 2.6.39-0-generic #5~20110427-Ubuntu SMP Wed Apr 27 15:27:41 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux % /home/nahi/java/jdk1.7.0b147/bin/java -version java version "1.7.0" Java(TM) SE Runtime Environment (build 1.7.0-b147) Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode) % /home/nahi/java/jdk1.7.0b147/bin/java -cp out/production/jsr292-sandbox/ jp.gr.java_conf.jruby.MethodHandleTest -- 0 methodhandle lookup * 100000: 584.48 [msec], average: 5.84 [nsec] methodhandle lookup+invoke * 100000: 420.05 [msec], average: 4.20 [nsec] reflection lookup * 100000: 96.72 [msec], average: 0.97 [nsec] reflection lookup+invoke * 100000: 161.51 [msec], average: 1.62 [nsec] -- 1 methodhandle lookup * 100000: 184.66 [msec], average: 1.85 [nsec] methodhandle lookup+invoke * 100000: 290.20 [msec], average: 2.90 [nsec] reflection lookup * 100000: 27.19 [msec], average: 0.27 [nsec] reflection lookup+invoke * 100000: 62.92 [msec], average: 0.63 [nsec] -- 2 methodhandle lookup * 100000: 182.42 [msec], average: 1.82 [nsec] methodhandle lookup+invoke * 100000: 293.39 [msec], average: 2.93 [nsec] reflection lookup * 100000: 30.18 [msec], average: 0.30 [nsec] reflection lookup+invoke * 100000: 62.91 [msec], average: 0.63 [nsec] -- 3 methodhandle lookup * 100000: 182.37 [msec], average: 1.82 [nsec] methodhandle lookup+invoke * 100000: 245.75 [msec], average: 2.46 [nsec] reflection lookup * 100000: 27.13 [msec], average: 0.27 [nsec] reflection lookup+invoke * 100000: 58.63 [msec], average: 0.59 [nsec] -- 4 methodhandle lookup * 100000: 173.80 [msec], average: 1.74 [nsec] methodhandle lookup+invoke * 100000: 239.77 [msec], average: 2.40 [nsec] reflection lookup * 100000: 29.21 [msec], average: 0.29 [nsec] reflection lookup+invoke * 100000: 63.65 [msec], average: 0.64 [nsec] -- 5 methodhandle lookup * 100000: 188.05 [msec], average: 1.88 [nsec] methodhandle lookup+invoke * 100000: 247.05 [msec], average: 2.47 [nsec] reflection lookup * 100000: 27.80 [msec], average: 0.28 [nsec] reflection lookup+invoke * 100000: 61.39 [msec], average: 0.61 [nsec] -- 6 methodhandle lookup * 100000: 181.78 [msec], average: 1.82 [nsec] methodhandle lookup+invoke * 100000: 248.66 [msec], average: 2.49 [nsec] reflection lookup * 100000: 29.58 [msec], average: 0.30 [nsec] reflection lookup+invoke * 100000: 64.29 [msec], average: 0.64 [nsec] -- 7 methodhandle lookup * 100000: 178.12 [msec], average: 1.78 [nsec] methodhandle lookup+invoke * 100000: 255.79 [msec], average: 2.56 [nsec] reflection lookup * 100000: 28.21 [msec], average: 0.28 [nsec] reflection lookup+invoke * 100000: 60.76 [msec], average: 0.61 [nsec] -- 8 methodhandle lookup * 100000: 172.35 [msec], average: 1.72 [nsec] methodhandle lookup+invoke * 100000: 252.54 [msec], average: 2.53 [nsec] reflection lookup * 100000: 28.52 [msec], average: 0.29 [nsec] reflection lookup+invoke * 100000: 67.25 [msec], average: 0.67 [nsec] -- 9 methodhandle lookup * 100000: 181.18 [msec], average: 1.81 [nsec] methodhandle lookup+invoke * 100000: 250.97 [msec], average: 2.51 [nsec] reflection lookup * 100000: 27.14 [msec], average: 0.27 [nsec] reflection lookup+invoke * 100000: 62.53 [msec], average: 0.63 [nsec] Hotspot benchmarking is hard and I would be missing something. Am I doing it wrong? Can I expect jsr292 invocation to be faster than reflection? Regards, // NaHi _______________________________________________ mlvm-dev mailing list [email protected] http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
