Go adalah bahasa pengumpulan sampah:
http://golang.org/doc/go_faq.html#garbage_collection
Di sini dikatakan bahwa ini adalah pengumpul sampah mark-and-sweep, tetapi tidak menyelidiki detailnya, dan penggantinya sedang dikerjakan ... namun, paragraf ini tampaknya belum banyak diperbarui sejak Go dirilis.
Masih mark-and-sweep? Apakah konservatif atau tepat? Apakah ini bersifat generasi?
garbage-collection
go
pengguna1003432
sumber
sumber
Jawaban:
Paket untuk Go 1.4+ pengumpul sampah:
Go 1.3 pembaruan pengumpul sampah di atas Go 1.1:
Go 1.1 pengumpul sampah:
Go 1.0 pengumpul sampah:
Mengganti GC dengan yang berbeda kontroversial, misalnya:
sumber
(Untuk Go 1.8 - Q1 2017, lihat di bawah )
Pengumpul Sampah serentak Go 1.5 berikutnya melibatkan kemampuan untuk "memacu" kata gc.
Berikut adalah proposal yang disajikan dalam makalah ini yang mungkin cocok untuk Go 1.5, tetapi juga membantu memahami GC di Go.
Anda dapat melihat keadaan sebelum 1,5 (Stop The World: STW)
(Foto dari presentasi GopherCon 2015 " Go GC: Memecahkan Masalah Latensi di Go 1.5 ")
Tombol tuning tunggal untuk kolektor STW adalah "GOGC", pertumbuhan heap relatif antar koleksi. Setelan default, 100%, memicu pengumpulan sampah setiap kali ukuran heap menjadi dua kali lipat dari ukuran live heap seperti pada koleksi sebelumnya:
Pengaturan waktu GC di kolektor STW.
(Foto dari presentasi GopherCon 2015 " Go GC: Memecahkan Masalah Latensi di Go 1.5 ")
sumber
Berikut implementasi GC:
https://github.com/golang/go/blob/master/src/runtime/mgc.go
Dari dokumen di sumber:
sumber
Go 1.8 GC mungkin berevolusi lagi, dengan proposal "Hilangkan pemindaian ulang tumpukan STW"
The Pengumuman sini dan Anda dapat melihat sumber yang relevan komit d70b0fe dan sebelumnya.
sumber
Saya tidak yakin, tapi saya pikir (tip) GC saat ini sudah paralel atau setidaknya itu WIP. Dengan demikian, properti stop-the-world tidak berlaku lagi atau tidak akan berlaku dalam waktu dekat. Mungkin orang lain dapat mengklarifikasi hal ini lebih detail.
sumber