태그 보관물: Reference

Object의 Reference에 대한 내용..

자바 플랫폼의 경우 객체에 대해 네 가지 타입의 레퍼런스가 존재하는데, 일반적으로 사용하는 타입으로 Direct Reference를 들 수 있다.

   Object obj = new Object()
특히 Direct Reference는 객체 액세스를 위해 별도의 코딩을 필요로 하지 않는 일반 참조(strong references )라 할 수 있으며, 나머지 세 타입의 레퍼런스는 java.lang.ref 패키지에 포함되어 있는 Reference 클래스의 서브클래스들이다. Soft Reference는 SoftReference 클래스에 의해, Weak Reference는 WeakReference 클래스에 의해, 그리고 Phantom Reference는 PhantomReference 클래스에 의해 제공된다.

Soft Reference는 데이터 캐시와 그 기능이 유사한데, 시스템 메모리가 낮을 때 가비지 컬렉터는 Soft Reference가 유일한 레퍼런스인 객체를 임의로 비울 수 있다. 다시 말해서, 객체에 대한 일반 참조가 없는 경우 그 객체가 릴리즈 후보가 되는 것이다. 한편, 가비지 컬렉터는 OutOfMemoryException을 throw하기 전에 임의의 Soft Reference를 릴리즈해야 한다.

Weak Reference는 Soft Reference보다는 다소 불완전하다. 객체에 대한 유일한 레퍼런스가 Weak Rererence뿐이라면 가비지 컬렉터는 언제라도 오브젝트가 사용하는 메모리를 이용할 수 있으며, 메모리가 낮은 상태라면 별다른 요구사항은 발생하지 않는다. 일반적으로 객체가 사용하는 메모리는 후속 가비지 컬렉터 패스에서 이용된다.

Phantom Reference는 cleanup 작업과 관련이 있다. 이들은 가비지 컬렉터가 마무리 과정을 수행하고 객체를 비우기 바로 직전에 통지를 하는데, 이는 객체 내에서 cleanup 작업을 수행하는 방법 중 한 가지라고 생각하면 된다.