자바 네 가지 인용

6042 단어 자바 기초 강좌
배경
최근 자바 의 네 가지 인용 유형 을 물 어 봤 는데 사실 이 물건 은 제 가 개념 이 있 었 는데 잘 기억 이 안 나 요.이 기 회 를 빌려 복습 하 다.
인용 개념
사실 이것 은 자바 의 GC 와 매우 관련 이 있 습 니 다. 가상 컴퓨터 메모리 가 부족 할 때 GC 가 발생 하면 어떤 대상 을 회수 해 야 합 니까?여기 에는 GC 알고리즘 이 많 지만 기본 적 인 이념 인 계산 대상 의 인용 상황 을 피 할 수 없다.예 를 들 어 인용 계수, 접근 성 분석 등 은 본질 적 으로 이 대상 이 다른 대상 에 의 해 인용 되 었 는 지 를 고찰 하 는 것 이다.그러나 가상 컴퓨터 가 현재 모든 대상 이 인용 되 어 있다 는 것 을 발견 하면 이 럴 때 누 구 를 회수 해 야 합 니까?이러한 대상 을 구분 하기 위해 서 는 '강도' 를 인용 하기 위해 jdk 는 1.2 이후 세 가지 다른 유형의 인용 을 추가 했다.
억지로 인용 하 다
이것 이 바로 우리 가 평소에 하 는 할당 작업 이다.
public class Main {
    public static void main(String[] args) {
        Object o=new Object();
    }
}

예 를 들 어 이런 것 은 바로 강 한 인용 이다.강 한 인용 대상 은 gc 에서 인 용 된 것 이 확실 하 다 고 분석 할 때 회수 되 지 않 습 니 다.
소프트 인용
이 는 일반적으로 유용 하 다 고 묘사 되 지만 필요 한 대상 이 아 닌 지 gc 에서 희생 을 선택 하여 OOM 을 막 을 수 있 습 니 다.사실은 캐 시 와 유사 합 니 다. JVM 메모리 가 충분 할 때 살아 남 을 수 있 습 니 다. JVM 메모리 가 소 진 될 때 종 료 를 선택 하 십시오.
public class Main {
    public static void main(String[] args) {
        ReferenceQueue q=new ReferenceQueue();
        Object obj=new Object();
        SoftReference sr=new SoftReference(obj,q);
        if(sr!=null){
            obj=sr.get();
        }
    }
}

약 인용
소프트 인용 보다 더 '쓸모없는' 대상 을 설명 하 는 데 사 용 됩 니 다. GC 가 발생 했 을 때 반드시 회 수 됩 니 다.
public class Main {
    public static void main(String[] args) {
        ReferenceQueue q=new ReferenceQueue();
        Object obj=new Object();
        WeakReference wk=new WeakReference(obj,q);
        if(wk!=null){
            obj=wk.get();
        }
    }
}

거짓 인용
이름 만 봐 도 문제 가 있 습 니 다. 대상 인 스 턴 스 를 가 져 오 는 데 사용 할 수 없습니다. GC 에 서 는 직접 회수 되 기도 합 니 다. 기본적으로 이 정도 입 니 다. 사실 프로젝트 코드 에 서 는 이 물건 들 이 사용 되 는 것 을 별로 본 적 이 없 는 것 같 습 니 다.

좋은 웹페이지 즐겨찾기