If you need to profile your Java application and you don't want shell out $ for a proprietary tool, you might be interested in visualvm. It's licensed under the GPL and includes a number of cool features:
- It automatically connects to any JVM on your system (including the visualvm jvm itself) as they start up.
- It includes high level monitors of CPU usage, Heap, Classes and Threads
- Detailed views of Threads
- CPU and Memory profiling.