Javascript WeakMap ve WeakSet
JavaScript için bellek yönetimi otomatik olarak gerçekleşir ve bu işlem Garbage Collector tarafından yürütülür. Garbage Collector, bellekte artık kullanılmayan nesnelerin bellekten silinmesini sağlar. Bu işlem, bellekte yer açmak ve performansı arttırmak için yapılır. Garbage Collector, bellekteki nesnelerin referans sayılarını kontrol eder. Referans sayısı sıfır olan nesneler bellekten silinir. Garbage Collector, uygulamanın çalışması sırasında periyodik olarak devreye girer ve bellekteki artık nesneleri tespit eder.
JavaScript geliştiricileri, bellek yönetimini optimize etmek için bazı adımlar atabilirler:
- Nesnelerin referans sayılarını kontrol etmek: Geliştiriciler, nesnelerin referans sayılarını izleyerek bellekteki artık nesneleri tespit etmelidir.
- Kullanılmayan nesneleri temizlemek: Geliştiriciler, kullanılmayan nesneleri bellekten silmelidir. Bu, Garbage Collector’a bellekteki artık nesneleri tespit etmesine yardımcı olur.
- Dinamik bellek alanı kullanmak: Geliştiriciler, bellek alanını düzenli olarak kontrol ederek bellekteki boş alanları kullanabilir.
- Önbellekleme kullanmak: Geliştiriciler, önbellekleme yöntemlerini kullanarak bellekteki verileri saklamak için bellek alanını daha etkili kullanabilirler.
- Profil ve optimizasyon yapmak: Geliştiriciler, programın performansını izlemek için profil yapmalı ve gerektiğinde optimizasyon yapmalıdır.
- WeakMap ve WeakSet : Geliştiriciler, WeakMap ve WeakSet gibi veri yapılarını kullanarak bellek yönetimini optimize edebilirler. Bu veri yapıları, Garbage Collector’ın bellekteki artık nesneleri tespit etmesini kolaylaştırır.
WeakMap ve WeakSet
JavaScript’de bellek yönetimini optimize etmek için kullanılan veri yapılarıdır.
WeakMap: Anahtar-değer çiftleri için bellek yönetimini optimize eden bir veri yapısıdır. WeakMap, anahtar olarak sadece nesne kullanabilir ve anahtarların referans sayılarını izler. Referans sayısı sıfır olan anahtarlar ve onlarla ilişkili değerler bellekten silinir.
const map = new WeakMap();
const obj1 = { name: "John" };
const obj2 = { name: "Jane" };
// WeakMap'e anahtar-değer çiftleri ekleyebiliriz
map.set(obj1, "John's data");
map.set(obj2, "Jane's data");
console.log(map.get(obj1)); // "John's data"
console.log(map.get(obj2)); // "Jane's data"
// Objelerin referanslarını silersek
obj1 = null;
obj2 = null;
console.log(map.has(obj1)); // false
console.log(map.has(obj2)); // false
WeakSet: Sadece nesne içeren bir veri yapısıdır. WeakSet, elemanların referans sayılarını izler. Referans sayısı sıfır olan elemanlar bellekten silinir.
const set = new WeakSet();
const obj1 = { name: "John" };
const obj2 = { name: "Jane" };
// WeakSet'e elemanlar ekleyebiliriz
set.add(obj1);
set.add(obj2);
console.log(set.has(obj1)); // true
console.log(set.has(obj2)); // true
// Objelerin referanslarını silersek
obj1 = null;
obj2 = null;
console.log(set.has(obj1)); // false
console.log(set.has(obj2)); // false
WeakMap ve WeakSet, Garbage Collector’ın bellekteki artık nesneleri tespit etmesini kolaylaştırarak, bellek yönetimini optimize etmek için kullanılabilir.
Bellekteki artık nesnelerin kontrol edilmesi için başka araçlar ve yöntemler kullanılabilir:
- Memory Profiler: JavaScript’te bellek kullanımını izlemek için kullanılan tarayıcı eklentileri veya konsol araçlarıdır. Bu araçlar, bellekteki nesnelerin sayısını, boyutunu ve referans sayılarını gösterir.
- Garbage Collection (GC) logları: Garbage Collector, bellekteki artık nesneleri tespit ettiğinde ve silindiğinde loglar oluşturur. Bu loglar, bellekteki artık nesnelerin sayısını, boyutunu ve silinme zamanlarını gösterir.
- Memory Leak Testleri: Memory Leak Testleri, bellekteki artık nesnelerin tespit edilmesi için kullanılabilir. Bu testler, bellekteki nesnelerin sayısını ve boyutunu izler. Eğer bellekteki nesnelerin sayısı ve boyutu arttıkça arttıysa, bellekteki bir leak olduğu anlaşılabilir.
- Code review: Bellek yönetimi ile ilgili problemleri önlemek için, kodun bellek yönetimi açısından incelenmesi ve optimize edilmesi gerekir. Bu, bellekteki artık nesnelerin kontrol edilmesi için en etkili yöntemdir.