Alle programmeertalen moet omgaan met geheugenbeheer. In talen als C werk je low-level, je hebt volledige controle over geheugenbeheer. In PHP heb je eigenlijk geen controle over geheugen. Dit wordt allemaal voor je gedaan. Wanneer je een object aanmaakt, wordt een stuk geheugen voor het object gereserveerd. Automatisch wordt het object ook verwijderd door PHP. Dit mechanisme, automatische geheugenbeheer, wordt ook wel garbage collection genoemd. Wat gebeurt er precies achter de schermen?
Laatste tijd begin ik steeds meer de broncode van PHP te lezen (dit is vooral C code, PHP is in C geprogrammeerd). De type GC die PHP gebruikt wordt 'reference counting' genoemd. Wanneer je een waarde, bijvoorbeeld een object of string, aanmaakt dan registreert PHP deze in een 'tabel' met het aantal referenties naar de waarde.
PHP:
<?php
$object = new Product(); // reference count = 1
$object2 = $object; // reference count = 2
// in de functie: reference count = 3
editproduct($object);
// na de functie: reference count = 2
unset($object); // reference count = 1
unset($object2); // reference count = 0
?>
Bij reference count = 0 wordt het geheugen vrijgemaakt. Deze waarde bestaat dan niet meer. Bij objecten wordt wel eerst de destructor aangeroepen.
Na de executie van het script wordt sowieso het geheugen vrijgemaakt, ongeacht de reference count.
Tripham heeft weer een artikeltje geschreven en duikt deze keer iets dieper in de internals van PHP. Hij kijkt naar het reference-counting systeem in PHP en hoe dit er uiteindelijk voor zorgt dat waarden vanzelf vernietigd worden: In PHP heb je ei...
Tracked: Feb 18, 09:30