As with a lot of other things. I don't think there's a 'best' java profiler out there. You need to look at what your needs are, read the specs of a given profiler and balance that with your budget.
Within commercial profilers, a lot of people use JProbe, JProfiler or OptimizeIt. If you google them, you get more information.
For open source profilers, here's a handy list