コードがthis tutorialで提供されているとします。V8では、JavaScriptの対応部分がガベージコレクションされた後に、ラップされたC++オブジェクトを削除するにはどうすればよいですか?
Point
V8のGCがJavaScriptラッパーを破棄すると、作成されたC++オブジェクトのデストラクタが呼び出され、メモリから削除されます。
コードがthis tutorialで提供されているとします。V8では、JavaScriptの対応部分がガベージコレクションされた後に、ラップされたC++オブジェクトを削除するにはどうすればよいですか?
Point
V8のGCがJavaScriptラッパーを破棄すると、作成されたC++オブジェクトのデストラクタが呼び出され、メモリから削除されます。
永続ハンドルを作成して弱くする必要があります(v8 :: Persistent :: MakeWeak(data、cb))。コールバックでは、C++オブジェクトを削除できます。いつものようにガベージコレクタでは、弱い到達可能性が決定される正確な時間は、GCがいつ実行されるかに依存します。したがって、ネイティブリソースは、予想よりもずっと解放される可能性があります。 V8には、保持しているネイティブ・リソースの量を通知できます(v8 :: AdjustAmountOfExternalAllocatedMemory)。
ノードのは「ObjectWrapは、」双方向ネイティブ/ JSオブジェクトのマッピングと弱いコールバックをカプセル化:https://github.com/ry/node/blob/master/src/node_object_wrap.h
[あなたが関連付けられているJavaScriptオブジェクトがガベージはV8に収集されたラップC++オブジェクトを解放するにはどうすればよい?](HTTPの永続ハンドルでDisposeを呼び出すか、メモリリークが発生します。私のコードでそれを追跡するのに数時間を費やし、最終的にClearWeak()、Dispose()、Clear()コールをObjectラップデストラクタの使用と同様に使用して修正しました。 – PherricOxide
が重複する可能性: //stackoverflow.com/questions/173366/how-do-you-free-a-wrapped-c-object-when-associated-javascript-object-is-garbag) –