> On Apr 8, 2017, at 6:14 PM, Gil Tene <g...@azul.com> wrote: > > There is a lot in this code to "learn" from.
Agreed…. > You can/should obviously use something like jmh to save you much of the > trouble of making these mistakes. But if you want to learn about the various > mistakes that people commonly make when trying to measure stuff, this code is > a good starting point. It is a classic "how not to micro-benchmark" example > and a good teaching/learning opportunity. So if we change the title from "Why > a Java method invocation is slower..." to "Why does measuring like this give > me the wrong impression that...", and putting aside style comments, here are > some comments and highlights of likely reasons of why you are seeing a bigger > number for the time elapsed in your single invocation from a second call site > compared to the 1,000,000 invocations from the earlier call site: > > - The first call site does not warm up the method. It warms up the call site. > "Warmup" is not a proper term fir what you are doing there... The method can > be (and likely was) inlined into the call site and optimized there. > > - When the second call site is invoked once, it May not have been inlined > there yet, and may be calling interpreted or lower tiered optimization > versions of the method. If excercized enough, the second call site would > likely inline as well. > > Separately interesting: > > - Your mySleep won't actually do what you think it does. The entire method > can be optimized away to nothing after inking at the call site by the JIT > once the calls to it actually warm up enough, since it has no side effects > and nothing is done with its return code. Well, this won’t happen in OpenJDK because of the return value. > > - Your while(true) loop in the code and the output don't seem to match. Where > is rest of the output? Or is this output from an earlier code version without > the while(true) loop? > > - You are accumulating more and more contents into an array list. At some > point the arraylist will be resized. It’s pre-sized… I’m going to play with this before commenting on the rest. — Kirk -- You received this message because you are subscribed to the Google Groups "mechanical-sympathy" group. To unsubscribe from this group and stop receiving emails from it, send an email to mechanical-sympathy+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.