开发者

Comparing java memory heap dumps: Memory profiling for Java desktop application [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 9 years ago.

This is a more specific question to follow up on another question that I have asked recently. A correct answer for this question will earn a correct answer for that previous question too (since that is still in limbo)!

Basically I have a Java desktop application with a memory leak issue. I am using the memory profiler in Netbeans IDE to profile the memory issue. These are the steps that I have taken done so far:

  1. Attach a new memory profiler to the Netbeans project
  2. Define profiling points at several careful chosen lines of code, and set them to trigger a memory heap dump
  3. Run the application in profiling mode

The end result of this is that I have several memory dumps saved to disk in *.hprof files. Netbeans IDE lets me peruse the contents (basic sort and search) of these memory dumps, and even lets me walk the heap, by seeing what the references contained within each instance, and what other objects reference each instance. That is all good, and I have been able to identify 1 or 2 fairly obvious memory leaks and rectify about 15% of the problem thus far.

However, right now the method I am using relies on creating hypotheses about which objects should NOT be in memory at a particular point of time, and then investigating those. What I am after now is a way to compare two separate heap dumps: Basically I have two heap dumps that should be almost the same, because the application has been restored to the same state.

However, one is before the memory leak, and the other after the memory leak, and so they are obviously different. If I am able to compare these two heaps using a of tool, instead of manually as I am doing now, then I need not rely on hypotheses to identify where the leaks are occuring, and can just have the tool identify them for me.

This is important for me because of the the sheer number of classes and instances involved for this particular application (700+ and millions, repsectively)

Is the Netbeans IDE's profiler capabl开发者_如何学运维e of doing this?

If not, is there a tool out there that is able to perform this task?

Thank you!


There is also a free, GUI tool for this task: VisualVM. It lets you take several heap dumps and then tell it to compare one with another, displaying the differing contents as a list, with a graphical representation of each element's share of used memory. Also, interactively browsing the heap dump difference is much more comfortable than with jhat.

Comparing java memory heap dumps: Memory profiling for Java desktop application [closed]


You could use jhat. Specifically look at the option(-baseline baseline-dump-file) on the page I reference it says the following:

"Specify a baseline heap dump. Objects in both heap dumps with the same object ID will be marked as not being "new". Other objects will be marked as "new". This is useful while comparing two different heap dumps."

this may help when comparing the two heap dumps.


YourKit can compare heap dumps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜