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.
객체의 Shallow 크기라는 것은 객체 자체가 저장되는 메모리의 양을 말하며, 참조되는 객체가 포함되지 않은다. 배열이 아닌 Shallow 크기는 해당 객체가 갖고 있는 필드의 갯수와 타입에 따라 달라진다. 배열의 Shallow 크기는 배열의 길이와 요소(객체, 기본자료형)의 타입에 의존적이다. 객체의 집합(set)에 대한 Shallow 크기는 해당 집합(set)에 있는 모든 객체의 Shallow 크기의 합을 말한다.
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.
Retained 크기는 Shallow 크기 + 해당 객체에서만 직/간접적으로 접근 가능한 객체들의 shallow 크기를 말한다. 다시 말해서, retained 크기는 가비지 컬렉터에 의해서 해당 객체가 제거될 때 사라지는 메모리의 크기를 나타낸다.
To better understand the notion of the retained size, let us look at the following examples:
retained size에 대한 보다 더 자세한 이해를 위해서 다음의 예제를 살펴보자.
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).
retained size를 측정하기 위해서는, 메모리에 있는 모든 객체들은 그래프의 노드로 간주되며, 그것들의 edge는 객체들에서 객체들로의 참조를 나타낸다. 여기에 특별한 노드가 있는데, 이는 GC root 객체이며 이것은 측정 당시에 가비지 컬렉터에 의해서 처리되지 않는다.
The pictures below show the same set of objects, but with varying internal references.
아래 그림을 보면 돌일한 set을 가지는 객체들이며, 내부적인 참조는 다른 상황이다.
Figure 1:
|
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 byGC root.
obj1을 생각해보자.
여러분들이 볼 수 있듯이, 두 그림에서 색칠되어 있는 객체들은 obj1에서만 직/간접적으로 접근가능하다. 그림 1에서는 obj3이 색칠되어 있지 않은 것을 볼수 있다. 왜냐하면 해당 객체는 GC root 객체에서 참조하고 있기 때문이다. 그림 2에서는 obj3이 retained set에 포함되어 있다. obj5는 아직도 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
- 그림 1 : obj1,2,4의 shallow size의 합
- 그림 2 : obj1,2,3,4의 shallow size의 합
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
- 그림 1 : obj2, 4의 shallow size의 합
- 그림 2 : obj2,3,4의 shallow size의 합
In general, retained size is an integral measure, which helps to understand the structure (clusterization) of memory and the dependences between object subgraphs, as well as find potential roots of those subgraphs.
일반적으로 retained size는 integral 한 측정이며, 메모리의 구조와 객체 하위 그래프의 의존관계를 이해하는데 도움이 된다. 그리고 이러한 하위 그래프의 잠재적인 root를 찾을 수 있다.
'Java > Java Advanced' 카테고리의 다른 글
[Advanced Java] Attach API (0) | 2011.03.28 |
---|---|
[링크] Java Attach API (0) | 2011.03.21 |
Java Concurrency in Practice 저자의 블로그 (0) | 2010.11.15 |
[Java Concurrent] 일반적으로 모르는 자바에 대한 사실들 (0) | 2010.06.30 |
[Java PDF] 자바로 PDF 파일을 만들어 주는 iText 라이브러리 (0) | 2009.12.22 |