As in most of our chapters so far, we will finish by reviewing a few common mistakes and false optimizations. In the benchmarking world, this is all about understanding the bottlenecks and the anti patterns that frequently show up in application code and how they can be avoided.
Note
Care should be taken that any instrumentation is not too intrusive. If, for example, the chosen instrumentation tool inserts extra bytecode operations all over the application code, the overall timing of the program can change completely. This may make the resulting profile useless for drawing any kinds of conclusions about the original program behavior. While small bytecode instrumenters may be handy for things like implementing counters for specific kinds of events, they rarely produce a true execution profile. Bytecode instrumenters also make it necessary to recompile and restart the application. The JRockit Mission Control suite, on the other hand, can plug in at runtime...