[コンピュータ工学]ごみ収集(Javascript)
6220 ワード
💡 メモリ管理が必要な理由
ほとんどの言語では、メモリライフサイクルは
메모리 할당 → 메모리 사용 → 메모리 해제
段階を経験します.Cのような低レベル言語では、開発者はmalloc()またはfree()を使用してライフサイクルを直接管理する必要がありますが、JavaScriptのような高度な言語では
Garbage Collection이라는 자동 메모리 관리
を使用することが多いので、開発者は特に気にしません.💡 ごみ収集
メモリリークとは、アプリケーションで使用しなくてもメモリが解放されない状態です.
💡 ごみ収集の主なアルゴリズム
1. Reference-counting
// people 변수는 해당 object를 참조한다 .
let people = {
name: "Jane"
};
//null값을 재할당한다.
people = null;
{name: "Jane"}
この値は参照されなくなり、GCによってメモリが解放されます.📌 Case(2)
// people 변수는 해당 object를 참조한다 .
let people = {
name: "Jane"
};
//girl에 people의 참조중인 값의 주소를 할당한다.
girl = people;
//people에 null을 할당한다.
people = null;
peopleは{name: "Jane"}
を参照しないが、girlはそれを参照しているため、object는 여전히 메모리에 남아있게 된다.
📌 Case(3)// people 변수는 해당 object를 참조한다 .
let people = {
name: "Jane"
};
//girl에 people의 참조중인 값의 주소를 할당한다.
girl = people;
//people에 null을 할당한다.
people = null;
//girl에 null을 할당한다.
girl = null;
上記のコードのようにpeople,girlにnullが割り当てられている場合、{name: "Jane"}
を参照する場所はないので、해당 값은 GC에 의해 처리된다.
📣 しかし、循環参照(Circular reference)を使用すると、reference-カウント方式が大量の漏洩を招く要因になるという問題がある.次のサンプルコードです. function couple() {
const jane = {};
const sam = {};
// jane.bf는 sam을 참조한다
jane.bf = sam;
// sam.gf는 jane을 참조한다
sam.gf = jane;
return 'circular';
}
couple();
couple()関数は呼び出しが終了した後も必要な値ではありませんが、互いの参照がまだ存在するため、GCはこれらの値のメモリを解放するのではなく、メモリに残ります.これらのループリファレンスは、メモリの漏洩の主な原因と言えます.2. Mark-and-sweep
上記のreference-カウントの問題は不要な値です
参考資料があれば、その記憶は解除されません.これに対して、Mark and Sweepアルゴリズムは、その値が参照された値であるかどうかではなく、
도달가능성(reachablility)
に重点を置く.2012年から、モダンブラウザはmark-and-sweep方式のGCを使用している.reference-カウント方式に問題がある例をもう一度見てみましょう.
function Couple() {
const jane = {};
const sam = {};
// jane.bf는 sam을 참조한다
jane.bf = sam;
// sam.gf는 jane을 참조한다
sam.gf = jane;
return 'circular';
}
Couple();
例では、Couple()
という名前の関数を呼び出すと、ループ値が返され、終了後にjaneと同じ値に達することができないため、해당 값들은 GC에 의해서 메모리가 해제된다.
🔎 表示
参照値
リファレンスリンク
Reference
この問題について([コンピュータ工学]ごみ収集(Javascript)), 我々は、より多くの情報をここで見つけました https://velog.io/@jaehyeon23/컴퓨터-공학-가비지-컬렉션-Javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol