Measuring the performance of your Java application can be somewhat of a black art, but jHiccup looks to take the mystery out of your performance issues.
Just released under the Creative Commons Licence by Azul Systems, jHiccup will measure any hiccups (pauses or stalls). The beauty of this is that you can identify whether the cause of a stall is in your application code or the underlying runtime platform. As far as I know, no other Java performance tool does this.
The tool does not measure delays caused by the application's code, but instead captures the stalls caused exclusively by the underlying runtime platform that would be visible to and affect any application thread running at the time of the stall.
jHiccup runs with a clain of zero performance overhead in the running of your application. Getting it setup is easy. Just download the tool and start up your program with the appropriate jHiccup parameter.
For example if you start your program like:
you'll now use
jHiccup java MyApp
Pretty simple! Two log files are created, which can be loaded into Excel. You can get a Hiccup by Time Interval Chart, or a Hiccup by Percentile Distribution chart:
This produces some interesting data for you to analyze. Tips on how to interpret the data are provided at the Azul website
jHiccup data and Hiccup Charts can quickly identify whether application responsiveness issue are dominated by application code or by the undelying runtime platform's behavior:
If application response time behavior is similar to that observed by jHiccup, observed as a correlation of dopminant stall events in time and of response time %'ile distributioon and magnitude, the runtime platform's behavior and occasional stalls are likely the dominant factor in application responsiveness. Improvement the runtime stall behavior through tuning or eliminating runtime stall causes will most likely improve the application respnse time characteristics.
If application response time beahvior does not correlate with jHiccup data and Hiccup Charts, the application code and/or externalresources are most likely the dominant factor, and runtime tuning and improvements in teh area of stalls and responsiveness are unliukely to result in improved application repsonse behavior.