So sorry for any confusion! The terms 'Survivors' and 'Survivors in growing classes', can definitely be misleading as you'd normally expect the number of survivors to grow or persist.
However, kindly consider the definition of a 'survivor': it is an object that was alive in the earlier snapshot and is still alive in the current snapshot. There will always be the same number of survivors or less in the later snapshot, because it's impossible to have a survivor created in between two snapshots. Thus the "surviving objects" and "survivng objects in growing classes" filters will always show instance differences of 0 or less. They are essentially showing how many objects from the earlier snapshot did not survive.
The instance difference values from the "survivng objects in growing classes" subset can then be used to distinguish leaks from objects that are being released at a slow rate. Classes with potential leaks are those with an instance difference of 0, which means that there are new objects of a class but none of the old ones have been released. If the difference is negative, then some of the objects are being released and the chances are that they're just being swapped in and out as part of normal processing.
Regarding the 'new objects' filter...
I may be missing something myself, but as far as I know it, the 'new objects' instance difference should always be >=0. Kindly bear with me and I'll check on this.
(Just some notes that you might find useful:
- The 'survivors' instance diff value is the number of objects from later snapshot that also exist in the earlier snapshot.
- The 'new objects' instance diff value is the number of objects from the later snapshot that do not exist in the earlier snapshot.
- Together, the 'survivors' and 'new objects' values sum up to the inst diff value (when no filters are applied))
Red Gate Software Ltd.