2010-02-16 14 views
11

Sto cercando di abilitare il garbage collector del mio script per fare un lavoro migliore. C'è un sacco di ricordi che dovrebbe essere in grado di reclamare, ma qualcosa lo sta fermando.Come posso accedere al conteggio ref di un hash Perl?

Ho usato un po 'il Devel::Cycle e questo mi ha permesso di avvicinarmi ma non ci sono abbastanza.

Come trovare il conteggio di riferimento corrente per un hash Perl (la memoria per i miei oggetti)?

C'è un modo per tenere traccia di chi è in possesso di un riferimento a un oggetto? Forse una sorta di Legame che dice, ogni volta che qualcuno punta questo oggetto, ricorda chi è quel qualcuno.

risposta

14

Si sta cercando Devel::Refcount.

+0

o, nel nucleo, Devel :: Peek :: SvREFCNT – ysth

+0

o su più recenti perls, Internals :: SvREFCNT – ysth

+1

Basta tenere a mente la differenza tra 'Devel :: Refcount :: refcount' e' Devel :: Peek: : SvREFCNT'. Non sono la stessa cosa. Vedi [la mia domanda] (http://stackoverflow.com/questions/11344518/perl-why-do-develrefcountrefcount-and-develpeeksvrefcnt-disagree/11348337) o 'perldoc Devel :: Refcount'. –

6

Se si è preoccupati di restituire memoria non utilizzata al sistema operativo, è necessario sapere che non è possibile in generale. L'impronta di memoria del tuo programma Perl sarà proporzionale alla più grande allocazione durante la vita del tuo programma.

Vedere How can I make my Perl program take less memory? nello Perl FAQ list e Mini-Tutorial: Perl's Memory Management (come indicato da @Evan Carroll nei commenti).

+0

Costruisci con gnu malloc, se questo è il tuo obiettivo. Vedi questo post perlmonks [http://www.perlmonks.org/?node_id=803515] per maggiori informazioni. –

Problemi correlati