Javascript Memory Leak

created : 2020-04-07T11:16:46+00:00
modified : 2020-04-08T03:43:07+00:00

주제 후보

→ 익명의 대학 동기에게 재밋는 주제를 고르라고 해서 진행되었습니다.

메모리 누수란 왜 일어나는가?

결론부터 말하자면 프로그래머의 실수. 코딩 습관을 잘 들이자.

Garbage Collection

초기 아이디어 - 참조 카운트(Reference Counting)

A a = new A();
a.b = new B();
a.b.c = new C();


a.b.c = null;

f();


void f() {
  A a = new A();
 // do something
}

이 때 f 메서드 바깥에서는 a가 사용되지 않는다.

a가 가르키던 메모리 공간에 대해서 f가 끝나면 reference count가 감소하여 reference count가 0이 되었다고 판단하고 gc가 할당을 해제한다.

a와 b의 공간에 더이상 접근가능한 객체가 없음에도 불구하고 a와 b의 reference count 는 각각 1이기 때문에 gc가 메모리 해제를 하지 않는다.

도달 가능한 (reachable) 객체만 남기자 - Mark and Sweep

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/aa41f1a8-0115-4e9f-9995-a0b1f1dc210a/Untitled.png

출처 : https://en.wikipedia.org/wiki/Tracing_garbage_collection#Naïve_mark-and-sweep

단점

Generational Algorithm

데블스캠프2017/Internal Of Java Script Core’s Garbage Collector

자바스크립트에서 메모리 누수의 4가지 형태

NAVER D2

[Rust] 러스트의 꽃, Ownership 파헤치기

Memory Management

https://www.ps.uni-saarland.de/courses/gc-ws01/slides/generational_gc.pdhttps://www.ibm.com/developerworks/web/library/wa-memleak/wa-memleak-pdf.pdf

function foo(arg) {
  bar = "global variable";
}


function foo(arg) {
  window.bar = "global variable";
}

var someResource =getData();
setInterval(function() {
  var node = document.getElementById('Node');
  if (node) {
    // something
    node.innerHTML = JSON.stringify(someResource);
  }
}, 1000);

Garbage collection

mbbill/JSC.js

https://www.ibm.com/developerworks/web/library/wa-memleak/wa-memleak-pdf.pdf