[Java] 강한 참조 & 약한 참조 & WeakHashMap

이다혜·2024년 1월 9일
0

Java

목록 보기
23/23

강한 참조 (Strong Reference)

일반적인 객체 참조 방식으로, 객체가 참조되는 동안 가비지 컬렉션의 대상이 되지 않는다. 객체에 대한 강한 참조가 있을 경우, 해당 객체는 참조하는 동안 메모리에서 해제되지 않는다.

약한 참조 (Weak Reference)

약한 참조는 가비지 컬렉션의 대상이 될 수 있는 참조이다. 약한 참조를 사용하면 메모리 누수를 방지하고, 객체가 더 이상 강한 참조를 가지지 않을 때 가비지 컬렉션에 의해 수거될 수 있다.

WeakHashMap

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

0개의 댓글