3min

Tags in dit artikel

, , , , ,

ARC, vervanger van Garbage Collection

Met de introductie van Lion slaat Apple een nieuwe richting in wat betreft het beheren van het geheugen van een Mac OS X-systeem. De oude manier, Garbage Collection is nog wel ondersteund, maar geniet niet langer de voorkeur bij Apple.

Zonder op technisch vlak al te diep in te gaan op het verhaal achter Garbage Collection en de beoogde vervanger genaamd ARC is het wel zinnig om te weten wat de nadelen van Garbage Collection zijn en wat het inhoudt.

Garbage Collection is een techniek die al in de jaren 50 werd ontwikkeld. Middels Garbage Collection wordt er op automatische wijze eens in een vooraf vastgelegde periode een scan van het geheugen gemaakt. In die scan wordt gecontroleerd op ‘overblijfselen’ van programma’s die al gesloten zijn of geen gebruik meer maken van de bits die opgeslagen zijn in het werkgeheugen van het systeem. Aangezien deze bits niet meer gebruikt kunnen en zullen worden, zijn ze nutteloos geworden en vertragen ze het systeem terwijl hier geen noodzaak toe is. De bits zullen niet gemist worden en worden daarom ook simpelweg verwijderd uit het geheugen.

Garbage Collection is van vitaal belang voor een systeem, maar kent ook een aantal nadelen. Zo heeft een programmeur weinig tot geen controle over wanneer een Gabrage Collection-scan wordt gemaakt. Garbage Collection kan in sommige gevallen fouten maken waardoor actieve programma’s zouden kunnen crashen. Daarnaast is het mogelijk dat ongebruikte processen zich gaan opstapelen in het geheugen omdat de scan niet op een continue basis actief is. Als laatste is er natuurlijk nog het nadeel dat Garbage Collection het systeem aanzienlijk kan vertragen.

De nieuwe methode die Apple in Lion introduceert heeft de naam ‘ARC’ gekregen, wat staat voor Automatic Reference Counting. Om te beginnen is ARC niet onderhevig aan de problemen die Garbage Collection met zich meebrengt. ARC wordt in programma’s zelf gebakken tijdens het compileren en hoeft daarom niet in één keer voor het hele systeem aangeroepen, zoals bij Garbage Collection wel het geval is. Dat ARC in programma’s wordt ingebouwd betekent dus in feite dat elk programma zijn eigen geheugenbeheer heeft.

ARC brengt verder als voordelen dat commando’s als Retain en Release veel sneller kunnen worden afgehandeld, namelijk 2,5 keer zo snel als voorheen. Verder worden Autorelease-pools 6 keer sneller opgeschoond en als klap op de vuurpijl zijn normale Objective-C berichten ook nog 33 procent sneller, terwijl de programmeur eigenlijk niets extra hoeft te doen om ARC werkend te krijgen, het wordt immers door de compiler zelf ingebakken.

Er is echter wel een nadeel aan ARC, ten opzichte van Garbage Collection. Als twee objecten een referentie naar elkaar hebben open staan, maar verder door het programma niet gebruikt worden, zullen ze middels ARC niet verwijderd worden. Het kan echter prima zo zijn dat deze objecten beide niet meer gebruikt worden. Dergelijke objecten zouden met Garbage Collection wél opgeruimd worden. Dit soort situaties moeten dus expliciet door de programmeur afgehandeld worden zodat de objecten alsnog verwijderd kunnen worden. Hier zijn verschillende methodes voor beschikbaar, het is aan de programmeur om de beste te kiezen voor de specifieke situatie.

Apple’s geloof in ARC lijkt groot, dat blijkt ook als we een klein onderzoekje doen in Xcode, Apple’s omgeving voor het bouwen van applicaties voor Mac OS X en iOS. In de nieuwste versies van deze ontwikkeltool is ARC standaard ingeschakeld wanneer een nieuw project wordt aangemaakt, terwijl Garbage Collection altijd optioneel is geweest en dus nooit ‘de standaard’ was.