node.js - ノードのガベージ コレクションとメモリ リークに関連する問題
某草草
某草草 2017-05-16 13:42:15
0
3
656

最近、ガベージ コレクションについて勉強し始めたところです。Ele.me のフロントエンドでのノード メモリの解放に関連する質問に答えようとしていたときに、いくつかの質問に遭遇しました。 リーリー

配列を無限に増やすと、間違いなくメモリがバーストします。

リーリー

これはずっと使われているだけ

で解放できないですよね? arr ,导致 arr リーリー

これは、

のサイズが8k未満であるためです。最初にメモリプールがいっぱいかどうかを確認するため、メモリが爆発しないはずです。 Buffer リーリー

これは

のクロージャが原因です。このクロージャはリサイクルされないため、常にメモリに蓄積されます?unusedoriginalThing 进行了引用,所以每一个 unused 都形成了一个 originalThing 的作用域 replaceThing

よくわからないので詳しい方に回答していただきたいです、よろしくお願いします!

某草草
某草草

全員に返信(3)
漂亮男人

新しいバッファーは、おそらく単純なメモリ爆発の問題ではありません。バッファーは V8 ヒープの外に割り当てられているため、実際には、先ほどクラッシュした問題よりも深刻です。

2 番目に言っておきたいのは、配列サイズが増加しないため、メモリがバーストしないということです。

理由はオリジナル記事3本目に記載しております

たとえば、上記の場合、未使用の関数はoriginalThingへの参照を保持しているため、古いオブジェクトが毎回解放されず、メモリリークが発生することはありません

それでも理解できない場合は、詳細に説明されている元の発見者の記事を読むことができます。

いいねを押す +0
黄舟

無限ループ コードはどこに行ってもメモリをバーストします。特に js のようなシングルスレッド言語では、直接ブロックされてフリーズします。
Buffer タイプを使用したことがないので、メモリ プールをチェックするかどうかはわかりませんが、スタックしているかどうかはあまり意味がありません。

最後のステートメントに同意します。各サイクルで新しいオブジェクトが作成され、theThing の参照アドレスは常に変化します。通常の状況では、古い参照オブジェクトはガベージ コレクションされる必要がありますが、未使用のオブジェクトは、originalThing、originalThing Another private を参照します。変数のため、古いオブジェクトをガベージ コレクションできず、メモリ リークが発生します。

Chrome 環境で 30 秒間実行される次のコードに違いはありますか?
最初の写真は、このコードを使用しない場合の結果であり、メモリは 15M でフロートします。
2 番目の写真はこのコードの結果であり、メモリは増加し続けます。

リーリー

いいねを押す +0
小葫芦

よくわかりませんが、memwatch-next パッケージを使用して見てみることができます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!