Bagikan melalui


Mengelola Masa Pakai Objek Melalui Penghitungan Referensi

Dalam sistem objek tradisional, siklus hidup objek—yaitu, masalah seputar pembuatan dan penghapusan objek—ditangani secara implisit oleh bahasa (atau durasi bahasa) atau secara eksplisit oleh pemrogram aplikasi.

Dalam sistem yang berkembang dan dibangun secara desentral yang terdiri dari komponen yang digunakan kembali, tidak lagi benar bahwa klien mana pun, atau bahkan programmer apa pun, selalu "tahu" cara menangani masa pakai komponen. Untuk klien dengan hak istimewa keamanan yang tepat, masih relatif mudah untuk membuat objek melalui permintaan sederhana, tetapi penghapusan objek adalah masalah lain sepenuhnya. Ini belum tentu jelas ketika objek tidak lagi diperlukan dan harus dihapus. (Pembaca yang terbiasa dengan lingkungan pemrograman yang dikumpulkan sampah, seperti Java, mungkin tidak setuju; namun, objek Java tidak menjangkau mesin atau bahkan memproses batasan, dan oleh karena itu pengumpulan sampah dibatasi untuk objek yang hidup dalam ruang proses tunggal. Selain itu, Java memaksa penggunaan satu bahasa pemrograman.) Bahkan ketika klien asli dilakukan dengan objek, itu tidak dapat mematikan objek, karena beberapa klien atau klien lain mungkin masih memiliki referensi untuk itu.

Salah satu cara untuk memastikan bahwa objek tidak lagi diperlukan adalah dengan bergantung sepenuhnya pada saluran komunikasi yang mendasar untuk memberi tahu sistem ketika semua koneksi ke objek lintas proses atau lintas saluran telah menghilang. Namun, skema yang menggunakan metode ini tidak dapat diterima karena beberapa alasan. Salah satu masalahnya adalah mungkin memerlukan perbedaan besar antara model pemrograman lintas proses/lintas jaringan dan model pemrograman proses tunggal. Dalam model pemrograman lintas proses/lintas jaringan, sistem komunikasi akan menyediakan kait yang diperlukan untuk manajemen masa pakai objek, sementara dalam model pemrograman proses tunggal, objek terhubung langsung tanpa saluran komunikasi yang mengintervensi. Masalah lain adalah bahwa skema ini juga dapat mengakibatkan lapisan perangkat lunak yang disediakan sistem yang akan mengganggu performa komponen dalam kasus dalam proses. Selain itu, mekanisme berdasarkan pemantauan eksplisit tidak akan cenderung menskalakan ke ribuan atau jutaan objek.

COM menawarkan pendekatan yang dapat diskalakan dan didistribusikan untuk serangkaian masalah ini. Klien memberi tahu objek ketika mereka menggunakannya dan ketika mereka selesai, dan objek menghapus diri mereka sendiri ketika mereka tidak lagi diperlukan. Pendekatan ini mengamanatkan bahwa semua objek menghitung referensi untuk diri mereka sendiri. Bahasa pemrograman seperti Java, yang secara inheren memiliki skema manajemen seumur hidup mereka sendiri, seperti pengumpulan sampah, dapat menggunakan penghitungan referensi COM untuk mengimplementasikan dan menggunakan objek COM secara internal, memungkinkan programmer untuk menghindari berurusan dengannya.

Sama seperti aplikasi harus membebaskan memori yang telah dialokasikan setelah memori tidak lagi digunakan, klien objek bertanggung jawab untuk membebaskan referensinya ke objek ketika objek tersebut tidak lagi diperlukan. Dalam sistem berorientasi objek, klien hanya dapat melakukan ini dengan memberi objek instruksi untuk membebaskan dirinya sendiri.

Penting bahwa objek dibatalkan alokasinya ketika tidak lagi digunakan. Kesulitan terletak pada menentukan kapan tepat untuk membatalkan alokasi objek. Ini mudah dengan variabel otomatis (yang dialokasikan pada tumpukan)—variabel tersebut tidak dapat digunakan di luar blok tempat variabel dideklarasikan, sehingga kompilator membatalkan alokasinya ketika akhir blok tercapai. Untuk objek COM, yang dialokasikan secara dinamis, terserah klien objek untuk memutuskan kapan mereka tidak perlu lagi menggunakan objek —terutama objek lokal atau jarak jauh yang mungkin digunakan oleh beberapa klien secara bersamaan. Objek harus menunggu sampai semua klien selesai dengannya sebelum membebaskan dirinya sendiri. Karena objek COM dimanipulasi melalui penunjuk antarmuka dan dapat digunakan oleh objek dalam proses yang berbeda atau pada komputer lain, sistem tidak dapat melacak klien objek.

Metode COM untuk menentukan kapan tepat untuk membatalkan alokasi objek adalah penghitungan referensi manual. Setiap objek mempertahankan jumlah referensi yang melacak berapa banyak klien yang terhubung dengannya - yaitu, berapa banyak pointer yang ada ke salah satu antarmukanya di klien mana pun.

Untuk mengetahui informasi selengkapnya, lihat topik berikut:

Menggunakan dan Menerapkan IUnknown