JavaTM Platform
Standard Ed. 6

패키지 java.lang.ref

가비지 컬렉터와의 제한부의 대화를 지원하는, 참조 객체 클래스를 제공합니다.

참조처:
          설명

클래스의 개요
PhantomReference<T> 팬텀 참조 객체입니다.
Reference<T> 참조 객체 유익의 추상 base class입니다.
ReferenceQueue<T> 참조 큐입니다.
SoftReference<T> 메모리 요구에 응해 가비지 컬렉터의 판단으로 클리어 되는 소프트 참조 객체입니다.
WeakReference<T> 약참조 객체입니다.
 

패키지 java.lang.ref 의 설명

가비지 컬렉터와의 제한부의 대화를 지원하는, 참조 객체 클래스를 제공합니다. 다른 있는 객체가 가비지 컬렉터에 의해 벌써 재생되고 있어도, 그 객체를 가리키는 참조를 유지하고 싶은 경우에, 프로그램은 참조 객체를 사용할 수 있습니다. 게다가 프로그램은, 어느 객체에의 도달 가능성이 바뀌었다고 가비지 컬렉터가 판단한 후에, 통지를 받도록(듯이) 할 수가 있습니다.

패키지의 스펙

「참조 객체」는, 그 참조 자체를 다른 객체와 같이 검사 및 조작할 수 있도록(듯이) 하기 위해서, 다른 객체에의 참조를 캡슐화합니다. 약한 것으로부터 순서에, 「소프트」, 「미만」, 및 「팬텀」이라고 하는 3 종류의 참조 객체가 제공됩니다. 각 형은, 다음에 정의되고 있도록(듯이), 대응하는 도달 가능성의 레벨이 각각 다릅니다. 소프트 참조는, 메모리 센시티브인 캐쉬를 구현하기 위해서 제공됩니다. 약참조는, 키 또는 값이 재사용되는 것을 저지하지 않는 정규화 매핑을 구현하기 위해서 제공됩니다. 팬텀 참조는, Java 의 finalize 기구보다 유연한 방법으로, 프리모르템크리압아크션을 스케줄링 하기 위해서 제공됩니다.

각 형의 참조 객체는, 추상 기저 Reference 클래스의 서브 클래스에 의해 구현됩니다. 그러한 서브 클래스의 인스턴스는, 「리파렌트」라고 불리는, 특정의 객체에의 참조를 캡슐화합니다. 각 참조 객체는, 참조를 취득 및 클리어하기 위한 메소드를 제공합니다. 클리어 처리는 제공됩니다만, 참조 객체는 불변이기 (위해)때문에,set 오퍼레이션은 제공되지 않습니다. 프로그램은, 이러한 서브 클래스를 한층 더 서브 클래스화해 목적에 있던 필드 및 메소드를 추가하는 일도, 이러한 서브 클래스를 변경하지 않고 그대로 사용할 수도 있습니다.

통지

프로그램은, 적절한 참조 객체를 그것이 작성된 시점에서 「참조 큐」에 「등록」하는 것에 의해, 객체의 도달 가능성이 변경된 통지를 받도록(듯이) 요구할 수 있습니다. 리파렌트의 도달 가능성이 그 참조형에 대응하는 값으로 변경되었다고 판단한 뒤에, 가비지 컬렉터는 그 참조를 관련한 큐에 추가합니다. 이 시점에서, 참조는 「큐에 들어가 있다」라고 보입니다. 프로그램은, 참조가 이용 가능하게 될 때까지 폴링 또는 블록 하는 것에 의해, 큐로부터 참조를 삭제할 수 있습니다. 참조 큐는,ReferenceQueue 클래스에 의해 구현됩니다.

등록된 참조 객체와 그 큐의 관계는 한방향입니다. 즉, 큐는 등록되어 있는 참조의 이력을 기록하지 않습니다. 등록되어 있는 참조 자체가 도달 불가능하게 되면(자), 그것은 절대로 큐에 넣어지지 않습니다. 참조 객체를 사용해 프로그램이 리파렌트를 필요로 하는 한 객체를 도달 가능하게 해 두는 것은 프로그램의 책임입니다.

프로그램에 따라서는, 어느 thread를, 1 개(살) 이상의 큐로부터의 참조 객체의 삭제 및 그러한 처리 전용으로 하도록(듯이) 선택됩니다만, 이것은, 전혀 필요 없습니다. 많은 경우에 잘 기능하는 방법은, 꽤 빈번하게 행해지는 것 외의 액션을 실행하는 동안에 참조 큐를 검사하는 것입니다. 예를 들어, 약키를 구현하기 위해서 약참조를 사용하는 해시 테이블의 경우는, 테이블이 액세스 될 때마다 자신의 참조 큐에 대해서 폴링 합니다. WeakHashMap 클래스는 이 방법으로 기능합니다. ReferenceQueue.poll 메소드는 단지 내부 데이터 구조를 체크할 뿐(만큼)이므로, 이 체크가 해시 테이블 액세스 메소드에게 주는 오버헤드는 매우 정확히 알 수 없는 것입니다.

자동적으로 클리어 되는 참조

소프트 참조 및 약참조는, 그것들이 등록되어 있는 큐에 추가되기 전에 수집가에 의해 자동적으로 클리어 됩니다. 그 때문에, 소프트 참조 및 약참조는, 유효하게 되기 위해서(때문에) 큐에 등록될 필요는 없습니다 (팬텀 참조는 필요). 팬텀 참조를 개입시켜 도달 가능한 객체는, 팬텀 참조가 모두 클리어 되는지, 팬텀 참조 자체가 도달 불가능하게 될 때까지 도달 가능합니다.

도달 가능성

도달 가능성에는 최강으로부터 최미만까지의 레벨이 있어, 이것은 객체의 라이프 사이클을 반영합니다. 그것들은, 기능적으로 다음과 같이 정의됩니다.

도입된 버젼:
1.2

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.