Group by Dominators
The Group by Dominators views allow you to understand how memory is retained in your app. For example, you know that the major part of memory in your app is consumed by strings. Nevertheless, most likely, the subject of your optimizations are not these strings by themselves but data structures that store them. The Group by Dominators views answer the "Who retains the memory" question which is extremely important when analyzing ineffective memory usage. To answer this question properly, you should be acquainted with the concept of dominators.
The object A dominates the object B if every path to B from application's roots goes through A. In other words, the object B is retained in memory exclusively by the object A: If A is garbage collected, B is also garbage collected. For example, an array is a dominator for its elements (in case there are no other references to array elements). If there are more than one path to an object from app's roots, it is considered as not dominated. In terms of dotMemory such objects are called Not exclusively retained objects. For example, if the object C is retained by the objects A and B and A is garbage collected, C will stay in memory (as it is still referenced by B). Not exclusively retained objects are quite important for analysis as in some cases they might indicate a memory leak.
dotMemory offers two views for analyzing dominators in an object set:
- Tree - a tree list of dominators.
- Sunburst Chart - a graphical representation of the dominators tree list.