How does PHP garbage collection and memory internals work?
Updated May 24, 2026
Short answer
PHP manages memory using reference counting combined with cyclic garbage collection.
Deep explanation
PHP internally uses zvals to represent variables. Each zval maintains a reference counter tracking how many variables reference the same memory.
When reference counts drop to zero, memory becomes eligible for cleanup.
However, circular references create problems:
- Object A references Object B
- Object B references Object A
Reference counts never reach zero.
To solve this, PHP includes a cyclic garbage collector that periodically scans for circular references.…
Unlock with a Pro subscription to view this section.
View pricingReal-world example
No real-world example available yet.
Unlock with a Pro subscription to view this section.
Upgrade to ProCommon mistakes
No common mistakes listed yet.
Unlock with a Pro subscription to view this section.
Upgrade to ProFollow-up questions
No follow-up questions available yet.
Unlock with a Pro subscription to view this section.
Upgrade to Pro