The number of top-level objects that are shown is limited to 100 by default. You can add more objects with the hyperlink after the last row in the table. The default number of objects can be adjusted in the view settings.
a regular reference.
a reference expanded by the search to garbage collector root (see below).
a reference from an object that is
already present as an ancestor node. This indicates a reference cycle. Cycles are more conveniently analyzed
in the graph view
The second icon is either not present or one of
a reference from a class.
In most circumstances, classes are the last step on the path to the GC root that you are interested in.
Classes are not garbage collector roots, but in all situations where no custom classloaders
are used it is appropriate and easier to treat them as such. This is JProfiler's default
mode when searching for garbage collector roots, you can change this in the
path to root options dialog.
Class objects have references to
Note that class objects have no reference to their super class.
Classes are garbage collected together with their classloader when
a garbage collector root.
A garbage collector root is an entity in the JVM that itself is not garbage collected and pins other objects or classes.
There are the following types of garbage collector roots:
For classes there is a special condition that prevents garbage collection: Since each instance has an implicit reference to its class, any live instance prevents a class from being garbage collected. This construct groups all such instances for reasons of conciseness. In this way you can also select all instances of a specific class (rather than a specific class name).
Each object is optionally annotated with an object ID. With this ID, you can check whether two objects are
the same or not. The display of IDs can be switched off the the context menu and the
view settings.
[Show paths to GC root]
button at the top of the view. The options dialog
allows you to configure the way JProfiler performs the search.
After the search has completed, the tree is expanded up to the garbage collector roots that were found. If the object is not referenced by a garbage collector root, a message box will be displayed. Note that this case is only possible if the "Remove unreferenced and weakly referenced objects" option in the heap walker option dialog is unchecked.
Newly expanded nodes on the path to the GC root have a red
reference icon. To highlight the found path
without any distractions, no sibling references are shown on that level. To show all sibling references, you can
either choose the Show all incoming references action from the context menu or
View menu or collapse and expand the parent node.
[Show in graph]
button at the top of the view. The selected instances will be then be added to the
graph. The graph is not cleared when you choose a new object set
or go back in the history, so you can add objects from different object sets to the graph.
[Show toString() values] button
at the top of the view is active. When you click it, JProfiler invokes toString() on all expanded
references in the view and shows the results. If you open more references or add more references with the
hyperlink at the bottom of the table, those objects will not have their toString() values
displayed. You will have to click the button again in order to show the missing values.
The reason why this operation is not performed automatically is that calculating toString() values is an expensive operation that invokes Java code in the profiled JVM and may even have unwanted side effects in buggy implementations.
After your selection, the view helper dialog will assist you in choosing the appropriate view for the new object set.