수색…


다른 참조 유형

java.lang.ref 패키지는 가비지 컬렉터와의 제한된 상호 작용을 지원하는 참조 객체 클래스를 제공합니다.

Java에는 네 가지 주요 참조 유형이 있습니다. 그들은:

  • 강력한 참조
  • 약한 참조
  • 소프트 참조
  • 팬텀 참조

1. 강한 참고

이것은 객체를 만드는 일반적인 형태입니다.

MyObject myObject = new MyObject();

변수 홀더가 생성 된 객체에 대한 강력한 참조를 보유하고 있습니다. 이 변수가 live MyObject 값을 보유하고있는 한 MyObject 인스턴스는 가비지 수집기에서 수집하지 않습니다.

2. 약한 참조

객체를 더 길게 유지하지 않고 가능한 한 빨리 객체에 할당 된 메모리를 지우거나 해제해야하는 경우 이렇게하는 것이 좋습니다.

WeakReference myObjectRef = new WeakReference(MyObject);

간단히 말해, 약한 참조는 객체가 메모리에 남아 있도록 강요하지 않는 참조입니다. 약한 참조는 가비지 수집기가 사용자의 연결 가능성을 판단 할 수있는 기능을 활용할 수있게하므로 직접 처리 할 필요가 없습니다.

생성 한 객체가 필요하면 .get() 메서드를 사용하면됩니다.

myObjectRef.get();

다음 코드는이를 예시합니다.

WeakReference myObjectRef = new WeakReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the object reference address
System.gc();
System.out.println(myObjectRef.get()); // This will print 'null' if the GC cleaned up the object

3. 소프트 참조

소프트 참조는 약한 참조보다 약간 강합니다. 다음과 같이 소프트 참조 객체를 만들 수 있습니다.

SoftReference myObjectRef = new SoftReference(MyObject);

그들은 약한 참조보다 더 강하게 기억을 붙잡을 수 있습니다. 메모리 공급 / 리소스가 충분하면 가비지 수집기가 소프트 참조를 열악한 참조로 열정적으로 정리하지 않습니다.

부드러운 참조는 캐싱에 사용하기 편리합니다. 소프트 참조 된 객체를 캐시로 만들 수 있습니다. 여기서 캐시 된 객체는 메모리가 다 떨어질 때까지 유지됩니다. 메모리가 충분한 리소스를 제공 할 수없는 경우 가비지 수집기가 소프트 참조를 제거합니다.

SoftReference myObjectRef = new SoftReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the reference address of the Object
System.gc();
System.out.println(myObjectRef.get()); // This may or may not print the reference address of the Object

4. 팬텀 참조

가장 약한 참조 유형입니다. Phantom Reference를 사용하여 객체 참조를 만든 경우 get() 메서드는 항상 null을 반환합니다!

이 참조를 사용하는 것은 "콜렉터가 해당 지시 대상을 다시 회수 할 수 있다고 판단한 후 대기열에있는 팬텀 참조 오브젝트입니다. 팬텀 참조는 가장 일반적으로 사용되는 것보다 더 유연한 방식으로 사전 예 상 정리 작업을 스케줄링하는 데 사용됩니다. 자바 파이널화 메커니즘. " - 오라클의 Phantom Reference Javadoc 에서.

다음과 같이 Phantom Reference의 객체를 생성 할 수 있습니다 :

PhantomReference myObjectRef = new PhantomReference(MyObject);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow