JavaScriptのメモリ管理


プログラミングでは、メモリのライフサイクルはほとんど常に同じ言語に関係なく使用している.しかし、メモリ管理は言語間で異なります.CとC +のようなマニュアルメモリ管理方法を持つ他の言語があります.JavaScriptでは、データ型が作成されたときに自動的にメモリが割り当てられ、それらが必要とされていない場合や使用されなくなったときに破棄されます.JavaScript以外にもJavaやPythonやRubyなどのガベージコレクタの用語があります.
ガベージコレクションは自動生成されたメモリ管理の形式であり、すべてのデータ型を監視し、到達できなくなったものを削除します.例としてこのスニペットを見てみましょう.
let edmArr = [];
function addObj() {
   let dubstep = {genre: 'Dubstep'}
   edmArr.push(dubstep)
}
addObj()
console.log(edmArr[0])
この例では、空の配列が初期化され、その配列に単にオブジェクトを追加する関数が初期化されます.我々console.log(edmArr[0]) 関数呼び出しの後、出力は{genre: 'Dubstep'} . たとえdubstep 範囲内ではない、我々はまだedmArr , というのは、リファレンスがもう到達できないまで、メモリで言う必要があるということです.配列からオブジェクトを削除する場合、dubstep 必要はありません、そして、ゴミ収集されます.

ガベージコレクションは実際に「ゴミ集め」ですか?
ガベージコレクションは、主にマークとスイープと呼ばれる2つのアルゴリズムと別の参照カウントに基づいています.参照カウントアルゴリズムは、オブジェクトがそれを参照する他のデータ型を持っているかどうかを判断するためにまだオブジェクトが必要かどうかを調べる問題を軽減します.
let x = {
  animal: 'cat'
}

let y = x

x = "Hello, World!"

console.log('X:', x, 'Y:', y)

この例を実行すると、表示されますX: 'Hello, World!' Y: {animal: 'cat'} . からx もはやオブジェクトではありません.y まだそれへのリファレンスですので、ゴミ収集の必要はありません.我々が価値を変えるならばy しかし、それがもう到達できないので、オブジェクトはそれから集められます.ゼロの参照がそれを指しているならば、「ゴミ」は集められるだけです.このコレクションアルゴリズムは現代のブラウザでは好まれません.なぜなら、それは循環参照に関して制限があるからです.つのオブジェクトが互いを参照するならば、それはサイクルをつくります、そして、各々のオブジェクトが彼らに指し示している少なくとも一つの参照を持っているので、アルゴリズムは必要でないことを本当に考慮しません.これは“ゴミ”として収集され、メモリリークへの一般的な原因です.
マークと掃引アルゴリズムは“到達不可能なオブジェクト”に“不要オブジェクト”の定義を減少させる.このアルゴリズムはルート(グローバルなオブジェクト)を見つけて、そのルートからすべての参照を見つけて、それからそれらの参照などを見つけます.このアルゴリズムは、ブラウザーや他のガベージコレクション言語で使用されています.
メモリサイクルと管理により多くの深さに行く若干のドキュメンテーションは、ここにあります.ハッピーコーディング!
MDN Web Docs
JavaScript.info