데이터가 가비지 수집되는 방식에 따라 네 가지 종류의 참조가 있습니다.
- 강력한 참조
- 약한 참조
- 소프트 참조
- 팬텀 참조
강력한 참조
참조 개체의 기본 유형입니다. 활성 강한 참조가 있는 개체는 가비지 수집할 수 없습니다. 강력하게 참조되는 변수가 null을 가리키는 경우에만 가능합니다. 예를 살펴보겠습니다 -
예
class Demo { //Some functionality } public class Demo_example{ public static void main(String[] args){ Demo my_inst = new Demo(); my_inst = null; } }
약한 참조
참조 객체의 기본 클래스가 아니므로 명시적으로 지정해야 합니다. 일반적으로 WeakHashmap과 함께 사용하여 항목 개체를 참조합니다. 이러한 약한 참조는 Java Virtual Machine에서 forgarbage 컬렉션으로 표시됩니다. 이러한 참조는 'java.lang.ref.WeakReference' 클래스를 사용하여 생성됩니다.
예를 들어 보겠습니다 -
예
import java.lang.ref.WeakReference; class Demo{ public void display_msg(){ System.out.println("Hello"); } } public class Demo_sample{ public static void main(String[] args){ Demo inst = new Demo(); inst.display_msg(); WeakReference<Demo> my_weak_ref = new WeakReference<Demo>(inst); inst = null; inst = my_weak_ref.get(); inst.display_msg(); }
출력
Hello Hello
Demo라는 클래스에는 'display_msg'라는 함수가 있습니다. 이 함수는 관련 메시지를 표시합니다. 'Demo_sample'이라는 다른 클래스에서 메인 함수가 정의되고 Demo 클래스의 인스턴스가 생성됩니다. 인스턴스에서 'display_msg' 함수가 호출됩니다. Demo 클래스에 대한 weakReference가 생성되고 Demo insatne이 null에 할당되고 함수가 다시 호출됩니다. 관련 출력이 콘솔에 표시됩니다.