( TANYA ) MANAJEMEN GARBAGE COLLECTION

Forum diskusi pemrograman VB6

( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby vber » 17 Feb 2012, 11:03

para ahli sekalian,
maaf, mau tanya nih,
bagaimana perbedaan manajemen garbage collector di vb6 dengan vb.net
apakah perbedaan manajemen tersebut berpengaruh pada sumber daya memory ?
trus petugas yang mengatur ( si runtime ) juga memiliki perbedaan yang signifikan di antara keduanya ?
udah gogling plus wiki, masih belum mudeng
atas pencerahannya matur nuwun
vber
Prajurit Dua
Prajurit Dua
 
Posts: 4
Joined: 28 Jan 2012, 15:39
Memberi kopi: 0 cangkir
Mendapat kopi: 2 cangkir

Re: ( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby Gyus » 19 Feb 2012, 02:24

Koleksi Sampah di VB6 dan NET.

VB6 dibangun di atas COM. Dalam COM, setiap objek memiliki referensi hitungan tersembunyi di dalamnya, hitungan jumlah variabel dalam lingkup yang mengarah ke objek. Bila anda membuat baru objek jumlah referensi di set ke 1. Jika anda kemudian menetapkan variabel yang lain, jumlah referensi bertambah ke 2. Sebagai referensi tersebut pergi, baik dengan variabel akan keluar dari ruang lingkup atau memiliki nilai yang berbeda yang ditugaskan kepada mereka, jumlah referensi adalah decremented. Ketika jumlah referensi pergi ke 0, tidak ada cara untuk objek terbiasa dan itu akan sampah yang dikumpulkan saat itu.

Dalam .NET, objek tidak memiliki jumlah referensi. Sebaliknya, waktu berjalan .NET menyimpan daftar apa poin apa. Ketika sebuah benda instantiates obyek yang lain, run time .NET melacak hubungan. Jika objek dilewatkan sekitar, ia mengingat hubungan-hubungan juga. Akhirnya, semua pointer ke obyek pergi. Pada saat itu, tidak seperti VB6, tidak ada yang terjadi, ada hanya ada sebuah benda unreferenced dalam memori. Pada titik tertentu, sampah begitu banyak (yaitu, objek unreferenced) akan membangun dalam memori bahwa waktu berjalan .NET akan memutuskan untuk melacak benda unreferenced dan mengumpulkan sampah mereka (itu penyederhanaan, tetapi akan melayani).

Perbedaan-perbedaan ini mempengaruhi bagaimana program. Dalam VB6, adalah umum untuk mengatur variabel apa-apa untuk memaksa referensi menghitung sampai drop ke 0 dan menyebabkan pengumpulan sampah dari objek tersebut. Ini tidak masuk akal dalam .NET. Mengatur sesuatu untuk apa-apa di .NET, dengan asumsi hanya ada 1 referensi, cukup menyebabkan objek untuk menjadi calon pengumpulan sampah di beberapa waktu, kemudian terdefinisi. Jika anda menemukan, anda benar-benar perlu untuk memaksa pengumpulan sampah di .NET, ada 2 pilihan:

1. Refactor program anda untuk menjaga lingkup sesempit mungkin
2. Gunakan pola Dispose

Di mana dan bagaimana anda mendeklarasikan objek mempengaruhi berapa lama mereka berada dalam ruang lingkup. Shared variabel berada dalam lingkup untuk kehidupan program, variabel anggota selama objek tersebut ada, dan variabel lokal sampai sebuah fungsi keluar. Selalu berusaha untuk lingkup sempit, objek ini akan secara alami cara mengumpulkan sampah pada saat yang terbaik.

Ada saat-saat ketika anda harus melepaskan objek pada titik tertentu dalam sebuah program. Hal ini dilakukan menggunakan pola Dispose. Lihat Buang, Finalisasi, dan Manajemen Sumber Daya untuk pembahasan lengkap. Versi Twitter adalah bahwa pola Dispose memungkinkan anda memberitahu suatu objek "anda sudah selesai; melepaskan sumber daya anda sekarang". Ini tidak sama dengan pengumpulan sampah; pengumpulan sampah masih terjadi kemudian seperti yang dijelaskan di atas. Jika anda perlu untuk mengimplementasikan Dispose.

Ada 2 pilihan, ini tidak saling eksklusif sama sekali. #1 harus selalu dilakukan, #2 harus dilakukan bila diperlukan.

Ada perbedaan penting antara memaksa pengumpulan sampah di VB6 dengan menetapkan variabel apa-apa dan memaksa membersihkan dalam .NET dengan panggil Dispose. Dalam VB6, pengumpulan sampah hanya terjadi sekali tidak ada cara untuk objek yang akan diakses. Dalam .NET, sejauh waktu berjalan yang bersangkutan, Dispose hanyalah fungsi seperti yang lain (compiler mengobati Dispose khusus, tapi bukan run time). Anda dapat menghubungi Dispose tidak peduli berapa banyak referensi yang ada untuk objek. Juga, tidak ada yang menghentikan anda dari menggunakan obyek setelah itu telah dibuang. Apakah ini "bekerja" tergantung pada desain kelas. Meskipun demikian, dengan menggunakan objek setelah telah dibuang adalah pelanggaran terhadap pola. Pengelola Masa Depan kode mungkin menganggap pola tersebut telah diikuti dengan benar dan menyebabkan obyek menjadi tidak dapat digunakan sekali dibuang.

:ar!
ImageImage
User avatar
Gyus
Global Moderator
Global Moderator
 
Posts: 1172
Joined: 19 Mar 2010, 20:33
Location: Jakarta Timur - Indonesia
Memberi kopi: 25 cangkir
Mendapat kopi: 84 cangkir

Re: ( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby vbgila » 19 Feb 2012, 02:30

bingung ane om gyus bacanya,,apa terjemahannya yg kurang bgs ya,, :)>-
Salam SuperImage
User avatar
vbgila
Prajurit Kepala
Prajurit Kepala
 
Posts: 348
Joined: 27 Jun 2011, 13:24
Location: Dunia Fana
Memberi kopi: 37 cangkir
Mendapat kopi: 56 cangkir

Re: ( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby Gyus » 19 Feb 2012, 02:36

vbgila wrote:bingung ane om gyus bacanya,,apa terjemahannya yg kurang bgs ya,, :)>-

mungkin juga.. harus diterjemahkan ke coding boz biar ngerti... ;))
ImageImage
User avatar
Gyus
Global Moderator
Global Moderator
 
Posts: 1172
Joined: 19 Mar 2010, 20:33
Location: Jakarta Timur - Indonesia
Memberi kopi: 25 cangkir
Mendapat kopi: 84 cangkir

Re: ( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby Seruling » 20 Feb 2012, 15:22

@Gyus:

Rasa-rasanya saya pernah baca yang seperti itu... tapi di mana ya? :-?
Kayaknya pernah baca waktu dibantuin sama google cari artikel tentang GC. :-? :lol:
=== Seruling ===
User avatar
Seruling
Kopral Dua
Kopral Dua
 
Posts: 688
Joined: 28 Jun 2010, 19:01
Location: Berhadapan dengan Acer Aspire
Memberi kopi: 34 cangkir
Mendapat kopi: 37 cangkir

Re: ( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby akhirudin » 20 Feb 2012, 16:11

:D saya baru kenal barang yang namanya Pengumpul Sampah ini waktu awal2 dotnet keluar..
tapi wajar konsep GC lahir jauh sebelum saya lahir :))
baca sana-sini ceritanya pengen ngerti..
tapi nggak jelas... saya nggak yakin kalau saya ngerti apa GC ini..

tapi saya coba ambil beberapa kesimpulan..
GC di net adalah fitur dari .net yang jalan di background untuk ngebantu program melakukan bersih2 memori..
jadi saya nggak peduli lagi sama si GC ini.. :D

Bicara performance aplikasi..
banyak faktornya..
saya biarkan GC bekerja sesuai tugasnya..
dan saya cari optimalisasi performace di sektor lain yang saya ngerti sesuai kebutuhan dan kesempatan....

untuk ngejawab pertanyaan TS
apakah perbedaan manajemen tersebut berpengaruh pada sumber daya memory ?

saya nggak ngerti bedanya apa, jadi saya nggak tau jawabannya :D

trus petugas yang mengatur ( si runtime ) juga memiliki perbedaan yang signifikan di antara keduanya ?

naah yang ini saya nggak ngerti maksud pertanyaannya... :D
maksudnya vbruntime vs .net framework?
atau vbruntime vs net CLR?
kalau iya salah satu diatas.. tetep saya nggak bisa jawab :D

maap cuma numpang liwat :D

Post akhirudin telah mendapat kopi dari:
vberror13
User avatar
akhirudin
Kopral Dua
Kopral Dua
 
Posts: 607
Joined: 22 Mar 2010, 09:30
Location: Bandung Timur
Memberi kopi: 25 cangkir
Mendapat kopi: 44 cangkir

Re: ( TANYA ) MANAJEMEN GARBAGE COLLECTION

Postby Seruling » 20 Feb 2012, 17:20

Ini yang berhasil saya ketahui tentang GC (dengan bantuan Teropong Google):

Garbage Collection (GC) adalah bentuk manajemen memory secara otomatis, di mana GC berusaha untuk membebaskan memory yang ditempati oleh sebuah "object yang tidak dipakai" (garbage), agar area memori tersebut bisa digunakan kembali.

APAKAH GARBAGE ITU?
Garbage adalah, satu atau lebih, blok area di memory yang semula digunakan oleh program, namun setelah proses selesai, area tersebut tidak lagi dipakai. Blok memory yang dipakai oleh program itu tadinya bisa berujud dalam berbagai bentuk. Bisa berupa class, bisa berupa gambar, bisa array, bisa berupa string, bisa berupa cache file yang dibuat secara manual, ataupun bentuk-bentuk lainnya. Berbagai object tersebut akan dipakai, dan setelah jangka waktu tertentu object tersebut pasti tidak dipakai lagi. Namun adakalanya program gagal melakukan pembebasan memori pada lokasi yang tidak lagi digunakan, sehingga menjadi Garbage yang berpotensi menghabiskan memory.
Jadi, Garbage adalah blok memory yang berisi data-data (berupa byte dan bit) yang sudah tidak dipakai lagi, tetapi tidak dibebaskan, sehingga dianggap masih digunakan, padahal sudah tidak digunakan lagi.

BAGAIMANA GARBAGE TIMBUL?
Garbage timbul dari pemakaian memory yang gagal dibebaskan setelah selesai digunakan. Berbagai penyebab gagalnya pembebasan, di antaranya:
- Disebabkan ketidak sengajaan/ketidak tahuan, misalnya:
1. Ketika sebuah form memanggil sebuah class, dan ketika form tersebut di tutup, lupa untuk menghancurkan class (dengan syntax "Set SuatuClass = Nothing"). Atau perintah "Set SuatuClass = Nothing" tidak pernah ter eksekusi dengan baik saat form ditutup.
2. Sebuah program membuka sebuah file, namun tidak menutup file tersebut ketika exit (mungkin karena crash, hang, atau memang masih uji coba dan lupa tulis koding untuk menutupnya).
3. Handle suatu object yang belum dibebaskan kembali ke system. Biasanya terjadi kalau memakai Windows API untuk menangani sebuah object tertentu, ataupun untuk baca-tulis.

- Disebabkan by design (dari sananya sudah begitu), misalnya:
1. Sebuah Program memanggil pustaka dari sebuah file DLL (atau OCX, atau yang lainnya), yang mana file DLL tersebut mengalokasikan memory untuk suatu keperluan. Namun DLL tersebut tidak membebaskan memory dengan baik.
2. Memanggil sebuah fungsi secara rekursif, yang di dalam fungsi tersebut menginisialisasi sebuah class atau object baru. Garbage Collection secara manual dari fungsi rekursif cukup sulit dilakukan, sehingga sebaiknya menghindari membuat fungsi rekursif yang menginisialisasi object/class baru (pengalaman pribadi).


FASILITAS GC
Beberapa kompiler menyediakan GC otomatis, beberapa masih manual, dan ada juga yang gabungan otomatis + manual.
.NET sudah menyediakan GC otomatis, yang selalu diperbaiki setiap cersi terbarunya. Bahasa pemrograman jaman dahulu masih melakukan GC secara manual (misalnya Borland C versi 1.0 for DOS). Kompiler C/C++ sekarang ini menyediakan GC otomatis, namun juga membolehkan programmer melakukan GC manual. VB6 melakukan GC otomatis + manual, namun melalui pendekatan yang berbeda, yaitu dengan menggunakan property "count" pada class object. Saat count menjadi nol, berarti tidak ada yang di referensi, dan di asumsikan memory sudah terbebaskan.

GC: VB6 DAN .NET
VB6 dibangun di atas COM (Componen Object Model). Dalam COM, dalam setiap object terdapat property 'count' yang tujuannya menghitung jumlah object dalam suatu kumpulan. Ketika dideklarasikan object baru, maka 'count' akan bertambah, dan ketika object di hancurkan, dengan "Set x = Nothing", maka jumlah 'count' diturunkan, sampai menjadi nol jika semua sudah di habiskan.
Sedangkan pada .NET, GC dilakukan dengan mengumpulkan daftar alamat memory object yang ditunjuk oleh pointer. Runtime akan secara simultan memantau daftar alamat memory ini, dan pada suatu ketika akan memutuskan untuk melepas referensinya.

Dalam VB6, GC dapat dipaksa dilakukan dengan "Set X = Nothing"
Contohnya, dalam sebuah form VB6:
Code: Select all
Private Sub BebaskanMemori()
    Set X = Nothing
    DoEvents   ' Agar system diberi kesempatan benar-benar membebaskan memory
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    BebaskanMemori
End Sub


.NET sudah menyempurnakan GC. Namun demikian fasilitas GC manual tidak dihilangkan oleh .NET. Programmer bisa dengan leluasa melakukan GC sendiri (manual) ataupun membiarkan .NET yang melakukan GC.

Demikian yang saya tau.

Mohon dibetulkan kalau ada yang salah, ditambahkan kalau ada yang kurang ^:)^
=== Seruling ===

Post Seruling telah mendapat 2 kopi dari:
akhirudin, vberror13
User avatar
Seruling
Kopral Dua
Kopral Dua
 
Posts: 688
Joined: 28 Jun 2010, 19:01
Location: Berhadapan dengan Acer Aspire
Memberi kopi: 34 cangkir
Mendapat kopi: 37 cangkir


Return to Visual Basic 6.0

Who is online

Users browsing this forum: Bing [Bot] and 5 guests