2010-02-16 12 views
11

Estoy intentando habilitar el recolector de elementos no utilizados de mi script para hacer un mejor trabajo. Hay una tonelada de memoria que debería ser capaz de reclamar, pero algo la está deteniendo.¿Cómo puedo acceder al recuento de referencias de un hash Perl?

He usado Devel::Cycle un poco y eso me ha permitido acercarme pero no estoy del todo allí.

¿Cómo averiguo el conteo de referencia actual para un hash Perl (el almacenamiento para mis objetos)?

¿Hay alguna manera de rastrear quién tiene una referencia a un objeto? Tal vez una especie de Lazo que dice: cada vez que alguien señala este objeto, recuerda quién es esa persona.

Respuesta

14

Está buscando Devel::Refcount.

+0

o, en el núcleo, Devel :: Peek :: SvREFCNT – ysth

+0

o en las versiones más nuevas, Internals :: SvREFCNT – ysth

+1

Solo tenga en cuenta la diferencia entre 'Devel :: Refcount :: refcount' y' Devel :: Peek: : SvREFCNT'. Ellos no son los mismos. Ver [mi pregunta] (http://stackoverflow.com/questions/11344518/perl-why-do-develrefcountrefcount-and-develpeeksvrefcnt-disagree/11348337) o 'perldoc Devel :: Refcount'. –

6

Si le preocupa devolver la memoria no utilizada al sistema operativo, debe saber que no es posible en general. La huella de memoria de su programa Perl será proporcional a la asignación más grande durante la vida útil de su programa.

Ver How can I make my Perl program take less memory? en el , así como Mini-Tutorial: Perl's Memory Management (según lo señalado por @Evan Carroll en los comentarios).

+0

Acaba de compilar con gnu malloc, si este es su objetivo. Vea esta publicación de Perlmonks [http://www.perlmonks.org/?node_id=803515] para más información. –

Cuestiones relacionadas