As you work with JProbe, you may need some help to get the most out of your analysis sessions. The following sections provide some tips. If you do not find what you are looking for here, try using the technical support resources offered by Quest Software.
This section contains the following topics:
• The Merged Allocation Points or Call Traces view states “Empty data set: No matches.”
• The stack traces are inaccurate in the Merged Allocation Points view.
If the Merged Allocation Points view indicates “Empty
data set: No matches,” this may be because the JVM did not provide
traces for any of the objects of the class. Another reason may be that
you did not set the runtime session settings to collect traces (if you
are investigating by Use Case Count/Memory) or garbage data (if you
are investigating by Dead Count/Memory). Click the Specify Settings
toolbar button to open
the Set Session Settings dialog and choose the appropriate option to
collect traces, garbage collection data, or both.
For example, consider the following Java program:
Method A line 100 calls Method B .. Method B line 200 Object o = new Object();
Most JVMs do some optimization to the code and eventually can inline the method B into the method A. After inlining, the line number reported in the stack trace will be A:100—that is, the line where A calls B, not the line where Object o is created. B is not visible in the stack trace.
You will know when you open the source code that inlining has occurred. You should be able to determine which method was inlined from the code associated with the line number, locate that method, and investigate the problem. If you are not familiar enough with your program to locate the method, you can rerun the session without the JVM’s optimizing compiler. Your program will run slower, but the accuracy of the allocation point information should improve because methods are not inlined.
Also, due to the way the JVM reports allocations, the trace may be deeper than you expect. For example:
Method C line 300: Widget w = new Widget()
It is possible that JProbe will report the allocation as being in the Widget constructor, Widget.<init>() instead of method C, but method C will likely be in the trace, calling the Widget constructor.