2010-02-16 12 views
11

Próbuję włączyć funkcję usuwania śmieci mojego skryptu, aby wykonać lepszą pracę. Jest mnóstwo pamięci, którą powinna móc odzyskać, ale coś ją powstrzymuje.W jaki sposób mogę uzyskać dostęp do liczby sprawdzania wartości skrótu w pliku Perla?

Użyłem trochę numeru Devel::Cycle, co pozwoliło mi podejść bliżej, ale nie jestem w pełni.

Jak mogę sprawdzić aktualną liczbę odwołań dla wartości mieszania Perla (miejsce na moje obiekty)?

Czy istnieje sposób śledzenia, kto trzyma odniesienie do obiektu? Być może coś w rodzaju Tie, które mówi, kiedy ktoś wskazuje ten obiekt, pamiętaj, kim jest ta osoba.

Odpowiedz

14

Szukasz Devel::Refcount.

+0

lub, w rdzeniu, Devel :: Peek :: SvREFCNT – ysth

+0

lub nowszych perls, Internals :: SvREFCNT – ysth

+1

Pamiętaj tylko o różnicy między 'Devel :: Refcount :: refcount' i' Devel :: Peek: : SvREFCNT'. One nie są takie same. Zobacz [moje pytanie] (http://stackoverflow.com/questions/11344518/perl-why-do-develrefcountrefcount-and-develpeeksvrefcnt-disagree/11348337) lub 'perldoc Devel :: Refcount'. –

6

Jeśli obawiasz się zwrotu nieużywanej pamięci do systemu operacyjnego, powinieneś wiedzieć, że ogólnie nie jest to możliwe. Objętość pamięci twojego programu Perl będzie proporcjonalna do największej alokacji w czasie trwania twojego programu.

Zobacz How can I make my Perl program take less memory? w Perl FAQ list, a także Mini-Tutorial: Perl's Memory Management (jak wskazał @Evan Carroll w komentarzach).

+0

Po prostu buduj z gnu malloc, jeśli to jest twój cel. Zobacz ten post perlmonks [http://www.perlmonks.org/?node_id=803515], aby uzyskać więcej informacji. –

Powiązane problemy