Saya telah mencatat bug Chrome berikut , yang menyebabkan banyak kebocoran memori yang serius dan tidak jelas dalam kode saya:
(Hasil ini menggunakan profil memori Chrome Dev Tools ' , yang menjalankan GC, dan kemudian mengambil snapshot tumpukan dari segala sesuatu yang tidak dikumpulkan dikumpulkan.)
Dalam kode di bawah ini, someClass
contohnya adalah sampah yang dikumpulkan (baik):
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
Tapi itu tidak akan menjadi sampah yang dikumpulkan dalam kasus ini (buruk):
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
Dan tangkapan layar yang sesuai:
Tampaknya penutupan (dalam hal ini, function() {}
) membuat semua benda "hidup" jika objek direferensikan oleh penutupan lain dalam konteks yang sama, apakah penutupan itu sendiri bahkan dapat dijangkau.
Pertanyaan saya adalah tentang pengumpulan penutupan sampah di browser lain (IE 9+ dan Firefox). Saya cukup akrab dengan alat-alat webkit, seperti JavaScript heap profiler, tapi saya tahu sedikit alat peramban lain, jadi saya belum bisa mengujinya.
Di mana dari tiga kasus ini akankah sampah IE9 + dan Firefox mengumpulkan someClass
contoh?
unreachable
fungsi tidak pernah dieksekusi sehingga tidak ada yang benar-benar dicatat.