에페메론
Ephemeron이 기사는 컴퓨터 과학의 전문가의 주의를 필요로 한다.구체적인 문제는 중요한 세부사항을 기술하지 못하는 것이다.(2013년 1월) |
ephemeron은 쓰레기 수거 시스템의 두 가지 관련 문제를 해결하는 데이터 구조다.한편, 에페메론은 어떤 물체가 수집되려고 할 때 통지를 제공한다.반면에, 에피메론은 그 물체에 대한 참조를 만들지 않고 어떤 물체와 데이터가 연관되어 그 물체가 수집되는 것을 막을 수 있게 한다.ephemeron은 키 값 쌍으로, 여기서 키는 ephemeron이 보호하는 개체로서, 해당 개체가 수집 가능한 경우 시스템에 통지하며, 값은 속성 목록과 같은 개체와 관련된 모든 데이터가 될 수 있으며, 이 데이터는 비어 있을 수 있다.속성 목록의 요소는 키를 다시 참조할 수 있으므로, 키 수집을 방해할 수 있다.그러나 에피메론은 쓰레기 수집가에게 특별히 취급된다.값 필드는 에페메론 키를 통해서가 아닌 시스템 루트로부터 키가 도달할 수 있는 것으로 밝혀질 때까지 추적되지 않는다.그런 다음 키가 에피메론 키로만 도달할 수 있는 에피메론 세트는 수집할 준비가 된 키를 잡고 있다. 이러한 물체는 에피메론을 통해서만 도달할 수 있다.가비지 수집기가 그러한 집합을 감지하면, 인식기는 통지를 위해 대기열에 들어가고 그 키와 값은 추적된다.따라서 에피메론은 모두 채집 준비가 된 물체를 감지하고 물체가 채집되는 것을 막을 수 있는 사이클을 중단한다.
설명
컴퓨터 과학에서, 최종화는 쓰레기 수집가(GC)가 어플리케이션에 물체가 "거의 수집 가능한 것"이라고 통보할 때 발생한다.응용 프로그램이 불변성을 유지하도록 돕기 위해 사용된다.거의 수집 가능한 객체를 결정하기 위해 가비지 수집기가 약한 참조를 사용할 수 있다.키-값 쌍으로 보여지는 약한 참조와 인식기의 주요 차이점은 쓰레기 수집가가 그것들을 다루는 방식이다.약한 참조의 경우 가비지 수집기는 항상 키 값 쌍의 값을 따른다.대신 에페메론의 경우, 쓰레기 수집기는 값을 따르는 것이 아니라 에페메론의 추가 관찰을 위해 2단계에서 대기한다. 첫 번째 추적 단계가 끝난 후, 그것은 각 에페메론을 바라보며 대기열을 통과한다. 그리고 만약 그것의 키가 보이면, 그 가치를 따른다.이러한 미묘한 차이는 어떤 종류의 주기가 있는 그래프에 영향을 미치며, 약한 쌍은 어떤 물체가 "거의 수집 가능한 것"이어야 한다는 것을 정확하게 설명하지 못한다.예를 들어, 키가 개체이고 값이 개체에 연결된 속성 집합인 경우 참조가 약한 키 값 쌍을 생각해 보십시오.물체를 수집할 준비가 되면 그 성질도 없어질 것으로 예상된다.그러나 그 값이, 어쩌면 트랜지컬하게, 자신의 키(물체)에 매핑된다면, 그 물체는 결코 수집되지 않을 것이다.대신 에피메론을 사용했다면, 그 물체가 살아 있다는 것을 증명하지 않는 한 그 값은 따라가지 않았을 것이고, 그 순환을 해결했을 것이다.에피메론은 약한 쌍과 비슷하지만, 에피메론의 핵심 영역에 있는 물체는 에피메론의 가치 필드에서 도달할 수 있더라도 "거의 수집 가능한 것"으로 분류할 수 있다.[1]
사용하다
에피메론의 열쇠가 쓰레기 수거가 아닌 이상, 그때부터 약하게 내용물을 강하게 가리키는 물체다.에피메론은 레지스트리를 사용하여 객체에 속성을 "첨부"하려고 할 때 흔히 발견되는 문제를 해결한다.어떤 속성을 객체에 부착해야 하는 경우, 해당 속성은 (GC 동작 측면에서) 일반적으로 이 객체의 인스턴스(instance) 변수가 가질 수 있는 수명을 가져야 한다.그러나 이것은 다음과 같은 물체와 그 성질 사이에 외부적인 연관성을 갖는 것으로 복잡하다.
속성 ------------등록부 ----------- 연관성 --------------- 목적어
여기서 레지스트리(제3자)는 (자동화된 쓰레기 수거 대신) 레지스트리에서 수동 제거가 필요한 협회 자체를 보유하게 된다.이 문제는 다양한 약한 연관성 유형 중 하나를 사용함으로써 어떠한 구체적인 상황에서도 항상 해결될 수 있지만, '올바른' 연관성의 종류는 역동적으로 변할 수 있는 다양한 요인에 달려 있다.
에피메론은 키가 쓰레기 수거로 알려질 때까지 에피메론의 '내용'(가치)이 강하게 유지될 것이라고 정의함으로써 이 문제를 해결한다.그때부터 에페메론의 내용이 힘없이 잡힐 것이다.따라서 에페메론의 내용은 키가 쓰레기 수집이 가능한 경우에만 가비지 수집 대상이 될 수 있으며, 이는 객체의 인스턴스(instance) 변수에 대해 우리가 관찰할 수 있는 정확한 동작이다.
역사
에피메론은 조지 보즈워스가 디지탈크에서 일하는 동안 처음 발명되었다.[1]그것들은 Visual Smalltalk Enterprise에서 최종화 메커니즘으로 사용되었다.오늘날 에페메론은 자동 쓰레기 수거가 가능한 다른 많은 언어뿐만 아니라 대부분의 스몰토크 방언에서도 사용할 수 있다.
사용 예
스몰토크
Smalltalk의 몇몇 방언은 내장된 특징이나 추가 패키지로 에피메론을 포함한다.예를 들어 GNU 스몰토크와[2] 스퀵.[3]
루아
Lua는 별도의 에피메론 구조를 포함하지 않지만, 테이블 데이터 구조는 키, 값 또는 둘 다 약한 방식으로 유지되도록 설정될 수 있다.키가 약하게 잡혔지만 값이 강하게 잡히면 테이블이 에피메론처럼 작용한다.Lua 5.4는 또한 에피메론 같은 데이터 구조를 구성하는 데 도움이 되는 측정 가능한 동작을 도입한다.[4]
.NET
C#, F# 및 VB와 같은 언어.NET, 의 경우.NET Framework 4.0은 ConditionalWeakTable 클래스에서 지원을 받는다.[5]기본 ephemeron 메커니즘(DependentHandle)은 의 때까지 비공개였습니다.NET 6.
OCAML
OCaml ephemeron 타입의 구현은 2014년에[6] 제시되었고 릴리즈 4.03에서 표준 라이브러리에 추가되었다.[7]
라켓
Lisp의 라켓 사투리는 그것의 런타임 시스템에서 인식기에 대한 지지를 가지고 있다.그곳에서, 가비지 수집기는 값이 키에 대한 참조를 가지고 있더라도 키 값 쌍을 자유롭게 할 수 있도록 약한 매핑과 함께 사용된다.[8]
스키마 SRFI
SRFI(Scheme Request for Implementation)는 Scheme 언어를 위한 Epehemerons용 API를 정의한다.[9]그러나 모든 Scheme 구현이 모든 SRFI를 지원하는 것은 아니다.
참조
- ^ a b Barry Hayes (1997). "Ephemerons: A New Finalization Mechanism". Object-Oriented Languages, Programming, Systems, and Applications.
- ^ "Special objects - GNU Smalltalk User's Guide". Retrieved 20 February 2013.
- ^ "Ephemerons". Retrieved 20 February 2013.
- ^ "Lua 5.4 Reference Manual, §2.5.3". Retrieved 30 January 2022.
- ^ ".NET 4.0 - System.Runtime.CompilerServices.ConditionalWeakTable". IKVM.NET Weblog. Retrieved 14 October 2013.
- ^ Bobot, François. "Ephemerons meet OCaml GC" (PDF). OCaml Users and Developers Workshop 2014. Retrieved 5 April 2018.
- ^ Minsky, Yaron. "OCaml 4.03: Everything else". Jane Street Tech Blog. Retrieved 5 April 2018.
- ^ "15.2 Ephemerons". Retrieved 20 February 2013.
- ^ "SRFI-124: Ephemerons".