Reference Objects and Garbage Collection

Tags:

http://j2eestudy.co.kr 에 올린 답변을 포스팅합니다.

———————-

제목: re: 강한참조? 약한참조?
> 알껏 같고 알고 있다고 생각했는데도, 레퍼런스를 보면 또 잘 모르는거 같고..
> 더이상 참조되지 않는 레퍼런스는 그 참조대상을 NULL 로 셋팅한다…?

그 ‘참조’를 NULL로 셋팅한다입니다. JVM에서의 GC는 객체가 접근 불가능할때
이루어집니다.

예를들어,
Object o = new Object();
o = null; // 바로 이 시점에 o는 GC될 수 있음!
를 생각하시면 됩니다.

또,
String s = “hello world”;
Object o = s;
s = null;
// 여기서는 s 가 널이지만, o에 의해 s의 원래 데이터 “hello world”가 포인팅되고 있습니다.
// 따라서 “hello world”라는 데이터는 GC되지 못합니다
o = null; // 바로 이 시점에 GC가 가능해집니다.

>
> Waek Reference, Soft Reference, String Reference..
>
> 어렵네요.. 죄송합니다. 좀 가르쳐 주세요..^^;

기본적으로 이들 은 메모리가 한정되어있을때, 객체에 대한 참조를 프로그래머가 아닌
JVM으로 하여금 null로 설정하게 함으로써, 필요에따라 특정 객체를 메모리에서
자동으로 삭제하기 위해 사용됩니다.

문서를 작성하여보았습니다. 경어체를 쓰지 않은 부분은 양해해주세요.
이해가 안가는 부분은 구체적으로 질문해주시면 다시 답변하겠습니다.

Reference Objects and Garbage Collection

Reference에 대한 Hierarchy

Reference의 세기: Strong > Soft > Weak > Phantom.

예를들어,


는 Phantom,


는 Weakly,


는 Softly referenced 된 것으로 취급한다.

Softly Referenced된 Object는 해당 Object에 대한 Strong reference가 없으면서, Soft Reference만 가질때를 말한다. 어떤 객체가 softly referenced되었다는 사실을 JVM이 알게되면, 경우에 따라 해당 객체와 이 객체를 point하는 soft reference를 clear한다. soft reference되었다고 반드시 clear되지는 않지만, JVM은 반드시 OutOfMemory 에러를 던지기 전에 객체를 clear한다.

Weakly Referenced된 객체는 해당 Object에 대한 접근에 Strong Reference와 Soft Reference가 없으면서 Weak Reference만 가질때를 의미한다. Weakly Referenced된 객체와 Softly Referenced된 객체의 가장 큰 차이는, Weakly Referenced된 객체는 JVM이 해당 객체가 Weakly Referenced되었다는 사실을 알게되면 곧바로 clear시켜버린다는 점이다.

Phantom Reference는 해당 Object에 대한 접근에 Strong Reference, Soft Reference, Weak Reference가 없으면서 Phantom Reference를 가질 때를 말한다. Phantom Reference는 해당 객체가 Phantom Reference라고 판단되더라도 clear되지 않는다. 대신, Reference Queue에 객체를 넣는다. 따라서 선언시부터 ReferenceQueue 클래스를 다음과 같이 사용해야한다.

ReferenceQueue queue = new ReferenceQueue();
PhantomReference pr = new PhantomReference(object, queue);

만약 객체가 Phaontom Reference가 되어 큐에 넣어졌다고 하자. 그러면 이 레퍼런스를 clear하고 큐에서 제거하는 것은 전적으로 프로그래머의 책임이된다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *