I've tried [VisualVM](http://visualvm.java.net/) and [JVM Monitor](http://www.jvmmonitor.org/) so far, and neither have behaved as I need them to. A short synopsis of my program: I need to measure a fast application with subsecond precision across 5+ threads. By the time I can select "Start Profiling", my application has ended. As a workaround, I put `System.in.read()` at the end of my application, but this means that everything from the read onwards is garbage information and skews some of the measurements. 

JVM Monitor especially should start automatically profiling on the launch of every application, being embedded into Eclipse.