4.2. Automatická správa paměti

Automatická správa paměti je služba, která je součástí jazyka nebo jeho rozšířením, a která automaticky regeneruje paměť, kterou by program již znovu nevyužil. Automatická správa programu (zvaná také garbage collector, „sběrač odpadu“) tuto činnost provádí opakovaným použitím těch bloků, které již nejsou živé, tj. program s nimi již dále nepracuje. Pojem živosti bloku se však obvykle nechápe zcela ideálně, většinou se pracuje konzervativněji s bloky, které jsou nedosažitelné z jisté sady programových proměnných (tzv. kořenů dosažitelnosti - např. globální a lokální proměnné, registry apod.) a na které tedy není možné se dostat pomocí ukazatelů. Je-li například blok paměti sice dosažitelný, ale program jej již dále nepoužívá, je tato situace obecně těžko odhalitelná, i když v některých případech může pomoci překladač použitím mnohem přesnějších metod analýzy toku dat.


Poznámka:
Poznámka:
Častým obratem v některých jazycích s automatickou správou paměti je „vynulování“ odkazu na objekt po jeho posledním použití. Je-li tento odkaz jediným odkazem na objekt, stane se objekt nedostupným a při nejbližší příležitosti je možné jím obsazenou paměť uvolnit. Například v následujícím úseku programu je po uzavření souboru přepsán odkaz v proměnné inp hodnotou null, což umožní uvolnění paměti obsazené přečteným souborem:
   ...
   FileReader inp = new FileReader("vstup.txt");
   ...
   inp.close();
   inp = null;
   ...

Výhody automatické správy paměti jsou následující:

Tento přístup má však i své nevýhody:

Většina moderních jazyků používá zejména automatické správy paměti: BASIC, C#, Dylan, Erlang, Haskell, Java, JavaScript, Lisp, ML, Modula-3, Perl, PHP, Prolog, Python, Ruby, Scheme, Smalltalk, atd.