Mark-sweep
- Node.js kursu
- Uzman
- Ders 21/47
- 5 dk
Mark-sweep ve Mark-compact algoritmalarını öğrenirsin.
Mark-sweep
Mark-sweep, old kuşak için kullanılan çöp toplama algoritmasıdır. İki adımdan oluşur: mark (işaretle) — köklerden başlayarak ulaşılabilen nesneleri işaretler; sweep (süpür) — işaretlenmemiş nesneleri siler. Bu, döngüsel başvuruları da doğru ele alır.
Bir markSweep(roots, allObjects) fonksiyonu bunu modeller: roots'tan ulaşılabilen nesneleri bulur, geri kalanı atar. new Set(roots) ile ulaşılabilir kümesi oluşturulur; allObjects.filter(o => reachable.has(o)) ile yalnızca ulaşılabilenler kalır. Örnek: markSweep(['a', 'b'], ['a', 'b', 'c', 'd']) 'a,b' döndürür. c ve d ulaşılamaz; silinir. Bu model, mark-sweep'in işleyişini deterministik bir filtreyle gösterir.
Ulaşılabilir kümesi
Mark-sweep'in özü, bir nesnenin köklerden ulaşılabilir olup olmadığını denetlemektir. new Set(roots) ile ulaşılabilir kümesi oluşturulur. reachable.has(o) ile bir nesnenin kümede olup olmadığı anlaşılır. Bu, mark adımının basit bir modelidir.
Örnek: const reachable = new Set(['a', 'b']). reachable.has('a') true, reachable.has('c') false. allObjects.filter(o => reachable.has(o)) yalnızca ['a', 'b'] tutar. .join(',') ile 'a,b' dizesi elde edilir. Bu, mark-sweep'in hangi nesnelerin yaşayacağını nasıl belirlediğini gösterir: köklerden ulaşılabilenler yaşar, geri kalanlar süpürülür. Çıktı a,b olur.
Uygulama Mark-sweep fonksiyonu yaz
function markSweep(roots, allObjects) yaz. const reachable = new Set(roots) tanımla. return allObjects.filter(o => reachable.has(o)).join(',') ile döndür. console.log(markSweep(['a', 'b'], ['a', 'b', 'c', 'd'])) yazdır.
Başlangıç kodu
// markSweep fonksiyonu yaz
// köklerden ulaşılabilen nesneleri bul
// ulaşılabilirleri virgülle birleştir ve döndür
// ['a','b'], ['a','b','c','d'] ile çağır
// buraya yazÖrnek çözüm
function markSweep(roots, allObjects) {
const reachable = new Set(roots);
return allObjects.filter(o => reachable.has(o)).join(',');
}
console.log(markSweep(['a', 'b'], ['a', 'b', 'c', 'd']));Beklenen çıktı
a,b
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kavramı açıklamasına eşle
| Kavram | Anlamı |
|---|---|
Mark |
Ulaşılabileni işaretler |
Sweep |
İşaretsizi siler |
Roots |
Başlangıç noktaları |
Set |
Küme veri yapısı |
2 markSweep(['a'], ['a','b','c']) ne döndürür?
markSweep(['a'], ['a','b','c'])- 'a,b,c'
- 'b,c'
- 'a' Doğru cevap
- 'a,b'
Açıklama: Yalnızca 'a' kökten ulaşılabilendir; 'b' ve 'c' süpürülür.
3 filter çağrısını tamamla
return allObjects.____(o => reachable.has(o)).join(',');
return allObjects.filter(o => reachable.has(o)).join(',');
Açıklama: filter koşulu sağlayanları tutar.