CodeBlanks Logo Icon CodeBlanks

Mark-sweep

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

index.js
// 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

index.js
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?

index.js
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

Soru
return allObjects.____(o => reachable.has(o)).join(',');
Cevap
return allObjects.filter(o => reachable.has(o)).join(',');

Açıklama: filter koşulu sağlayanları tutar.

Uzman bölümündeki tüm dersler