← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
26

Bellek Yönetimi (Managing Memory)

26.1 WeakRef Nesneleri (WeakRef Objects)

Bir WeakRef, hedef nesneyi veya sembolü çöp toplamadan (garbage collection) korumaksızın ona başvurmak için kullanılan bir nesnedir. WeakRef nesneleri, eğer hedef çöp toplama tarafından geri kazanılmamışsa, hedef değere erişim sağlamak üzere çözümlenebilir (dereferenced).

26.1.1 WeakRef Yapıcısı (The WeakRef Constructor)

WeakRef yapıcısı (constructor):

  • %WeakRef% nesnesidir.

  • global nesnenin (global object) "WeakRef" özelliğinin ilk değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir WeakRef oluşturur ve başlatır.

  • fonksiyon olarak çağrılması amaçlanmamıştır ve bu şekilde çağrıldığında bir istisna fırlatır.

  • bir sınıf tanımının extends ifadesinin değeri olarak kullanılabilir. Belirtilen WeakRef davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneğini WeakRef.prototype yerleşik metotlarını desteklemek için gerekli dahili durumla oluşturmak ve başlatmak için WeakRef yapıcısına (constructor) bir super çağrısı içermelidir.

26.1.1.1 WeakRef ( target )

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, bir TypeError istisnası fırlat.

  2. Eğer CanBeHeldWeakly(target) false ise, bir TypeError istisnası fırlat.

  3. weakRef, ? OrdinaryCreateFromConstructor(NewTarget, "%WeakRef.prototype%", « [[WeakRefTarget]] ») olsun.

  4. AddToKeptObjects(target) işlemini gerçekleştir.

  5. weakRef.[[WeakRefTarget]] değerini target olarak ayarla.

  6. weakRef döndür.

26.1.2 WeakRef Yapıcısının Özellikleri (Properties of the WeakRef Constructor)

WeakRef yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

  • aşağıdaki özelliklere sahiptir:

26.1.2.1 WeakRef.prototype

WeakRef.prototype özelliğinin ilk değeri WeakRef prototip nesnesidir (WeakRef prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

26.1.3 WeakRef Prototip Nesnesinin Özellikleri (Properties of the WeakRef Prototype Object)

WeakRef prototip nesnesi:

Kuralsal İsteğe Bağlı (Normative Optional)

26.1.3.1 WeakRef.prototype.constructor

WeakRef.prototype.constructor özelliğinin ilk değeri %WeakRef% yapıcısıdır.

26.1.3.2 WeakRef.prototype.deref ( )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. weakRef, this değeri olsun.

  2. ? RequireInternalSlot(weakRef, [[WeakRefTarget]]) işlemini gerçekleştir.

  3. WeakRefDeref(weakRef) döndür.

26.1.3.3 WeakRef.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag%(07_sec-ecmascript-data-types-and-values.md#sec-well-known-symbols) özelliğinin ilk değeri "WeakRef" dizgisidir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

26.1.4 WeakRef Soyut İşlemleri (WeakRef Abstract Operations)

26.1.4.1 WeakRefDeref ( weakRef )

WeakRefDeref soyut işlemi, weakRef (bir WeakRef) argümanını alır ve bir ECMAScript dil değeri (ECMAScript language value) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. target, weakRef.[[WeakRefTarget]] olsun.

  2. Eğer target empty değilse, o zaman

    1. AddToKeptObjects(target) işlemini gerçekleştir.

    2. target döndür.

  3. undefined döndür.

26.1.5 WeakRef Örneklerinin Özellikleri (Properties of WeakRef Instances)

WeakRef örnekleri, WeakRef prototip nesnesinden (WeakRef prototype object) özellikleri miras alan sıradan nesnelerdir (ordinary objects). WeakRef örnekleri ayrıca bir [[WeakRefTarget]] dahili yuvasına sahiptir.

26.2 FinalizationRegistry Nesneleri (FinalizationRegistry Objects)

Bir FinalizationRegistry, hedef nesneler ve semboller çöp toplama (garbage collection) işlemine tabi tutulduğunda gerçekleştirilen temizleme işlemlerinin kaydedilmesini ve kaydının silinmesini yöneten bir nesnedir.

26.2.1 FinalizationRegistry Yapıcısı (The FinalizationRegistry Constructor)

FinalizationRegistry yapıcısı (constructor):

  • %FinalizationRegistry% nesnesidir.

  • global nesnenin (global object) "FinalizationRegistry" özelliğinin ilk değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir FinalizationRegistry oluşturur ve başlatır.

  • fonksiyon olarak çağrılması amaçlanmamıştır ve bu şekilde çağrıldığında bir istisna fırlatır.

  • bir sınıf tanımının extends ifadesinin değeri olarak kullanılabilir. Belirtilen FinalizationRegistry davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneğini FinalizationRegistry.prototype yerleşik metotlarını desteklemek için gerekli dahili durumla oluşturmak ve başlatmak için FinalizationRegistry yapıcısına (constructor) bir super çağrısı içermelidir.

26.2.1.1 FinalizationRegistry ( cleanupCallback )

Bu fonksiyon çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, bir TypeError istisnası fırlat.

  2. Eğer IsCallable(cleanupCallback) false ise, bir TypeError istisnası fırlat.

  3. finalizationRegistry, ? OrdinaryCreateFromConstructor(NewTarget, "%FinalizationRegistry.prototype%", « [[Realm]], [[CleanupCallback]], [[Cells]] ») olsun.

  4. func, etkin fonksiyon nesnesi (active function object) olsun.

  5. finalizationRegistry.[[Realm]] değerini func.[[Realm]] olarak ayarla.

  6. finalizationRegistry.[[CleanupCallback]] değerini HostMakeJobCallback(cleanupCallback) olarak ayarla.

  7. finalizationRegistry.[[Cells]] değerini yeni ve boş bir Liste (List) olarak ayarla.

  8. finalizationRegistry döndür.

26.2.2 FinalizationRegistry Yapıcısının Özellikleri (Properties of the FinalizationRegistry Constructor)

FinalizationRegistry yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına sahiptir.

  • aşağıdaki özelliklere sahiptir:

26.2.2.1 FinalizationRegistry.prototype

FinalizationRegistry.prototype özelliğinin ilk değeri FinalizationRegistry prototip nesnesidir (FinalizationRegistry prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

26.2.3 FinalizationRegistry Prototip Nesnesinin Özellikleri (Properties of the FinalizationRegistry Prototype Object)

FinalizationRegistry prototip nesnesi:

26.2.3.1 FinalizationRegistry.prototype.constructor

FinalizationRegistry.prototype.constructor özelliğinin ilk değeri %FinalizationRegistry% yapıcısıdır.

26.2.3.2 FinalizationRegistry.prototype.register ( target, heldValue [ , unregisterToken ] )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. finalizationRegistry, this değeri olsun.

  2. ? RequireInternalSlot(finalizationRegistry, [[Cells]]) işlemini gerçekleştir.

  3. Eğer CanBeHeldWeakly(target) false ise, bir TypeError istisnası fırlat.

  4. Eğer SameValue(target, heldValue) true ise, bir TypeError istisnası fırlat.

  5. Eğer CanBeHeldWeakly(unregisterToken) false ise, o zaman

    1. Eğer unregisterToken undefined değilse, bir TypeError istisnası fırlat.

    2. unregisterToken değerini empty olarak ayarla.

  6. cell, { [[WeakRefTarget]]: target, [[HeldValue]]: heldValue, [[UnregisterToken]]: unregisterToken } Kaydı (Record) olsun.

  7. cell kaydını finalizationRegistry.[[Cells]] listesine ekle.

  8. undefined döndür.

26.2.3.3 FinalizationRegistry.prototype.unregister ( unregisterToken )

Bu metot çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. finalizationRegistry, this değeri olsun.

  2. ? RequireInternalSlot(finalizationRegistry, [[Cells]]) işlemini gerçekleştir.

  3. Eğer CanBeHeldWeakly(unregisterToken) false ise, bir TypeError istisnası fırlat.

  4. removed, false olsun.

  5. finalizationRegistry.[[Cells]] listesindeki her bir { [[WeakRefTarget]], [[HeldValue]], [[UnregisterToken]] } cell Kaydı (Record) için sırayla yap:

    1. Eğer cell.[[UnregisterToken]] empty değilse ve SameValue(cell.[[UnregisterToken]], unregisterToken) true ise, o zaman

      1. cell kaydını finalizationRegistry.[[Cells]] listesinden çıkar.

      2. removed değerini true olarak ayarla.

  6. removed döndür.

26.2.3.4 FinalizationRegistry.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag%(07_sec-ecmascript-data-types-and-values.md#sec-well-known-symbols) özelliğinin ilk değeri "FinalizationRegistry" dizgisidir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

26.2.4 FinalizationRegistry Örneklerinin Özellikleri (Properties of FinalizationRegistry Instances)

FinalizationRegistry örnekleri, FinalizationRegistry prototip nesnesinden (FinalizationRegistry prototype object) özellikleri miras alan sıradan nesnelerdir (ordinary objects). FinalizationRegistry örnekleri ayrıca [[Cells]] ve [[CleanupCallback]] dahili yuvalarına sahiptir.