Gegründet 2006

weakreference 예제

일부 언어에는 참조 강도가 여러 개 약합니다. 예를 들어 Java는 패키지 java.lang.ref에 정의된 강도, 소프트, 약함 및 팬텀 참조를 줄이는 순서를 가지고 있습니다. [3] 각 참조 유형에는 연결 범위라는 개념이 있습니다. 가비지 수집기(GC)는 개체의 도달 가능성을 사용하여 개체를 해제할 시기를 결정합니다. GC는 부드럽게 연결할 수 있는 개체를 해제하는 것이 안전하지만 JVM이 메모리를 절약할 수 있다고 판단되는 경우 GC는 사용하지 않는 힙 공간이 많다고 판단할 수 있습니다. GC는 GC가 객체를 발견하자마자 약하게 도달할 수 있는 개체를 해제합니다. 다른 참조 형식과 달리 가상 참조는 따를 수 없습니다. 반면에 가상 참조는 개체가 해제되었을 때 프로그램에 알리는 메커니즘을 제공합니다(참조큐를 사용하여 알림이 구현됨). 약한 참조에는 여러 가지 일반적인 사용 사례가 있습니다. 참조 카운팅 가비지 콜렉션을 사용하는 경우 약한 참조는 주기의 링크에 대해 약한 참조를 사용하여 참조 주기를 중단할 수 있습니다. 키가 객체(참조)인 연관 배열(매핑, 해시 맵)이 있는 경우(예: 개체에 대한 보조 데이터를 보유하는 경우) 키에 대한 약한 참조를 사용하면 키로 사용하기 때문에 개체가 살아 있는 상태로 유지되지 않습니다. 관찰자 패턴(특히 이벤트 처리시)과 같이 다른 개체가 등록된 개체가 있는 경우 강력한 참조가 유지되면 개체가 명시적으로 등록 취소되어야 하며 그렇지 않으면 메모리 누수(경과된 수신기 문제)가 발생합니다. 약한 참조는 등록을 취소할 필요가 없습니다.

필요한 경우 다시 만들 수 있는 캐시된 데이터를 보유할 때 약한 참조를 통해 캐시를 회수하여 삭제 가능한 메모리를 효과적으로 생성할 수 있습니다. 이 마지막 사례(캐시)는 필요한 경우에만 개체가 가비지 수집되는 것이 바람직하므로 약한 참조 내에서 더 세밀한 구별이 필요하므로 약한 참조의 강력한 형태가 필요합니다. 대부분의 경우 약한 참조를 직접 사용할 필요는 없으며, 대신 키 나 값이 약한 참조인 약한 배열이나 다른 컨테이너를 사용합니다. 아래 예제에서는 직원을 만듭니다. 회사에 직원을 추가합니다. 각 직원 개체에 대한 약한 참조 목록을 만듭니다. 회사가 직원 개체를 보유하는 한 가비지 수집기는 회수하지 못합니다. 직원 개체가 회사에서 제거되면 가비지 수집기는 직원 개체를 클레임합니다. 다음으로 큐를 폴링하여 이제 직원 참조 개체를 보유하고 있는지 확인합니다. 참조 개체는 한 번 회수된 null을 반환합니다. 좋은 기사.

Objective-C 2.0에서 몇 가지 예제 코드를 제공할 수 있다면 가비지 수집뿐만 아니라 자동 참조 계산도 약한 참조의 영향을 받을 수 있습니다. 다음 예제의 모든 변수 및 속성은 약합니다. 이것은 자바 약한 참조에 대한 예입니다. 여기에서 소스 코드를 다운로드할 수 있습니다. 연결할 수 없는 개체와 같이 연결할 수 없는 개체는 항상 가비지 수집을 받을 수 있습니다. 참조 개체의 역학을 알고 싶다면 여기를 읽으십시오. 강력한 참조: 강력한 참조는 Java의 일반 참조입니다. 새 개체를 만들 때마다 기본적으로 강력한 참조가 만들어집니다. 예를 들어, 우리가 할 때: 소프트 레퍼런스: 소프트 레퍼런스는 더 강한 약한 참조로 생각 합니다.

Comments are closed.