Lisp/Garbage Collector

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

Il Grabage Collector è una tecnica con la quale un sistema operativo che fa un uso dinamico di allocazione dello spazio di memoria, ritorna in possesso di area usata dai programmi ma poi dismessa nella forma di nuove aree usabili dal sistema di allocazione.

Con una meccanismo di deframentazione la memoria viene ricompattata in segmenti contigui e resa disponibile in una lista lincata detta FreeList. Tale meccanismo implica anche un controllo dell'uso dell'area allocata e del suo eventuale SWAP su disco se questa risultasse utilizzata (accesso statistico ai puntatori di area e di programma) e alla compattazione in termini di contiguità dello spazio libero esistente per consentire una nuova riallocazione(deframmentazione).

In lisp il meccanismo di memoria coinvolge anche il disco sulla quale il sistema mediante la tecnica di swap scarica i blocchi di dati che non vengono impiegati da lungo tempo.

In sostanza il lisp usa scalare in basso il sistema di allocazione della memoria

  • Registri processore
  • Cache
  • Memoria
  • Disco
  • Network

Il meccanismo statistico alla base del sistema di gestione del Garbage collector Lisp è stato tema di lunghi studi poiché mediante una serie di strategie il sistema deve rendersi conto quando rilasciare la memoria che non contiene dati e/o software generato non necessario. Il Garbage Collector inoltre viene interessato pesantemente dal sistema di allocazione variabili in stack delle funzioni e del gestore di Class Management che alloca strutture e dati in forma di liste sull'Heap di systema applicativo. per valutare lo stato del vostro lisp digitate:

clisp esempio di check della memoria disponibile:

 [1]> (gc)
 588820
 [2]> (gc)
 588816

in cmucl:

 * (gc)
 ; [GC threshold exceeded with 72,696 bytes in use.  Commencing GC.]
 ; [GC completed with 19,000 bytes retained and 53,696 bytes freed.]
 ; [GC will next occur when at least 12,019,000 bytes are in use.]
 NIL
 *