Shallow Size Vs Retained Size

YourKit Java Profiler is capable of measuring shallow and retained sizes of objects.

Sep 02, 2017 Shallow size – size of the object itself including only references to other objects, without objects which are referenced. Retained size – size of the object including references to other objects. If a square footing of size 4 m x 4 m is resting on the surface of a deposit of the above clay, the ultimate bearing capacity of the footing (as per Terzaghi’s equation) is (A) 1600 kPa (B) 315 kPa. Determine footing location and depth – shallow footings are less expensive, but the variability of the soil from the geotechnical report will drive choices 4. Evaluate soil bearing capacity – the factor of safety is considered here 5. Determine footing size – these calculations are based on working loads and the allowable soil pressure 6.

Shallow size of an object is the amount of memory allocated to store the object itself, not taking into account the referenced objects. Shallow size of a regular (non-array) object depends on the number and types of its fields. Shallow size of an array depends on the array length and the type of its elements (objects, primitive types). Shallow size of a set of objects represents the sum of shallow sizes of all objects in the set.

Retained size of an object is its shallow size plus the shallow sizes of the objects that are accessible, directly or indirectly, only from this object. In other words, the retained size represents the amount of memory that will be freed by the garbage collector when this object is collected.

Shallow Size Vs Retained Size Standard

To better understand the notion of the retained size, let us look at the following examples:

In order to measure the retained sizes, all objects in memory are treated as nodes of a graph where its edges represent references from objects to objects. There are also special nodes - GC root objects, which will not be collected by Garbage Collector at the time of measuring (read more about GC roots).

The pictures below show the same set of objects, but with varying internal references.

Figure 2:

Let us consider obj1.
As you can see, in both pictures we have highlighted all of the objects that are directly or indirectly accessed only by obj1. If you look at Figure 1, you will see that obj3 is not highlighted, because it is also referenced by a GC root object. On Figure 2, however, it is already included into the retained set, unlike obj5, which is still referenced by GC root.

Thus, the retained size of obj1 will represent the following respective values:

  • For Figure 1: the sum of shallow sizes of obj1, obj2 and obj4
  • For Figure 2: the sum of shallow sizes of obj1, obj2, obj3 and obj4

Looking at obj2, however, we see that its retained size in the above cases will be:

  • For Figure 1: the sum of shallow sizes of obj2 and obj4
  • For Figure 2: the sum of shallow sizes of obj2, obj3 and obj4

In general, retained size is an integral measure, which helps to understand the structure (clustering) of memory and the dependencies between object subgraphs, as well as find potential roots of those subgraphs.

In this article, we look at the three different sizes that objects can be in a heap analysis, and what this means for your performance.

Join the DZone community and get the full member experience.

Join For Free

If you ever worked with heap analysis, you might have encountered terms such as shallow, retained, and deep size of an object. It doesn’t really matter if we’re talking about analyzing a JVM heap dump with VisualVM or a JavaScript heap snapshot with Chrome DevTools – the terms are the same. The difference between shallow, retained, and deep size is rather straightforward and it can be easily depicted with the following images:

Shallow size – size of the object itself including only references to other objects, without objects which are referenced.

Shallow Size Vs Retained Size Chart

Retained


Shallow Size Vs Retained Size Model

Retained size – size of the object including references to other objects and objects which are referenced, but are not shared with any other objects. In other words, the retained memory of an object is the amount of memory that would be freed if the object A was eligible to be collected by GC. Memory of the object E couldn’t be freed because it is also an instance variable of object B.

Deep size – size of the object including references to other objects and objects which are referenced, even if they are shared with other objects.

performance,memory management,heap dump,heap

Published at DZone with permission of Grzegorz Mirek, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone