[Sadece İçselleştirme Süreci sürecini daha fazla eklemek istedim]
Böylece, bir nesne oluşturursunuz ve nesne toplandığında, nesnenin Finalize
yöntemi çağrılmalıdır. Ancak sonuçlandırmada bu çok basit varsayımdan daha fazlası var.
KISA KAVRAMLAR ::
Nesneleri uygulama Finalize
yöntemleri DEĞİL , orada Bellek hemen geri alınır, tabii ki
uygulama koduyla artık erişilemezse
Uygulanması Nesneleri Finalize
Yöntem, Concept / Uygulanmasına Application Roots
, Finalization Queue
, Freacheable Queue
bunlar geri alınabilir önce gelir.
Uygulama Kodu ile erişilemezse, herhangi bir nesne çöp sayılır
Varsayalım :: Sınıflar / Nesneler A, B, D, G, H Finalize
Metodu uygulamıyor ve C, E, F, I, J Finalize
metodu uygulamıyor .
Bir uygulama yeni bir nesne oluşturduğunda, yeni operatör belleği yığıntan ayırır. Nesnenin türü bir Finalize
yöntem içeriyorsa , sonlandırma kuyruğuna nesneye bir işaretçi yerleştirilir .
bu nedenle C, E, F, I, J nesnelerine işaretçiler, sonlandırma sırasına eklenir. Sonlandırma sıra çöp toplayıcı tarafından kontrol edilen bir iç veri yapısıdır. Kuyruktaki her girdi , nesnenin belleği geri alınmadan önce yönteminin çağrılması gereken bir nesneyi gösterir . Aşağıdaki şekilde birkaç nesne içeren bir yığın gösterilmektedir. Bu nesnelere uygulama köklerinden ulaşılabilir
Finalize
ve bazıları değil. C, E, F, I ve J nesneleri oluşturulduğunda .Net çerçevesi, bu nesnelerin Finalize
yöntemlere sahip olduğunu algılar ve bu nesnelere sonlandırma kuyruğuna işaretçiler eklenir .
Bir GC oluştuğunda (1. Toplama), B, E, G, H, I ve J nesneleri çöp olarak belirlenir. Çünkü A, C, D, F hala yukarıdaki sarı kutudan oklarla gösterilen Uygulama Kodu ile erişilebilir.
Çöp toplayıcı , bu nesnelere işaretçi arayan sonlandırma sırasını tarar . Bir işaretçi bulunduğunda, işaretçi sonlandırma kuyruğundan kaldırılır ve freachable kuyruğuna eklenir ("F ulaşılabilir"). Freachable sıra çöp toplayıcı tarafından kontrol edilen başka bir dahili veri yapısıdır. Ulaşılabilir kuyruktaki her işaretçi , yönteminin çağrılması için hazır olan bir nesneyi tanımlar .
Finalize
Koleksiyondan sonra (1. Koleksiyon), yönetilen yığın aşağıdaki şekle benzer bir şeye benziyor. Aşağıda verilen açıklamalar ::
1.) B, G ve H nesneleri tarafından kullanılan bellek derhal geri kazanılmıştır, çünkü bu nesnelerin çağrılması gereken bir sonlandırma yöntemi yoktur .
2.) Bununla birlikte, E, I ve J nesneleri tarafından işgal edilen bellek, Finalize
yöntemleri henüz çağrılmadığından geri alınamaz.
Sonlandırma yönteminin çağrılması, sıralanabilir kuyruk tarafından yapılır .
3.) A, C, D, F hala yukarıdaki sarı kutudan oklarla gösterilen Uygulama Kodu ile erişilebilir, bu yüzden her durumda toplanmayacaklardır
Sonlandırma yöntemlerini çağırmaya adanmış özel bir çalışma zamanı iş parçacığı vardır. Ulaşılabilir kuyruk boş olduğunda (genellikle durum budur), bu iş parçacığı uyur. Ancak girdiler göründüğünde, bu iş parçacığı uyanır, her girdiyi kuyruktan kaldırır ve her nesnenin Sonlandırma yöntemini çağırır. Çöp toplayıcı, geri kazanılabilir belleği sıkıştırır ve özel çalışma zamanı iş parçacığı , her nesnenin Finalize
yöntemini çalıştırarak freachable kuyruğunu boşaltır . Son olarak burada, Sonlandırma yönteminiz yürütüldüğünde
Bir dahaki sefere çöp toplayıcı çağrıldığında (2. Toplama), uygulamanın kökleri ona işaret etmediği ve freachable kuyruğu artık onu işaret etmediği için (nihai Koleksiyon da), kesinleşmiş nesnelerin gerçekten çöp olduğunu görür . nesneler için bellek (E, I, J) sadece Heap'ten geri kazanılır. Aşağıdaki şekle bakın ve yukarıdaki rakamla karşılaştırın
Burada anlaşılması gereken önemli nokta, sonlandırma gerektiren nesneler tarafından kullanılan belleği geri kazanmak için iki GC'nin gerekli olmasıdır . Gerçekte, bu nesneler daha eski bir nesle yükseltilebileceğinden ikiden fazla koleksiyon kabini bile gereklidir
NOT :: freachable kuyruk küresel ve statik değişkenler kökleri vardır tıpkı bir kök olarak kabul edilir. Bu nedenle, bir nesne freachable kuyruğundaysa, nesneye ulaşılabilir ve çöp değildir.
Son bir not olarak, hata ayıklama uygulamasının bir şey olduğunu unutmayın, Çöp Toplama başka bir şeydir ve farklı çalışır. Şimdiye kadar, çöp toplama işlemini sadece uygulamalarda hata ayıklama yoluyla HİSSEDEMİYORSUNUZ .