자바 의 약 한 인용

1913 단어
전재 출처 를 밝 혀 주 십시오
http://blog.csdn.net/pony_maggie/article/details/46508565
작자: 망아지
대부분의 상황 에서 우 리 는 다음 줄 과 같은 강 한 인용 을 보 았 다.
String str1 = new String("abc");
변수 str 1 은 string 대상 의 강 한 인용 을 저장 하 는 데 사 용 됩 니 다.사용 하고 있 을 때 이 대상 을 강제로 인용 할 때 쓰레기 회수 기 에 의 해 회수 되 지 않 습 니 다. 이것 은 대부분의 경우 옳 습 니 다.메모리 공간 이 부족 할 때 가상 컴퓨터 는 강 한 인용 대상 이 차지 하 는 공간 을 방출 하지 않 고 이상 을 던 집 니 다.물론 영원히 청소 하지 않 을 수 는 없다. 예 를 들 어 str 1 = null 을 처리 할 때 쓰레기 수 거 기 는 처리 할 것 이다.다만 GC 의 언어 로 서 우 리 는 대상 이 언제 회수 되 는 지 에 관심 을 가 질 필요 가 없다.
이 코드 를 다시 보십시오.
String str2 = new String("hello");
ReferenceQueue<String> rQueue = new ReferenceQueue<String>();
java.lang.ref.WeakReference<String> wf = new java.lang.ref.WeakReference<String>(str2, rQueue);

자바 는 이러한 방식 으로 약 한 인용 을 만 듭 니 다.
일반적으로 인용 대기 열 과 함께 사용 합 니 다. 이 인용 대상 이 쓰레기 회수 기 에 의 해 쓰레기 로 표 시 될 때 자동 으로 인용 대기 열 에 가입 하여 자신 이 적당 할 때 청소 할 수 있 도록 합 니 다.이 코드 는 사실 'hello' 대상 이 강 한 인용 과 약 한 인용 을 동시에 가지 고 있 기 때문에 뒤에 인용 대기 열의 처 리 는 더 이상 말 하지 않 고 관심 이 있 으 면 인터넷 에서 관련 내용 을 찾 아 볼 수 있다.
약 한 인용 은 하나의 변수 와 연결 되 더 라 도 회수 할 수 있 습 니 다.그렇다면 약 한 인용 은 어떤 자리 에 쓰 입 니까?
일반적으로 많은 내용 을 차지 하 는 대상 이 며, 회수 되면 곧 만 들 수 있다.예 를 들 어 사용자 자산 관리 소프트웨어 는 사용자 정보 (많은 데이터) 와 관련 된 인용 을 약 한 인용 으로 설정 할 수 있 습 니 다. 그러면 사용자 가 장시간 응용 프로그램 을 실행 하지 않 을 때 이 메모 리 를 다른 곳 에 사용 합 니 다.예 를 들 어 jdk 의 Weak HashMap.또 하나의 경우, 예 를 들 어 자바 프로그램 을 쓰 고 싶 습 니 다. 어떤 대상 이 언제 쓰레기 수집 의 실행 서 에 의 해 제 거 될 지 관찰 하려 면 이 대상 을 reference 로 기억 해 야 합 니 다. 수시로 관찰 할 수 있 지만 이 로 인해 이 대상 의 reference 수 는 0 이 되 지 않 아 대상 을 제거 할 수 없습니다.이 럴 때 약 한 인용 으로 아래 와 같이:
A obj = new A();
    WeakReference wr = new WeakReference(obj);
    obj = null;

    //      ,obj         
...

if (wr.get()==null) {
System.out.println("obj        ");
} else {
System.out.println("obj      ,     " obj.toString());
}
...

좋은 웹페이지 즐겨찾기