2011-01-01 6 views
5

this tutorial에 제공된 코드가 있다고 가정 해 보겠습니다.V8에서는 JavaScript 코드가 가비지 수집 된 후 래핑 된 C++ 객체를 어떻게 제거 할 수 있습니까?

Point V8 용 GC가 JavaScript 래퍼를 파괴 할 때 생성 된 C++ 객체에 소멸자가 호출되고 메모리에서 삭제되도록 어떻게 수정합니까?

+0

가능한 중복 : //stackoverflow.com/questions/173366/how-do-you-free-a-wrapped-c-object-when-associated-javascript-object-is-garbag) –

답변

6

영구 핸들을 만들어 약하게 만듭니다 (v8 :: Persistent :: MakeWeak (data, cb)). 콜백에서 C++ 객체를 삭제할 수 있습니다. 평소와 같이 가비지 수집기에서 약한 도달 가능성을 결정할 정확한 시간은 GC 수행시기에 따라 다릅니다. 따라서 네이티브 리소스는 예상보다 훨씬 빨리 해제 될 수 있습니다. 보유하고있는 네이티브 리소스의 양을 V8에 알릴 수 있습니다 (v8 :: AdjustAmountOfExternalAllocatedMemory).

노드의는 "ObjectWrap는"양방향 네이티브/JS 객체 매핑과 약한 콜백을 캡슐화 : https://github.com/ry/node/blob/master/src/node_object_wrap.h

[당신이 관련된 자바 스크립트 객체가 쓰레기 V8에 수집 된 포장 C++ 객체를 해제하려면 어떻게합니까?] (HTTP의
+1

영구 핸들에서 Dispose를 호출했는지 확인하십시오. 메모리 누수가 발생합니다. 단지 몇 시간을 내 코드에서 추적하여 결국 Object wrap 소멸자가 사용하는 것처럼 ClearWeak(), Dispose(), Clear() 호출을 사용하고 해결했습니다. – PherricOxide

관련 문제