Apakah maksud gc dalam php
Dalam PHP, nama penuh gc ialah "Pengumpulan Sampah", yang bermaksud "pengumpulan sampah" dalam bahasa Cina Ia adalah mekanisme pengurusan memori dinamik yang secara automatik mengeluarkan blok memori yang diperuntukkan yang tidak lagi diperlukan oleh program. Mekanisme GC membolehkan pengaturcara tidak terlalu bimbang tentang peruntukan memori program, supaya mereka boleh menumpukan lebih banyak tenaga kepada logik perniagaan.
Persekitaran pengendalian tutorial ini: sistem windows7, versi PHP7.1, komputer DELL G3
Dalam php, penuh nama gc ialah " Pengumpulan Sampah", yang bermaksud "pengumpulan sampah" dalam bahasa Cina, ialah mekanisme pengurusan memori yang dinamik.
Mekanisme pengumpulan sampah (GC) secara automatik mengeluarkan blok memori yang diperuntukkan yang tidak lagi diperlukan oleh program. Proses menuntut semula memori secara automatik dipanggil kutipan sampah.
Mekanisme kutipan sampah (GC) membolehkan pengaturcara tidak terlalu bimbang tentang peruntukan memori program, supaya mereka boleh menumpukan lebih banyak tenaga kepada logik perniagaan.
Antara pelbagai bahasa popular hari ini, mekanisme kutipan sampah adalah ciri umum bahasa generasi baharu.
Penjanaan sampah
Jenis kompleks dalam PHP7, seperti rentetan, tatasusunan, objek, dll., mempunyai gc dalam pengepala ini digunakan untuk menyokong kutipan sampah. Apabila pembolehubah ditetapkan atau dipindahkan, nombor rujukan nilai akan dinaikkan Apabila pembolehubah dilepaskan dengan tidak ditetapkan, kembali, dsb., nombor rujukan akan ditolak Selepas penolakan, jika pengiraan semula didapati menjadi 0 nilai akan dikeluarkan secara langsung Ini adalah proses kitar semula asas pembolehubah.
Namun, terdapat satu masalah yang tidak dapat diselesaikan oleh mekanisme ini iaitu masalah rujukan pekeliling.
Apakah rujukan pekeliling? Ringkasnya, nilai yang disimpan di dalam pembolehubah merujuk kepada pembolehubah itu sendiri. Perbandingan ini sering berlaku dengan pembolehubah jenis tatasusunan dan objek.
Mari kita bincangkan tentang rujukan dahulu, iaitu jenis zend_reference Ini ialah jenis pembolehubah baharu dalam PHP7 Apabila operasi "&" digunakan pada pembolehubah, struktur perantaraan baru ini struktur sebenarnya akan menunjuk kepada struktur nilai yang sepadan.
Contohnya:
// 当进行如下赋值操作时 $a = 'hello'; // $a -> zend_string $b = $a; // $b,$a -> zend_string $c = &$b; // $c,$b -> zval(type = IS_REFERENCE, refcount = 2) -> zend_string
akhirnya akan menjadi seperti berikut:
Iaitu, zval bagi $b dan $c ialah Tuding kepada zend_string terakhir melalui struktur perantaraan zend_reference.
Berbalik kepada isu rujukan pekeliling, berikut ialah contoh rujukan pekeliling tatasusunan:
$a = [1]; $a[] = &$a; unset($a);
Selepas menggunakan operasi &, pembolehubah a menjadi jenis rujukan dan kiraan semula kiraan rujukan ialah 2, dan Ia juga ditugaskan kepada elemen itu sendiri, iaitu pembolehubah a menjadi rujukan kepada dirinya sendiri.
Butirannya adalah seperti berikut:
Apabila tidak ditetapkan, ia akan menjadi seperti gambar di bawah:
Iaitu, jenis zval di mana $a terletak telah menjadi IS_UNDEF, dan kiraan rujukan struktur rujukan_zend dikurangkan sebanyak 1, tetapi masih lebih besar daripada 0. Pada masa ini, bahagian struktur ini menjadi sampah. Jika ini tidak diproses, ia boleh menyebabkan kebocoran memori. Di sini anda memerlukan pemungut sampah untuk mengumpul bahagian ini ke dalam penimbal dan kemudian mengitar semulanya.
Proses kitar semula
Jika kiraan semula pembolehubah lebih besar daripada 0 selepas ia dikurangkan, PHP tidak akan segera melaksanakan pengenalpastian sampah dan kitar semula pada pembolehubah ini, tetapi akan sebaliknya letakkan Dalam penimbal, tunggu sehingga penimbal penuh (10,000 nilai) dan kemudian proseskannya secara seragam. Apa yang ditambahkan pada penimbal ialah gc dalam pembolehubah zend_value Pada masa ini, sampah hanya akan muncul dalam dua jenis: tatasusunan dan objek . Dalam kes tatasusunan, Seperti yang telah diperkenalkan, dalam kes objek, atribut ahli merujuk kepada objek itu sendiri Dalam jenis lain, ahli dalam pembolehubah merujuk kepada pembolehubah itu sendiri tidak akan berlaku, jadi kutipan sampah sahaja memproses kedua-dua jenis pembolehubah ini.
Struktur gc zend_refcounted_h adalah seperti berikut:
typedef struct _zend_refcounted_h { uint32_t refcount; // 记录 zend_value 的引用数 union { struct { zend_uchar type, // zend_value的类型, 与zval.u1.type一致 zend_uchar flags, uint16_t gc_info // GC信息,记录在 gc 池中的位置和颜色,垃圾回收的过程会用到 } v; uint32_t type_info; } u; } zend_refcounted_h;
Sesuatu pembolehubah hanya boleh ditambahkan pada penimbal sekali Untuk mengelakkan penambahan berulang, zend_refcounted_h.gc_info akan ditetapkan kepada GC_PURPLE. selepas pembolehubah ditambah, iaitu, ditanda Ia berwarna ungu dan tidak akan disisipkan berulang kali pada masa hadapan.
Penimbal sampah ialah senarai terpaut dua hala Apabila penimbal penuh, proses semakan sampah akan dimulakan: melintasi penimbal, melintasi semua ahli pembolehubah semasa, dan kemudian mengurangkan pengiraan semula. ahli dengan 1 (jika ahli masih Jika ia mengandungi sub-ahli, ia juga akan dilalui secara rekursif, iaitu, depth-first traversal), dan akhirnya rujukan pembolehubah semasa akan diperiksa Jika ia dikurangkan kepada 0 , ia adalah sampah. Prinsip teras algoritma ini ialah: sampah disebabkan oleh ahli yang merujuk kepada diri mereka sendiri, kemudian kurangkan rujukan kepada semua ahli Jika didapati pengiraan semula pembolehubah akhir itu sendiri menjadi 0, bermakna semua rujukannya datang darinya sendiri. ahli, iaitu di tempat lain Jika anda tidak lagi menggunakannya, maka ia adalah sampah dan perlu dikitar semula. Jika tidak, ia bermakna ia bukan sampah dan perlu dikeluarkan dari penimbal. Proses khusus adalah seperti berikut:
(1) Mula melintasi dari akar senarai terpaut penimbal, tandakan nilai semasa sebagai kelabu (tetapkan zend_refcounted_h.gc_info kepada GC_GREY), kemudian lakukan traversal pertama mendalam bagi ahli nilai semasa, kurangkan kiraan semula daripada nilai ahli sebanyak 1, dan Juga ditandakan sebagai kelabu;
(2) Berulang kali melintasi senarai terpaut penimbal dan semak sama ada rujukan nilai semasa ialah 0. Jika 0, ia bermakna ia sememangnya sampah. Tandakannya sebagai putih (GC_WHITE). Jika bukan 0, maka Ia mengecualikan kemungkinan bahawa semua rujukan datang daripada ahlinya sendiri, yang bermaksud bahawa terdapat rujukan luaran dan bukan sampah Pada masa ini, kerana langkah (1) berkurangan pengiraan semula ahli sebanyak 1, ia perlu dipulihkan dan pengiraan semula ahli dilakukan sebanyak 1 dan ditandakan dengan warna hitam (3) Lintas senarai penimbal sekali lagi dan keluarkan nod bukan GC_WHITE daripada senarai akar Pada akhirnya, semua senarai akar adalah sampah sebenar.
Pembelajaran yang disyorkan: "
Tutorial Video PHPAtas ialah kandungan terperinci Apakah maksud gc dalam php. 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



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
