We are using JProfiler. It's quite good and seems to fulfil most of your requirements. It's not free, but I think there is a trial.
- can pinpoint guilty line(s) in source files
I don't see how this would be even *possible*. As far as I can tell, the best a tool can do is tell you why an object isn't garbage collected - that is, where it is referenced from. (JProfiler does a fine job here).
It's impossible to automatically tell what's wrong with what code, though, because for that the tool had to understand the semantics. You typically have a whole chain of references that hold an object from being gc'ed, but to find out which link is the bad one takes the analysis of a developer.
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
I personally find JProfiler very useful. It is not free (though cheaper than JProbe I think) but there is an evaluation version.
I did find an Eclipse plug-in, but it seems easier (for me) to execute JProfiler standalone (it controls startup and shutdown of my app server - Oracle OC4J in my case but many are supported).
I don't use it too frequently (less than I should) but the value gained when I do is well worth the license cost to my company.
One of the initial things I liked (having used an older version of JProbe) was just how easy and quick it was to get JProfiler up and running with a real application providing results that I could interpret easily. We are talking about 15-20 minutes from initial evaluation copy download. Through further usage more features become evident, but this ease of getting to a reasonable starting point was a big point in it's favour for me.
Of course, JProbe is excellent, and there are others. When I looked around (about a year ago) there didn't seem to be any open source / free to use products that gave anything like the value of the commercial products, but I may have missed something and things may have changed.
IMPORTANT NOTICE Borland has ceased developing new versions of Optimizeit and JDataStore ("Sunset Products"). The current version of each of the Sunset Products is the last release available to customers. No new versions or upgrades of the Sunset Products will be made available even if support has been purchased. Support for the Sunset Products is only available for a limited time and will cease in accordance with Borland's standard support policies and terms and conditions. By clicking below you agree that you have read and understand this notice.
We're pleased to have you here with us in the Performance forum, but there are a few rules that need to be followed, and one is that proper names are required. Please take a look at the JavaRanch Naming Policy and adjust your display name to match it.
In particular, your display name must be a first and a last name separated by a space character, and must not be obviously fictitious.
If you are trying to track down memory leak on a high transaction system where you can't afford the overhead of instrumentation or JVMTI/JVMPI you can try Auptyma's Java Application Monitor from http://www.auptyma.com
It takes a snapshot of your heap, and loads it to a built in database to provide you with a tree representation of your memory reachability
It has been succesfully used by quite a few customers to find memory leaks on their production systems where they could not afford the overhead of other tools (because sometimes you want to find and fix problems before they crash your system).
<a href="http://www.auptyma.com" target="_blank" rel="nofollow">The Peak of Performance</a>