일반적인 객체 참조 방식으로, 객체가 참조되는 동안 가비지 컬렉션의 대상이 되지 않는다. 객체에 대한 강한 참조가 있을 경우, 해당 객체는 참조하는 동안 메모리에서 해제되지 않는다.
약한 참조는 가비지 컬렉션의 대상이 될 수 있는 참조이다. 약한 참조를 사용하면 메모리 누수를 방지하고, 객체가 더 이상 강한 참조를 가지지 않을 때 가비지 컬렉션에 의해 수거될 수 있다.
WeakHashMap은 약한 참조를 활용하여 키와 값의 쌍을 저장하는 맵이다.
key가 가비지 컬렉션의 대상이 될 수 있도록 설계되어 있어, 특정 키에 대한 강한 참조가 없을 때 해당 항목이 자동으로 제거된다.
Map<Key, String> weakHashMap = new WeakHashMap<>();
// Key 객체 생성
Key key1 = new Key("key1");
Key key2 = new Key("key2");
// WeakHashMap에 키-값 추가
weakHashMap.put(key1, "Value1");
weakHashMap.put(key2, "Value2");
// WeakHashMap의 크기 확인
System.out.println("Size before GC: " + weakHashMap.size()); // 2
// 키 객체의 참조 제거
key1 = null;
key2 = null;
// 가비지 컬렉션 수행
System.gc();
// WeakHashMap의 크기 확인 (가비지 컬렉션 후)
System.out.println("Size after GC: " + weakHashMap.size()); // 0