On Sat, May 28, 2011 at 7:10 AM, Alex Turner <[email protected]> wrote: > All, > > Hi! This is my first post here. I am Alex Turner, currently technical > team lead for the JVM compiler ground at Micro Focus. I have a great > interest in invokedynamic and its performance. I created a performance > test system using ASM 4.0 and Java. I am starting to get some figures > (see my blog at nerds-central.blogspot.com for the source but I don't > want to link spam you).
Please link-spam! This group is all about sharing :) > The tests are run using the Sun/Oracle JVM on the 1.7-143 release on > 64 bit Fedora 14. I would like to run the test (and more tests as I > create them) using a range of different JVM flags to get some real > numbers. I can then re-run these as new JVMs come out and try > different platforms. > > If I was to pick 3 key flags to mess with, what would they be and what > values should I give them Well had you asked a couple weeks back, I'd have recommended some inlining flags like -XX:MaxInlineSize=#### and -XX:InlineSmallCode=####. Those flags used to be useful for getting invokedynamic/methodhandl logic to inline completely, but in recent builds those don't make much of a difference (because the logic behind the scenes now discounts invokedynamic/methodhandle logic for inlining purposes). I have no suggestions at the moment for *tuning* invokedynamic. But I will recommend my favorite flags for *monitoring* the JVM's optimization of code: Required for many of these flags: -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation This will output a hotspot.log file containing a grotty XML-formatted representation of what the Hotspot JIT compiler is doing with your code. I would recommend not attempting to read this file yourself; your eyes will almost certainly bleed. Instead, look for the LogCompilation tool (logc) in OpenJDK sources under hotspot/src/share/tools/LogCompilation and use the -i flag to print out inlining information. Since inlining is the key to optimization, this is your first angle of attack for investigating perf. You should see invokedynamic calls inline like any other, along with any MethodHandle intermediates you might be using to invoke code. -XX:+PrintAssembly This one requires the "hsdis" Hotspot disassembler plugin available from the kenai.com project here: http://kenai.com/projects/base-hsdis/downloads Obviously this will require a bit of knowledge of x86 assembly, but x86 assembly isn't particularly difficult, is it? What you'll get from this is the ultimate truth about how the JVM has chosen to optimize your code. Ideally, you will see your method of interest with all calls inlined; in other words, the top 20-30% of the resulting asm will contain no CALL operations. CALL is the performance killer, not just because it's relatively slower in itself, but because it indicates lack of inlining. Lack of inlining means no optimization can happen across that boundary. ...BTW... I could hear no traffic noise of any kind on your podcast. Near as I could tell, you were podcasting from the bottom of a well or inside a deep cave, rather than from a garden shed as you claimed. I hope you have a heater or blanket, because it sounded very cold and lonely to be talking about the JVM down there. - Charlie -- You received this message because you are subscribed to the Google Groups "JVM Languages" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/jvm-languages?hl=en.
