Referans Sayımı Yoluyla Nesne Yaşam Sürelerini Yönetme

Geleneksel nesne sistemlerinde nesnelerin yaşam döngüsü (yani nesnelerin oluşturulmasını ve silinmesini çevreleyen sorunlar), dil (veya dil çalışma zamanı) veya uygulama programcıları tarafından açıkça işlenir.

Yeniden kullanılan bileşenlerden oluşan, gelişen, merkezi olmayan bir şekilde yapılandırılmış bir sistemde, artık herhangi bir istemcinin, hatta herhangi bir programcının bileşenin ömrüyle nasıl başa çıkacağını her zaman "bildiği" doğru değildir. Doğru güvenlik ayrıcalıklarına sahip bir istemci için, basit bir istek aracılığıyla nesne oluşturmak nispeten kolaydır, ancak nesne silme tamamen başka bir konudur. Bir nesnenin artık gerekli olmadığı ve silinmesi gereken durumlarda net olması şart değildir. (Java gibi çöp toplanan programlama ortamlarını bilen okuyucular buna katılmıyor olabilir; ancak Java nesneleri makineye veya işlem sınırlarına yayılmaz ve bu nedenle çöp toplama işlemi tek işlem alanı içinde yaşayan nesnelerle sınırlıdır. Buna ek olarak, Java tek bir programlama dilinin kullanımını zorlar.) Özgün istemci nesneyle bitirildiğinde bile, diğer bazı istemciler veya istemciler buna başvuruda bulunabileceğinden nesneyi kapatamaz.

Bir nesneye artık ihtiyaç duyulmamasını sağlamanın bir yolu, bir çapraz işlem veya kanallar arası nesneye yönelik tüm bağlantılar kaybolduğunda sistemi bilgilendirmek için tamamen temel alınan bir iletişim kanalına bağımlı olmaktır. Ancak, bu yöntemi kullanan şemalar çeşitli nedenlerle kabul edilemez. Sorunlardan biri, işlemler arası/ağlar arası programlama modeli ile tek işlemli programlama modeli arasında önemli bir fark gerektirebileceğidir. İşlemler arası/ağlar arası programlama modelinde, iletişim sistemi nesne yaşam süresi yönetimi için gerekli kancaları sağlarken, tek işlemli programlama modelinde nesneler herhangi bir araya gelen iletişim kanalı olmadan doğrudan bağlanır. Bir diğer sorun da bu şemanın sistem tarafından sağlanan ve işlem içi durumda bileşen performansını engelleyebilecek bir yazılım katmanına neden olmasıdır. Ayrıca, açık izlemeyi temel alan bir mekanizma, binlerce veya milyonlarca nesneye doğru ölçeklendirilme eğiliminde değildir.

COM, bu sorun kümesine ölçeklenebilir ve dağıtılmış bir yaklaşım sunar. İstemciler bir nesneyi ne zaman kullandıklarını ve ne zaman bitirdiklerini söyler ve nesneler artık gerekli olmadığında kendilerini siler. Bu yaklaşım, tüm nesnelerin kendilerine yapılan başvuruları saymalarını zorunlu bırakır. Doğal olarak çöp toplama gibi kendi yaşam süresi yönetim düzenlerine sahip olan Java gibi programlama dilleri, COM nesnelerini dahili olarak uygulamak ve kullanmak için COM'un başvuru sayımını kullanabilir ve programcının bununla uğraşmaktan kaçınmasını sağlar.

Bir uygulamanın, artık kullanılmadığında ayırdığı belleği serbest bırakması gerektiği gibi, bir nesnenin istemcisi de nesneye artık ihtiyaç duyulmadığında nesneye yönelik referanslarını serbest bırakmaktan sorumludur. Nesne odaklı bir sistemde, istemci bunu yalnızca nesneye kendisini serbest bırakma yönergesi vererek yapabilir.

Bir nesnenin artık kullanılmadığında serbest bırakılması önemlidir. Zorluk, bir nesneyi serbest bırakmanın ne zaman uygun olduğunu belirlemektir. Bu, otomatik değişkenler (yığında ayrılanlar) ile kolaydır; bunlar bildirildikleri bloğun dışında kullanılamaz, bu nedenle blok sonuna ulaşıldığında derleyici bunları serbest bırakır. Dinamik olarak ayrılan COM nesneleri için, bir nesnenin istemcilerine, özellikle de aynı anda birden çok istemci tarafından kullanımda olabilecek yerel veya uzak nesneler olmak üzere, nesneyi artık ne zaman kullanmaları gerekmeyeceğine karar vermek gerekir. Nesne, kendisini serbest bırakmadan önce tüm istemcilerin onunla işini bitirmesini beklemelidir. COM nesneleri arabirim işaretçileri aracılığıyla değiştirildiğinden ve nesneler tarafından farklı işlemlerde veya diğer makinelerde kullanılabildiğinden, sistem nesnenin istemcilerini takip edemez.

COM'un bir nesneyi serbest bırakmanın ne zaman uygun olduğunu belirleme yöntemi manuel referans sayımıdır. Her nesne, ona kaç istemcinin bağlandığını izleyen bir başvuru sayısı tutar; başka bir ifadeyle, herhangi bir istemcideki arabirimlerinden herhangi birine kaç işaretçi vardır.

Daha fazla bilgi için aşağıdaki konulara bakın:

IUnknown Kullanımı ve Uygulaması