Я попытался написать код javascript с утечкой памяти, чтобы работать с профилировщиком в Chrome. Однако, похоже, профилировщик не показывает, что это должно быть.Хром Профайлер Утечка памяти Javascript
Вот мой код:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="start_button">Start</button>
<button id="destroy_button">Destroy</button>
<script type="text/javascript" charset="utf-8">
var Leaker = function(){};
Leaker.prototype = {
init:function(){
this._interval = null;
this.start();
},
start: function(){
var self = this;
this._interval = setInterval(function(){ self.onInterval(); }, 100);
},
onInterval: function(){ console.log("Interval"); }
};
$("#start_button").click(function(){
if(leak !== null && leak !== undefined){
return;
}
leak = new Leaker();
leak.init();
});
$("#destroy_button").click(function(){
leak = null;
});
var leak;
</script>
Вы можете видеть, когда я нажимаю на кнопку запуска нового объекта тека создается. И когда я нажимаю на уничтожение, объект имеет значение null (ПРИМЕЧАНИЕ: Но это не будет сбор мусора, поскольку setInterval будет работать).
Задача: Однако, когда я использую Google Chrome Profiler, он не показывает мне ссылки на мой экземпляр Leaker после того, как я нажму на уничтожение (но он должен показать мне такую ссылку, поскольку, как я отметил выше, закрытие от setInterval все еще держится на нем).
Profiler, прежде чем нажать на кнопку уничтожить
Profiler после нажатия на кнопку уничтожить (вы можете видеть, что я не могу найти протечек экземпляр больше, в то время как он должен быть там).
А вот консоль, setInterval по-прежнему в действии Eventhough профайлер показывает нам нет больше случаев протечек.
я упускаю что-то по дороге мусор собирает работу или профилировщику Chrome?