最近一直在纠结perl里如何释放内存的问题。下面有几个简单的语句:
1、 perl -e 'for $i(1..10000){$hash{$i} = 0;print "$i\t$hash{$i}\n";delete $hash{$i};}for $j(10001..20000){$hash{$j}=1;print "$j\t$hash{$j}\n"}'
2、 perl -e 'for $i(1..10000){$hash{$i} = 0;print "$i\t$hash{$i}\n";undef $hash{$i};}for $j(10001..20000){$hash{$j}=1;print "$j\t$hash{$j}\n"}'
3、 perl -e 'for $i(1..10000){$a[$i]=0;print "$i\t$a[$i]";delete $a[$i];}for $j(10001..20000){$a[$j]=1;print "$j\t$a[$j]\n";}'
4、 perl -e 'for $i(1..10000){$a[$i]=0;print "$i\t$a[$i]";undef $a[$i];}for $j(10001..20000){$a[$j]=1;print "$j\t$a[$j]\n";}'
将哈希和数组里面的元素删除或初始化后,其占用的内存并不会释放。
然后,使用了 Data::Dumper :
use Data::Dumper;
%disney = ('cat'=>'Tom', 'mouse' => 'Jerry', dog=>'goofie');
delete $disney{'cat'};
$disney{'dog'} = '';
print Dumper(\%disney);
这样可以处理将全部数据读取后,释放内存