JS çöp toplama mekanizması

JS'nin bellek yaşam döngüsü:

  • İhtiyacınız olan hafızayı tahsis edin
  • Ayrılan belleği kullan (okuma, yazma)
  • Gerekmediğinde bırakın ve iade edin
  • Bellek yaşam döngüsü

    js çöp toplama mekanizması:

    • Otomatik çöp toplama mekanizması, artık kullanılmayan değerleri bulmak ve ardından kapladıkları bellek alanını serbest bırakmaktır. Çöp toplayıcı, her sabit zaman diliminde bir yayınlama işlemi gerçekleştirir.
    • Js'de en yaygın olarak kullanılan, işaret kaldırma algoritması aracılığıyla hangi nesnelerin artık kullanımda olmadığını bulmaktır. Yukarıdaki örnekte, a = null aslında bir referans yayınlama işlemi yapar, böylece a'nın orijinal karşılık gelen değeri referansı kaybeder ve yürütme ortamını terk eder , Bu değer, çöp toplayıcının bir işlem gerçekleştirdiği bir sonraki sefer bulunacak ve serbest bırakılacaktır. Bu nedenle, uygun zamanda referansı kaldırmak, sayfa için daha iyi performans elde etmenin önemli bir yoludur.
    • Yerel kapsamda, fonksiyon çalıştırıldığında, yerel değişkenin var olmasına gerek yoktur, böylece çöp toplayıcı kolayca bir karar verebilir ve onu toplayabilir.
    • Bununla birlikte, global değişkenlerin bellek alanını otomatik olarak ne zaman serbest bırakması gerektiğine karar vermek zordur, bu nedenle geliştirme aşamasında, global değişkenleri mümkün olduğunca kullanmaktan kaçınmanız gerekir.

    JS bellek alanı yönetimi:

    js, otomatik çöp toplama mekanizmasına sahiptir. Geliştirme sırasında bellekle çok fazla ilgilenmenize gerek olmasa da, ayırma ve kurtarma otomatik olarak yönetilir. Ancak yazdığınız kodu ve yürütme sırasında neler olduğunu anlamak daha iyi kod yazmamıza yardımcı olacaktır.

    Temizle olarak işaretle

    • "Ortama giren" değişkenlerin kapladığı bellek, yürütme akışı karşılık gelen ortama girdiği sürece serbest bırakılamaz, bunlar kullanılabilir. Değişken ortamdan ayrıldığında "ortamı terk et" olarak işaretlenir.
    • İşaretlemenin birçok yolu vardır: Bir değişken ortama girdiğinde kaydetmek için özel bir bit çevirin; bir "ortama girin" değişken listesi ve bir "ortamdan ayrılma" listesi kullanın; (yalnızca belirli uygulamayı anlayın)
    • Çöp toplayıcı çalışırken tüm değişkenleri işaretleyecek, daha sonra ortamdaki değişkenler ve ortamdaki değişkenler tarafından referans verilen değişkenler işaretlerinden kaldırılacaktır.
    • Bundan sonra işaretlenen değişkenler silinecek değişkenler olarak kabul edilecektir, çünkü ortamdaki değişkenler artık bu değişkenlere erişemez.
    • Son olarak, çöp toplayıcı hafıza temizleme işini tamamlar, işaretlenen bu değerleri yok eder ve kapladıkları hafıza alanını geri kazanır.

    Referans sayısı

    Her bir değere kaç kez başvurulduğunu takip edin.

    • Bir değişken bildirildiğinde ve değişkene bir referans türü değeri atandığında, bu değere yapılan başvuru sayısı 1'dir.
    • Aynı değer başka bir değişkene atanırsa, bu değere yapılan referansların sayısı 1 artar.
    • Tersine, bu değere bir başvuru içeren değişken başka bir değer alırsa, bu değere yapılan başvuru sayısı bir azaltılır.
    • Bu değerin referans sayısı 0 olduğunda, bu değere artık erişmenin bir yolu olmadığı anlamına gelir, böylece kapladığı bellek alanı geri kazanılabilir.
    • Bu şekilde, çöp toplayıcı bir dahaki sefere tekrar çalıştığında, sıfır referanslı değerin kapladığı belleği serbest bırakacaktır.

    Birbirinizi arayın

    Bu örnekte, nesneA ve nesneB, ilgili öznitelikleri aracılığıyla birbirlerine başvurur; yani, her iki nesneye yapılan başvuru sayısı 2'dir.

    İşaret süpürme stratejisinin uygulanmasında, iki nesne işlev yürütüldükten sonra kapsam dışında kaldığından, bu karşılıklı referans bir sorun oluşturmaz.

    Ancak referans sayma stratejisinin uygulanmasında, fonksiyon çalıştırıldığında, nesne A ve nesne B var olmaya devam edecek, çünkü referans sayıları asla 0 olmayacak.

    Bu işlev defalarca tekrar tekrar çağrılırsa, büyük miktarda bellek geri kazanılmayacaktır.

    IE'nin referans sayma sorunu hakkında:

    IE'deki bazı nesneler yerel JavaScript nesneleri değildir. Örneğin, BOM ve DOM'daki nesneler, C ++ kullanılarak COM (Bileşen Nesne Modeli) nesneleri biçiminde uygulanır ve COM nesnelerinin çöp toplama mekanizması bir referans sayma stratejisi kullanır.

    Bu nedenle, IE'nin JavaScript motoru işaret süpürme stratejisi kullanılarak uygulanmış olsa da, JavaScript tarafından erişilen COM nesneleri hala referans sayma stratejisine dayanmaktadır. Diğer bir deyişle, COM nesneleri IE'ye dahil olduğu sürece, döngüsel referanslar olacaktır.

    Aşağıdaki basit örnek, COM nesnelerinin kullanımından kaynaklanan döngüsel başvuru sorununu gösterir:

    Döngü çağrısı

    Bu örnek, bir DOM öğesi (öğesi) ile yerel bir JavaScript nesnesi (myObject) arasında döngüsel bir başvuru oluşturur.

    Bunlar arasında, myObject değişkeni, element nesnesine işaret eden element adında bir özelliğe sahiptir ve değişken element ayrıca myObject'e işaret eden someObject adında bir özelliğe sahiptir.

    Bu döngüsel referans nedeniyle, örnekteki DOM sayfadan kaldırılsa bile asla geri dönüştürülmeyecektir.

    Bunun gibi döngüsel başvuru sorunlarından kaçınmak için en iyisi, yerel JavaScript nesnesinin, kullanılmadıklarında DOM öğesinden bağlantısını manuel olarak kesmektır. Örneğin, önceki örnek tarafından oluşturulan döngüsel referansı ortadan kaldırmak için aşağıdaki kodu kullanabilirsiniz:

    Değişken null olarak ayarlandı

    Bir değişkeni boş olarak ayarlamak, değişken ile daha önce başvurduğu değer arasındaki bağlantıyı kesmek anlamına gelir. Çöp toplayıcı bir dahaki sefere çalıştığında, bu değerleri silecek ve kapladıkları belleği geri kazanacaktır.

    Yukarıdaki problemleri çözmek için IE9, BOM ve DOM nesnelerini gerçek JavaScript nesnelerine dönüştürür. Bu şekilde, iki çöp toplama algoritmasının bir arada bulunmasının neden olduğu problemler önlenir ve ortak bellek sızıntısı olgusu da ortadan kaldırılır.

    Eser sahibi: StarryLake

    Bağlantı: https://www.jianshu.com/p/61b808d05590

    Fallen, WESG arenasında göründü ve odak noktası oldu. "Futbol" Vietnam'ın kara atı dünya şampiyonunu üzdü
    önceki
    Sözleri tutmak Shuyi Zhou! Başarıyla, sakince, netizen: Daha heyecanlı oynadı!
    Sonraki
    [Haftalık Emlak Piyasası] Ay başındaki kısa bir piyasa ayarlaması döneminde, ana kentsel alandaki ticari konut işlem hacmi aylık bazda %37 düştü
    Glory posteri sırrı ortaya koyuyor! Honor V20 veya üç korkutucu teknolojiyle donatılacak
    NIKE dört grafiti ayakkabısını mı piyasaya sürecek? ! LHM gibi yüzü ve hikayesi olan bir diziyi nasıl duymadınız?
    Eksi 42 derecelik aşırı soğuk Zhang Zhen ve Ni Ni kar üfler, "Akan Gözyaşları" "Kar Fırtınası" filmi, orman polisine haraç vermek için derin dağlarda ve karlı tarlalarda çekilir.
    Huawei nova4e değerlendirmesi: 32 milyon üç boyutlu güzellik nimeti, mobil güzellikler daha güzel!
    Tarihin en yalnız binbaşı, bazıları bunu hiç duymadı
    MySql'in birkaç özel operatörü
    Chongqing'in 5 737Max Yolcu Uçakları Uçmayı Durdurdu 37 yıl boyunca polisden polis harcamaları kızlar gibi
    Lei Jun: Tüm yüksek, orta ve düşük üçüncü sınıf pazarları istiyorum! Redmi 6 resmen Sanayi ve Bilgi Teknolojileri Bakanlığı'na girdi
    Bir devrin sonu! Senin vahşi alanın, benim domuz yetiştiriciliğim artık olmayacak
    Teknoloji devleri dünyayı değiştirmek için engelsiz teknolojiyi kullanmak istiyor, Tencent ve Facebook zaten AI teknolojisini kullanıyor
    Kamuflajı bu kadar iyi oynayan kişi kesinlikle sayılır! BAPE 2017AW DOT CAMO serisi tamamen açık!
    To Top