자바 의 인용 상세 설명

자바 에는 지침 이 없고 곳곳에 인용 되 어 있 습 니 다(기본 유형 제외).그래서 물론 자바 의 인용 을 알 고 오래 걸 렸 을 것 입 니 다.하지만 이에 대해 전면적으로 알 고 있 지 않 습 니까?이런 인용 은 어떤 작용 을 하고 어떤 차이 가 있 습 니까?자바 에 자바.lang.ref 패키지 가 있 습 니 다.이 안 에는 참조 대상 을 설명 하 는 것 입 니 다.Reference,SoftReference,Weak Reference 와 Phantom Reference 를 포함 합 니 다.그 중에서 Reference 는 기본 클래스 의 다른 세 가지 기본 클래스 이다.다음은 이 몇 가지 인용 대상 에 대해 설명 한다.
강 인용(강 참조)
우 리 는 매일 강 한 인용(만약 당신 이 매일 자바 를 사용한다 면)을 사용 합 니 다.다음 과 같은 코드:HashMap mapRef=new HashMap();new HashMap()을 통 해대상 을 만 들 고 강 한 인용 을 mapRef 참조 에 저장 합 니 다.강 한 인용 이'강'인 곳 은 쓰레기 회수 기 에 미 치 는 영향 에 있다.만약 에 한 대상 이 강 한 인용 체인 을 통 해 도달 할 수 있다 면(즉,이 대상 이 Strongly reachable 이 라 고 한다)이 종 류 는 쓰레기 회수 에 적합 하지 않다 는 것 을 의미한다.우리 도 사용 중인 대상 이 한꺼번에 자 취 를 감 추 는 것 을 절대 바라 지 않 는 다.
그러나 강 한 인용 은 우리 의 응용 에 강 한 영향 을 미 칠 수 있다.예 를 들 어 캐 시 문제 가 자주 발생 합 니 다.Set(set 를 예 로 들 면)을 통 해 시 뮬 레이 션 된 캐 시 는 응용 이 실행 되 는 과정 에서 많은 대상 이 set 에 추 가 됩 니 다.이 대상 들 은 GC 에 의 해 회수 되 지 않 을 뿐만 아니 라,대상 이 증가 함 에 따라 우리 의 메모리 도 끊임없이 커 질 것 이다.마침내 어느 날 OutOf Memory 가 생 겼 다.사실 set 는 사용 빈도 가 아직 크 지 않 을 수 있 습 니 다.HashMap 의 key-value 모드 는 우리 로 하여 금 손 을 놓 지 못 하 게 하고 당신 을 끊임없이 put,put,두근두근 하도록 유혹 합 니 다.아웃 오 프 메모리 야.자바 라 는 매력 적 이 고 활력 이 있 으 며 패기 가 있 으 며 낡 고 쓰레기 자동 회수 체제 가 있 는 언어 에 있어 서 우 리 는 상기 문제 에 시 달 려 서 는 안 된다.
약 인용(Weak Reference)
약 한 인용 은 대상 이 메모리 에 존재 하도록 강제 적 으로 요구 하 는 인용 이 아 닙 니까?쓰레기 수 거 기 를 통 해 대상 의 접근 성 을 판단 하고 약 한 인용 대상 을 회수 할 수 있다.어떻게 약 한 인용 을 만 듭 니까:StringBuffer sbuff=new StringBuffer("What is a Weak Reference?");WeakReference wref = new WeakReference(sbuff);
sbbuff=null;//     ,    。         ,          ,           。

그리고 wref.get()을 통 해 sbuff 대상 을 가 져 옵 니 다.약 한 인용 은 쓰레기 회수 기 가 wref 인용 을 회수 하 는 것 을 막 을 만큼 강하 지 않 기 때문에(인용 대상 과 인 용 된 대상 을 구분 해 야 합 니 다.Weak Reference 를 만 들 때 인용 대상 이 탄생 했 습 니 다.인 용 된 대상 을 가리 키 고 있 습 니 다)어느 순간 부터 wref.get()이 null 을 주기 시 작 했 을 수도 있 습 니 다.위 에서 언급 한 HashMap 을 사용 할 때 대상 이 너무 많 고(삭제 되 지 않 고 쓰레기 로 회수 되 는)아웃 오 프 메모리 문제 에 대해 서 는 Weak HashMap 을 통 해 이 루어 질 수 있 습 니 다.그러면 쓰레기 수 거 기 는 아웃 오 프 메모리 문제 가 발생 하지 않도록 오랫동안 사용 하지 않 고 지방 을 차지 하 는 종 류 를 처리 해 줄 것 입 니 다.
인용 대기 열(Reference Queue,어느 곳 이 신성 합 니까?)Weak Reference 가 null 로 돌아 가기 시 작 했 을 때 원래 가리 키 던 대상 이 쓰레기 가 되 었 음 을 설명 합 니 다.또한 이 Weak Reference 는 우리 에 게 이미 쓸모 가 없다 는 것 을 설명 한다.우 리 는 이런 쓸모없는 물건 들 을 처리 하기 위해 무엇 을 해 야 합 니까?이 위난 을 맞 아 레 퍼 런 스 큐 가 깜짝 등장 했다.공식 자료 에 따 르 면 Reference queues,to which registered reference objects are appended by the garbage collector after the appropriate reachability changes are detected.(해당 접근 성 이 감지 되면 쓰레기 수 거 기 는 이 대기 열 에 등 록 된 참조 대상 을 이 참조 대기 열 에 추가 합 니 다.)어떻게 대기 열 을 등록 합 니까?Weak Reference 의 구조 함수 중 Weak Reference(T reference,Reference Queue)가 있 습 니 다.
소프트 참조(소프트 참조)
부 드 러 운 인용 은 약 한 인용 기능 과 매우 비슷 하 다.그러나 소프트 인용 이 가리 키 는 대상 은 일반적으로 약 한 인용 보다 생존 시간 이 길 고 메모리 공간 이 부족 할 때 까지 쓰레기 로 회수 된다.Weakly reachable 대상 은 WeakReference 에 의 해 인용 되 고 쓰레기 회수 기 에 의 해 다음 쓰레기 회수 주기 에 버 려 집 니 다.Softly reachable 대상 은 오래 산다.
소프트 인용 은 우리 에 게 매우 큰 혜택 을 가 져 다 주 었 는데,특히 캐 시 실현 이 그렇다.예 를 들 어 우 리 는 메모리 가 비교적 긴 장 된 상황 에서 memory 상한 선 에 도달 하려 면 쓰레기 회수 기 는 Soft Reference 가 인용 한 대상 을 방출 하여 OutOf Memory 참극 이 발생 하지 않도록 한다.
환상 참조(Phantom Reference)
환상 인용 은 Soft 와 Weak 과 는 다른 인용 입 니 다.환상 은 대상 을 가리 키 는 인용 강도 가 너무 약해 서 호출 방법 get()을 사용 할 때 항상 null 로 돌아 갑 니 다.그것 의 주요 역할 은 가리 키 는 대상 이 이미 dead 되 었 다 는 것 을 추적 하 는 것 이다.그렇다면 Weak Reference 와 의 차 이 는 무엇 일 까?
이 인용 대상 이 인용 대기 열 에 추 가 된 것 은 언제 입 니까?WeakReference 는 인 용 된 대상 이 Weakly Reachable 로 변 할 때 인용 대기 열 에 추 가 됩 니 다.이 는 한 대상 이 finalization 되 거나 쓰레기 로 회수 되 기 전에 발생 합 니 다.이론 적 으로 한 대상 이 finalize()에 걸 렸 을 때'부활'할 수 있 지만 이때 Weak Reference 는 이미 활력 이 없다.환상 인용 에 있어 서 인용 대상 이 쓰레기 회수(메모리 에서 제거)되 었 을 때 만 인용 대기 열 에 추 가 됩 니 다.그리고 환상 이 인용 한 get 방법 은 항상 null 로 돌아 가 는데 이것 은 우리 가 숨 을 거 두 는 대상 을 부활 시 키 는 것 을 피 하 는 것 이다.
그렇다면 환상 인용 은 어떤 실제 작용 을 합 니까?
첫째,우 리 는 대상 이 언제 완전히 소각 되 었 는 지 감시 할 수 있다.그러면 다른 일 을 할 수 있 습 니 다.하지만 실제로 도 이런 경 우 는 많 지 않다.
둘째,이론 적 으로 존재 하기 때문에 한 대상 의 finalize()방법 으로 한 대상 을'부활'할 수 있다.그러면 쓰레기 회수 처리 시 한 대상 의 finalize()(이 방법 이 언제 호출 될 지 확실 하지 않 음)를 호출 했 지만 부활 시 켰 다.finalize()의 집행 을 더 기 다 려 야 하 는데,어느 세월 이 될 지 는 모 르 겠 지만,매일 있 는 것 은 아니다.언제 하늘 이 바 뀌 고 주인 이 바 뀔 지 누가 알 겠 는가?갑자기 Outof Memory 오류 가 발생 했 습 니 다.
환상 인용 은 절대 상 대 를 부활 시 키 지 않 는 다.그것 에 걸 리 면 일 은 간단 하 다.끊 어!
한 마디 로 인용 은 쓰레기 회수 와 관련 된 것 이다.
다음으로 전송:http://www.cnblogs.com/ericchen/

좋은 웹페이지 즐겨찾기