Утечки памяти в JavaScript

 

Принцип достижимости

  • Достижимы изначально 

Значения, ссылки на которые содержатся в стеке вызова

Глобальные переменные

 

1

2

3

5

4

GC

Инструменты

*

 

Псевно-утечка памяти

object pool

Реализации пулов объектов:

"Не псевдо-утечка памяти"

Для чистоты эксперимента: 

 

Основные причины учечки памяти

  • Возвращаемые значения
  • Замыкания
  • Атрибуты и методы объекта
  • Callback функции и события DOM
function foo() {
  var bar = new LargeObject();
  bar.someCall();
}
function foo() {
 var bar = new LargeObject();
 bar.someCall();
 return bar;
}

// где то в другом месте
var b = foo();
function sum (x) {
  function sumIt(y) {
  return x + y;
  };
  return sumIt;
}

// Использование
var sumA = sum(4);
var sumB = sumA(3);
console.log(sumB); // Возвращает 7
var myObj = {
  callMeMaybe: function () {
    var myRef = this;
    var val = setTimeout(function () { 
      console.log('Time is running out!'); 
      myRef.callMeMaybe();
    }, 1000);
  }
};
myObj.callMeMaybe();
myObj = null;
myObj.foo = thatObj
function some_function(arg1, arg2, callback) {
 var my_number = arg1 - arg2;
 callback(my_number); } 

some_function(5, 15, function (num) { 
var obj = myObj;
var newNum = myObj.num + num;
console.log("callback called! " + newNum); 
});
function modifyText() {
  var t2 = document.getElementById("t2");
  if (t2.firstChild.nodeValue == "три") {
    t2.firstChild.nodeValue = "два";
  } else {
    t2.firstChild.nodeValue = "три";
  }
}

var el = document.getElementById("outside");
el.addEventListener("click", modifyText, false);

Удаление ссылок

 

delete

null

var o = { x: 1 };

delete o.x; // true

o.x; // undefined

var o = { x: 1 }; o = null;

o; // null

o.x // TypeError

 

Правила на каждый день:

Управляйте своей памятью!

Пушкарская Дарья

deck

By d_pushkarskaya

deck

  • 484