PHP menggunakan pengumpul sampah generasi untuk menuntut semula memori secara automatik melalui pengiraan rujukan dan tanda sapuan. PHP menjejaki bilangan rujukan yang menunjuk kepada pembolehubah, dan apabila bilangan rujukan mencapai 0, pembolehubah itu dianggap tidak lagi digunakan. PHP menandakan semua objek yang boleh dicapai bermula dari nod akar, dan objek yang tidak bertanda akan dikosongkan untuk mengosongkan memori. Teknik pengurusan memori manual termasuk memusnahkan pembolehubah secara eksplisit menggunakan unset(), mengelakkan kitaran rujukan dan menggunakan rujukan yang lemah.
Mekanisme pengumpulan sampah fungsi PHP
Pengenalan
PHP menggunakan pengumpul sampah generasi, yang secara automatik menuntut semula memori yang tidak lagi digunakan dengan menggunakan teknik mengira dan mengosongkan rujukan.
Pengiraan Rujukan
Apabila pembolehubah dicipta, PHP memperuntukkan pembilang rujukan yang merekodkan bilangan pembolehubah yang menunjuk kepadanya. Apabila pembolehubah keluar dari skop, kiraan rujukannya dikurangkan. Apabila kiraan rujukan mencapai 0, pembolehubah dianggap tidak lagi digunakan.
Mark Sweep
Semasa kitaran pengumpulan sampah, PHP akan menandakan semua objek yang boleh dicapai bermula dari nod akar (seperti pembolehubah global dan pembolehubah yang masih digunakan). Selepas penandaan selesai, PHP akan mengosongkan objek yang tidak ditanda dan melepaskan memori yang mereka duduki.
Pengurusan Memori Manual
Walaupun PHP mengumpul sampah secara automatik, ia juga berguna untuk mengetahui beberapa teknik pengurusan memori manual. Berikut ialah beberapa cara untuk melakukannya:
unset()
untuk memusnahkan pembolehubah yang tidak lagi diperlukan secara eksplisit. unset()
显式销毁不再需要的变量。WeakMap
存储轻量级数据,这些数据不会阻止其关联变量被回收。实战案例
以下代码展示了如何使用 unset()
Elakkan membuat rujukan bulat di mana pembolehubah rujukan menghala kepada diri mereka sendiri, yang boleh menyebabkan kebocoran ingatan. Rujukan lemah:
GunakanWeakMap
untuk menyimpan data ringan yang tidak menghalang pembolehubah yang berkaitan daripada dikitar semula. Kes praktikal🎜🎜🎜Kod berikut menunjukkan cara menggunakan unset()
untuk memusnahkan pembolehubah yang tidak lagi diperlukan secara manual: 🎜<?php function foo() { $a = 'foo'; // ... 使用 $a ... unset($a); // 显式销毁 $a } // 调用 foo() 释放 $a 占用的内存 foo();
Atas ialah kandungan terperinci Mekanisme pengumpulan sampah fungsi PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!