Adakah bahasa go perlu mengurus memori secara manual?
Bahasa go tidak memerlukan pengurusan memori manual; bahasa go mempunyai fungsi pengurusan memori terbina dalam (mekanisme GC), yang merupakan mekanisme pengurusan memori automatik. Apabila memori yang diminta oleh program daripada sistem pengendalian tidak lagi diperlukan, kutipan sampah secara aktif mengitar semulanya dan menggunakannya semula untuk kod lain untuk memohon memori, atau mengembalikannya kepada sistem pengendalian Proses kitar semula automatik untuk sumber peringkat memori ini Ia adalah kutipan sampah dan komponen program yang bertanggungjawab untuk kutipan sampah ialah pemungut sampah.
Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.
Bahasa Go tidak memerlukan pengurusan memori manual; bahasa go mempunyai fungsi pengurusan memori terbina dalam (mekanisme GC), dan pembangun tidak perlu mengambil berat tentang aplikasi dan keluaran ingatan, yang membawa manfaat kepada pengguna.
Apakah GC dan untuk apa ia digunakan?
GC, nama penuh Garbage Collection, ialah mekanisme untuk pengurusan memori automatik.
Apabila memori yang diminta oleh program daripada sistem pengendalian tidak lagi diperlukan, kutipan sampah mengitar semulanya secara aktif dan menggunakannya semula untuk kod lain untuk memohon ingatan, atau mengembalikannya kepada sistem pengendalian -sumber peringkat Proses kitar semula automatik ialah kutipan sampah. Komponen program yang bertanggungjawab untuk kutipan sampah ialah pemungut sampah.
Pengumpulan sampah sebenarnya adalah contoh sempurna "Kesederhanaan itu Rumit". Di satu pihak, pengaturcara mendapat manfaat daripada GC dan tidak perlu risau atau memohon secara manual dan melepaskan memori secara automatik melepaskan baki memori apabila program sedang berjalan. Sebaliknya, GC hampir tidak dapat dilihat oleh pengaturcara ia hanya muncul apabila program memerlukan pengoptimuman khas dengan menyediakan API yang boleh dikawal untuk mengawal masa larian dan overhed GC.
Dalam pengiraan, ruang memori mengandungi dua kawasan penting: Stack dan Heap; kawasan tindanan secara amnya menyimpan parameter, nilai pulangan dan pembolehubah setempat bagi panggilan fungsi, dan tidak menjana Pemecahan memori diuruskan oleh pengkompil dan tidak perlu diuruskan oleh pembangun; kawasan timbunan akan menghasilkan pemecahan memori Dalam bahasa Go, objek dalam kawasan timbunan diperuntukkan oleh pengagih memori dan dikitar semula oleh pengumpul sampah
Biasanya, sampah. koleksi Proses pelaksanaan mutator dibahagikan kepada dua komponen separa bebas:
Mutator: Nama ini pada asasnya merujuk kepada kod mod pengguna. Kerana untuk pengumpul sampah, kod mod pengguna hanya mengubah suai hubungan rujukan antara objek, iaitu, beroperasi pada graf objek (graf terarah hubungan rujukan antara objek).
Pengumpul: Kod yang bertanggungjawab untuk melaksanakan kutipan sampah.
Objek akar dalam GC
Objek akar juga dipanggil set akar dalam terminologi pengumpulan sampah Ia adalah proses penandaan pengumpul sampah. Objek pertama yang akan diperiksa termasuk:
Pembolehubah global: pembolehubah yang wujud sepanjang keseluruhan kitaran hayat program yang boleh ditentukan pada masa penyusunan.
Timbunan pelaksanaan: Setiap goroutine mengandungi timbunan pelaksanaan sendiri, yang mengandungi pembolehubah pada tindanan dan penunjuk kepada blok memori timbunan yang diperuntukkan.
Daftar: Nilai daftar mungkin mewakili penunjuk, dan penunjuk ini yang terlibat dalam pengiraan mungkin menunjukkan blok ingatan timbunan yang diperuntukkan oleh sesetengah penilai.
Dalam bahasa Go, algoritma yang dilaksanakan oleh pengumpul sampah ialah Pengumpul tanda dan sapu tiga warna serentak
pengumpul sampah berjalan serentak dengan program Go, jadi algoritma penghalang tulis diperlukan untuk mengesan kemungkinan perubahan dalam ingatan. Satu-satunya syarat untuk memulakan halangan tulis ialah menghentikan program untuk tempoh masa yang singkat, iaitu "Hentikan Dunia" Integriti data pada timbunan
1.1 Prinsip pelaksanaan
Pengumpulan sampah bahasa Go boleh dibahagikan kepada penamatan jelas, penandaan dan penamatan tanda dan jelaskan empat fasa berbeza, dua daripadanya menjana Stop The World (STW)
Kosongkan Fasa Penamatan
Jika sampah semasa kitaran pengumpulan dicetuskan secara paksa, kita juga perlu berurusan dengan unit pengurusan memori yang belum dibersihkan
- Fasa Penandaan (STW)
Tukar status kepada , dayakan penghalang tulis, bantuan program pengguna (Mutator Assists) Dan enqueque objek akar
Sambung semula program pelaksanaan Proses penandaan dan program pengguna yang membantu akan mula menandakan objek dalam ingatan secara serentak objek yang dicipta akan ditandakan secara langsung dengan warna hitam
Mulakan mengimbas objek akar, termasuk semua tindanan Goroutine, objek global dan struktur data masa jalan yang tiada dalam timbunan Goroutine dijeda. Pemproses semasa
memproses objek dalam baris gilir kelabu secara bergilir-gilir, menandakan objek hitam dan menandakan objek yang mereka tunjuk kepada kelabu
menggunakan Algoritma penamatan teragih menyemak kerja yang tinggal dan mendapati bahawa selepas fasa penandaan selesai, ia memasuki fasa penamatan penandaan
Fasa penamatan penandaan (STW)
- Jeda program, tukar status kepada
_GCmarktermination
dan tutup program pengguna bertanda tambahan - Bersihkan cache benang pada pemproses
Fasa pembersihan
Tukar status kepada
_GCoff
Mulakan fasa pembersihan, mulakan keadaan pembersihan dan tutup halangan tulisPulihkan program pengguna , semua objek yang baru dicipta Ia akan ditandakan dengan warna putih
Pada masa yang sama, bersihkan semua unit pengurusan memori di latar belakang Apabila Goroutine memohon untuk unit pengurusan memori baharu, pembersihan akan dicetuskan
1.2 Kaedah pelabelan tiga warna
Algoritma pelabelan tiga warna membahagikan objek dalam program kepada tiga kategori : putih, hitam dan kelabu:
- Objek putih — potensi sampah, yang ingatannya boleh dituntut semula oleh pemungut sampah
- Objek hitam — objek hidup, termasuk objek yang tidak mempunyai apa-apa rujukan kepada penunjuk luaran dan objek yang boleh dicapai daripada objek akar
- Objek kelabu - objek aktif, kerana terdapat penunjuk luaran kepada objek putih, pengumpul sampah akan mengimbas sub-objek objek ini
Prinsip kerja pengumpul sampah tanda tiga warna adalah mudah, anda boleh Jumlahkannya ke dalam langkah berikut:
Pilih objek kelabu daripada koleksi objek kelabu dan tandakan hitam
Semua objek yang ditunjuk oleh objek hitam ditandakan dengan kelabu untuk memastikan objek mahupun objek yang dirujuk oleh objek itu tidak akan dikitar semula
Ulang dua langkah di atas sehingga tiada kelabu dalam objek graf Objek
Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Video Pengaturcaraan! !
Atas ialah kandungan terperinci Adakah bahasa go perlu mengurus memori secara manual?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...
