Kodumda birçok ciddi ve açık olmayan bellek sızıntısına yol açan aşağıdaki Chrome hatasını girdim :
(Bu sonuçlar, Chrome Dev Tools'un GC'yi çalıştıran ve daha sonra toplanmayan her şeyin yığın anlık görüntüsünü alan bellek profillerini kullanır .)
Aşağıdaki kodda, someClass
örnek çöp toplanır (iyi):
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
Ama bu durumda çöp toplanmayacak (kötü):
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
Ve ilgili ekran görüntüsü:
Bir kapama (bu durumda function() {}
), nesneye aynı bağlamdaki başka bir kapama tarafından başvurulursa, bu kapamanın kendisine ulaşılabilir olsa da olmasa da, tüm nesneleri "canlı" tutar.
Benim sorum diğer tarayıcılarda (IE 9+ ve Firefox) çöp toplama hakkında. JavaScript yığın profiler gibi webkit araçlarına oldukça aşinayım, ancak diğer tarayıcıların araçlarını çok az biliyorum, bu yüzden bunu test edemedim.
Bu üç durumdan hangisinde IE9 + ve Firefox çöpü örneği toplar someClass
?
unreachable
işlev hiçbir zaman yürütülmez, böylece hiçbir şey günlüğe kaydedilmez.