큰 C++ 응용 프로그램에 대한 스크립팅 언어 바인딩으로 Javascript를 사용하는 프로그램이 있습니다. 나는 V8과 웹킷을 같은 의미로 사용하지만, 기본 런타임은이 질문에 중요하지 않습니다.자바 스크립트 가비지 수집 폐쇄 규칙
이 응용 프로그램에서는 동적으로 생성 된 개체가 콜백을 수신합니다. 나는 ... 이런 식 바인딩이 콜백을 만듭니다 obj가 범위를 벗어나 갔다 결국 삭제됩니다 때문에
function f() {
var obj = CreateNewCallbackObj();
obj.onCallback = dowork; // dowork is a function
}
은 분명히이 GC 문제가있는 것입니다.
내가 원하는 것은 개체가 자신의 평생을 관리하는 것입니다. 객체는 결국 생명의 종말을 알리는 콜백을 수신하게되고 그 일이 발생하면 객체 자체를 삭제할 수 있습니다.
하나의 생각은 obj.myself = obj를 추가하여 자체 참조하는 것입니다. 이것은 잘못된 방법처럼 보이지만 가비지 수집 알고리즘이 현명하지 않으면 작동하지 않을 수 있습니다.
올바른 방법이 있습니까? 오브젝트를 저장하기 위해 빌드 된 기본 Persistent DOM은 없으며, 모든 JS 오브젝트는 필요에 따라 동적으로 할당되지만 JS 엔진 내에서 고착 할 수있는 방법이 필요합니다.