jump to navigation

Mengalokasikan Resource dari Managed Heap – Bagian 02 16 Mei 2008

Posted by firstyuyu in Garbage Collector.
trackback

Sekarang mari coba kita lihat bagaimana heap bahasa C mengalokasikan memori. Pada heap milik C, alokasi memori untuk sebuah obyek mengharuskan kita untuk menelusuri sebuah linked list. Ketika sebuah blok kosong yang cukup besar ditemukan, maka blok tersebut akan dipecah, lalu pointer di dalam node linked list tersebut akan dimodifikasi untuk mengakomodasi blok yang kita pecah tadi. Pada managed heap, alokasi sebuah obyek hanya cukup dengan memberi nilai ke sebuah pointer (ini tentu sangat cepat). Sebenarnya, alokasi sebuah obyek di managed heap hampir secepat alokasi memori di stack! Selain itu, pada umumnya, heap (termasuk heap milik C) mengalokasikan obyek dimanapun sepanjang terdapat tempat kosong. Karena itu, jika kita membuat beberapa obyek secara berurutan, sangat mungkin bahwa obyek-obyek ini akan terpisah sajauh beberapa megabyte di dalam memori. Pada managed heap, mengalokasikan beberapa obyek secara berurutan akan membuat obyek-obyek tersebut terletak secara berdampingan di memori.

Di banyak aplikasi, obyek yang dialokasikan pada waktu yang hampir bersamaan akan cenderung memiliki keterkaitan yang kuat serta mungkin digunakan dalam waktu yang sama. Sebagai contoh, sangat sering kita mengalokasikan obyek FileStream tepat sebelum obyek BinaryWriter dibuat. Lalu aplikasi akan menggunakan obyek BinaryWriter, yang secara internal juga menggunakan obyek FileStream. Pada lingkungan yang menerapkan garbage collector, obyek-obyek dialokasikan secara berurutan (contiguous) di memori, sehingga akan mempercepat akses ke obyek-obyek yang saling terkait. Ini berarti bahwa process working set akan lebih kecil daripada aplikasi serupa yang berjalan pada lingkungan non-garbage collector.

Sejauh ini, kedengarannya managed heap jauh lebih unggul dibandingkan heap milik C karena implementasinya yang lebih sederhana dan kecepatan aksesnya karena obyek yang berdekatan. Namun sebelum bisa terlalu berbangga diri, ada satu hal yang harus kita ketahui. Managed heap bisa menawarkan kelebihan ini karena membuat sebuah asumsi besar: bahwa lokasi memori yang tersedia tidak terbatas. Jelas sekali bahwa asumsi ini cukup berani, dan managed heap harus mempunyai sebuah mekanisme yang bisa mewujudkan asumsi ini. Mekanisme ini ialah garbage collector.

Begini cara kerja garbage collector: Ketika sebuah aplikasi memanggil operator new untuk membuat sebuah obyek, mungkin saja saat itu tidak ada lagi memori yang tersisa untuk menempatkan obyek yang akan dibuat itu. Managed heap mendeteksi hal ini jika jumlah byte yang dibutuhkan oleh obyek tersebut ditambahkan dengan nilai NextObjPointer menghasilkan nilai yang melebihi jumlah alokasi memori yang dimiliki oleh managed heap. Jika hal ini terjadi, maka garbage collector akan dijalankan untuk membuang obyek-obyek yang sudah tidak diperlukan lagi dari memori.

Penting: Penjelasan cara kerja garbage collector di atas merupakan penyederhanaan. Pada kenyataanya, garbage collector akan dijalankan ketika generation 0 sudah penuh. Garbage collector menggunakan konsep generation, yang tujuannya adalah untuk meningkatkan performance. Idenya ialah bahwa obyek yang baru dibuat akan dimasukkan dalam kategori obyek yang masih “muda” (generation 0) sementara obyek yang sudah dibuat sejak awal aplikasi berjalan, digolongkan dalam ketegori obyek yang sudah “tua”. Obyek yang terdapat di generation 0 adalah obyek yang baru saja dibuat dan belum pernah diperiksa oleh garbage collector. Obyek yang selamat dari pembersihan oleh garbage collector akan dipromosikan ke generation yang lebih tinggi (misalnya generation 1). Memisahkan obyek ke dalam beberapa generation akan memungkinkan garbage collector untuk melakukan pembersihan pada generation tertentu saja, tidak perlu semua obyek yang ada di dalam managed heap. Kita akan membahas lebih detail mengenai generation ini di artikel mendatang. Untuk saat ini, akan lebih mudah jika kita anggap bahwa garbage collector akan berjalan ketima managed heap sudah penuh.

 

<< Bagian 01 <<

 

Komentar»

No comments yet — be the first.

Tinggalkan komentar