Pengurusan memori PHP menggunakan mekanisme pengumpulan sampah, yang secara automatik mengeluarkan memori yang tidak digunakan pada masa jalan dan beroperasi berdasarkan prinsip pengiraan rujukan. Untuk mengelakkan kebocoran memori, ikuti amalan terbaik ini: musnahkan pembolehubah yang tidak diperlukan lagi, elakkan rujukan bulat dan gunakan rujukan yang lemah.
PHP menggunakan mekanisme pengumpulan sampah untuk mengurus memori, yang bermaksud ia secara automatik mengeluarkan memori yang tidak lagi digunakan pada masa jalan. Pengumpulan sampah dikendalikan oleh penterjemah PHP, jadi pembangun biasanya tidak perlu mengurus memori secara manual.
Kutipan sampah PHP adalah berdasarkan pengiraan rujukan. Setiap pembolehubah PHP mengekalkan kaunter rujukan yang menjejaki bilangan pembolehubah dan objek yang merujuknya. Apabila kaunter rujukan mencapai 0, ini bermakna pembolehubah tidak lagi digunakan, dan jurubahasa PHP secara automatik akan melepaskan memori yang diduduki oleh pembolehubah.
Untuk menunjukkan mekanisme kutipan sampah, mari kita cipta skrip PHP yang mudah:
<?php $obj = new stdClass(); $obj->name = "John Doe"; // 将对象的引用传递给另一个变量 $ref1 = $obj; // 再将对象的引用传递给另一个变量 $ref2 = $obj; // 销毁第一个引用 unset($ref1); // PHP 解释器会自动释放对象占用的内存,因为现在只剩下一个引用计数
Walaupun mekanisme kutipan sampah secara automatik melepaskan memori, masih terdapat kemungkinan kebocoran memori. Kebocoran memori ialah apabila rujukan kepada pembolehubah atau objek yang tidak lagi digunakan dikekalkan, menghalang penterjemah PHP daripada melepaskan memori.
Untuk mengelakkan kebocoran memori, ikuti amalan terbaik ini:
unset()
untuk mengeluarkan rujukan kepada pembolehubah. unset()
函数释放对变量的引用。让我们使用前面的脚本创建一个实战案例来演示垃圾回收机制:
<?php class MyClass { public $data; public function __destruct() { echo "释放 MyClass 实例\n"; } } $obj = new MyClass(); $obj->data = "一些数据"; // 将对象的引用传递给另一个变量 $ref = $obj; // 销毁第一个引用 unset($obj); // PHP 解释器会自动释放对象占用的内存,因为现在只剩下一个引用计数 echo "脚本结束\n";
运行此脚本将打印以下输出:
释放 MyClass 实例 脚本结束
这表明 PHP 解释器在脚本结束时自动释放了 MyClass
Elakkan rujukan bulat: Dua atau lebih objek merujuk antara satu sama lain, menyebabkan kaunter rujukan gagal kembali kepada sifar.
MyClass
dikeluarkan secara automatik. 🎜Atas ialah kandungan terperinci Mekanisme pengumpulan sampah PHP dan pengurusan memori. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!