What are some good end to end CPU profilers that exist for Java?
Quick list of things I'm looking for:
- Offline profiling - No user interaction or GUI required during program execution. Dumping the profile data to a file and then requiring viewing afterwards with a GUI is fine, I just don't want to have to babysit it as the job runs
- End to End recording - Profiler should be able to start recording immediately after entering the main call for a J2SE application. It should stop recording immediately before the JVM exits.
- Call graph generation - After profiling, it'd be nice to turn the data into a visual call graph.
Google has a nice profiler for C/C++ - http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html
If the Java equivalent of this exists, it'd be exactly what I'm looking for.
I'm not including HProf in my list of prospective profilers because it performs badly compared to other commercial profilers I've looked at when you use accurate CPU call profiling (Usually done via Byte Code Injection, which is slow, but HProf appears at least an order of magnitude slower than other profilers, and when a single sampling profile run takes 1-2 hours, waiting more than a day for the same run is unacceptable)