Eric M. Burke writes that he likes Optimizeit. (That's a memory debugger / profiler / code coverage tool for Java.) I won't disagree with his opinion, even though the last time I used it was years ago (before it was bought by Borland IIRC).
I think that what makes possible to implement efficiently tools like this for Java is the very structure of the JVM. I hope that the Parrot architecture will help us to have better tools for Perl 6 than we have currently for Perl 5.