Recently I have evaluated many profilers. Following were the main requirements
a) Memory leak detection
b) CPU profiling
c) Method tracing
d) Code coverage
I have fount that YourKit is very good for Memory leak detection and CPU profiling. It also supports Method tracing but you need to use Java SE 5 or later. It doesn't supprot code coverage (I use cobertura for the same). Overall it is very good profiler.
Note: It is not free however it is very reasonable - $1200 f0r 5 license.