MethodHandle.invoke* performance

Noctarius me at noctarius.com
Wed Apr 3 08:59:09 PDT 2013


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am 03.04.2013 17:03, schrieb Cédric Champeau:
> Hi guys,
> 

Hey Cédric

> First of all, sorry if my question looks stupid, but I have 
> difficulties explaining what I see. I made a small benchmark
> for various MethodHandle.invoke* combinations. Of course, 
> micro-benchmarks are evil, but in that case, I find the
> figures quite interesting. Note that I'm not using
> invokedynamic instructions anywhere, I'm just "testing" the API
> from plain Java. As MethodHandles are promoted as "faster than
> reflection", I expected very different results.
> 
> So first, the link: https://gist.github.com/melix/5291792
> 
> The results I obtain here with openjdk-8-lambda b83 are not
> good:
> 
> |Classic for loop[-1] 166ms|| ||InvokeExact[-1] 170ms|| 
> ||InvokeExact (local method handle)[-1] 3410ms|| 
> ||bindTo+invokeExact[-1] 6905ms|| 
> ||insertArgument+invokeExact[-1] 6254ms|| ||invoke[-1]
> 60118ms|| ||bindTo+invoke[-1] 80072ms|| 
> ||insertArgument+invoke[-1] 78337ms|| ||Reflect[-1] 1219ms|| |

Are you sure about milliseconds (not nanos?) 80072ms would be ~80
seconds, I really cannot imagine this :-)

Cheers
Chris

> I added the "static final field" version as a suggestion from
> Jochen Theodorou, and it does make things much faster, but it's
> the *only* case that comes close to regular Java performance.
> Any other combination is much slower. I know that invoke() is
> supposed to perform type conversions, but is it supposed to be
> that slow as compared to invokeExact? What explains the
> difference between the local method handle and the static field
> version? In theory, using invokedynamic instruction, the method
> handle would come from a boostrap method so I could expect the
> same performance as the static field version, but if any other
> combination than direct invokeExact calls are slower, then it's
> not good. So, basically, I'd like to know what I'm missing here
> :)
> 
> Thanks for your explanations!
> 
> P.S: Note that order of tests do not matter here, I know I
> should not mix things, but I tested with different test
> execution order without more success.
> 
> -- Cédric Champeau SpringSource - A Division Of VMware 
> http://www.springsource.com/ http://twitter.com/CedricChampeau
> 
> 
> 
> _______________________________________________ mlvm-dev
> mailing list mlvm-dev at openjdk.java.net 
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
> 


- -- 


##############################
# A Digital's Life           #
##############################
Nickname: Noctarius
Location: Germany

Meet me at:
Ohloh: http://www.ohloh.net/accounts/noctarius
G+: https://plus.google.com/114622570438626215811
Web: http://www.noctarius.com
LinkedIn: http://www.linkedin.com/pub/christoph-engelbert/55/8b8/20
Xing: https://www.xing.com/profile/Christoph_Engelbert
Masterbranch: https://masterbranch.com/christoph.engelbert
XMPP/Jabber: noctarius at jabber.ccc.de
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (MingW32)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBAgAGBQJRXFHNAAoJEH/g+YBfahrq11EQAJaTYf+ws4kYFar1K8iog8OG
gdccUUVdHLBVMCjuuukMwdGrb7ksFqfkqqZx3zenBpgqqurJt0O07btJqJmQeLUK
cvk3L9TPWmfdVMhzsi9hOBuNTbRPIwaagP8tc2lkQfpBTK2NjRfSgc6KXsEitOnx
3faVENOxoAm8x2lOZUiitQ5geodAO8u3SCYfkykda2hr4ZFivEoP75ezIG9v9dj8
JxcvbkD2Ha8NnSmREYtTJlm+TCSmCpptssKymNyHzmM66omcwoLCczW9TCtYJIQM
91RT2yMppWTaDRLz0xy0NLjV8KO3bWTcnARO7w95uggx0rRhGYuenkFk60hvcr0S
slZClSbNEEi8Bflhmnl07T9Kxy1togziAKxFEc8lJwWLDn03iWDmnMI+R/RQ/bYn
s470CNEsBhwIEQbfG61AUwqGQaEHeIpojk10ml625n5Lv9DGPkvrH5xfCMiXQZ3e
wkmNEDFzh1YJBfTvHWWX+yWb1FSRcOTb2q0PHXoXETDsivTZvMVWXH6NyN9HfOQb
CSvHCWM+IpTaaAyQSxEq1sbeR0IPj3bZ6TXDWjvladJElb0Ac1LDUyQzRMbCib9D
l8QwT9HZEukIdiHMMU7yiCE7ma5mCLVN6kxJ/b8HujmO5OIijmGgErxwrotR7fkm
EUGguzbxJ5cjQRgzdQnH
=UC8p
-----END PGP SIGNATURE-----


More information about the mlvm-dev mailing list