|P is for Practical|
Memory leaks and reference counting within Perl.by DigitalKitty (Parson)
|on Jan 05, 2005 at 22:38 UTC||Need Help??|
DigitalKitty has asked for the
wisdom of the Perl Monks concerning the following question:
I'm requesting a little clarification with the concept of a memory leak and reference counting. As I understand it, Perl does not use either 'mark and sweep' or anything resembling the JVM 'garbage collector'. Rather, it increments / decrements reference counts in order to ascertain when memory should be re-claimed. See below:
When this block ends, the %monks hash is no longer in scope so the memory it occupied is re-claimed. However, since $hash_ref was not declared inside the block and it has been initialized with the address of the %monks hash, it remains in scope (thereby creating a memory leak)?
One may still perform a variety of operations on the hash reference (and consequently the hash itself). Is this correct? To reduce the reference count to 'zero' (eliminating any potential memory leak that is present), I could simply set the $hash_ref variable to 'undef'(?)