2012-05-07 13 views
8

Herhangi bir şeye atamadan bir nesne oluşturursam, Javascript çöpü bu nesneyi ne zaman alır? böyle çöp toplama yapılırsaJavascript'te anonim nesneler nasıl toplanır?

alert(new Date().getTime()); 

, bu bellek sızıntısına neden olur: İşte bir örnek?

for (var i = 0; i < 99999999; i++) { 
    console.info(new Date().getTime()); 
} 
+0

Eğer bir sorununuz var mı? –

+1

Sorularınıza doğrudan yanıtlar ("nesneler artık referans alındıktan sonra toplanır" ve "hayır, sızıntıya neden olmaz") muhtemelen sizin aradığınız şey değildir. Gerçekten ne bilmek istiyordun? – Phrogz

+2

@AshBurlaczenko ve Phrogz - sanki bu tür bir şeyi sormakla ilgili yanlış bir şey olduğunu düşünmüyorum. Bazı kodları optimize etmeye çalışıyorsanız, belki de bellek kullanımını azaltmak için, bu bilmeniz gereken çok iyi bir şeydir ve belirli bir soruna bağlı olmak zorunda değildir. – nickf

cevap

7

Kapsamda hiç kimse anonim nesnelere başvurmuyorsa, bir sonraki GC çalışması sırasında çöp toplayacaklardır.

Console.info çalışmayı bitirdikten sonra, çöp toplamaya hazırlar. Kapsam içi değişkenleri onlara başvurmak için ayarlarsanız, o zaman olmaz.

4

çöp toplama güzelliği bellek iade edilecek zaman bilmiyorum , ne de (o kadar çok sık oluyor sürece) Umurunda gerektiğidir.

Bu durumda, çalışma zamanı en sonunda bu Date örneklerini geri almalıdır, ancak yaptığınız hiçbir şey gerçekten ne kadar hızlı değiştireceğini değiştirmeyecektir. Ayrıca, bu bir bellek sızıntısına neden DEĞİLDİR.

4

JavaScript, artık kullanılmayan dizeler, nesneler, dizeler ve işlevlerin kullandığı belleği geri almak için otomatik olarak GC (çöp toplayıcı) çalıştırır.

çöp toplama bir anahtar özelliği bellek geri güvenli olduğunda çöp toplayıcı belirlemek gerekir olmasıdır. Açıktır ki, , hala kullanımda olan değerleri geri almamalı ve yalnızca toplanamaz; Yani, yapamayan değerler, programdaki değişkenlerden, nesne özelliklerinden veya dizi öğelerinden herhangi birine yönlendirilebilir.

Referans:Here.

İlgili konular