eve*_*box 5 perl garbage-collection
我的代码看起来像:
my %var;
my %var_new={};
while(1){
while(my ($k,$v)=each %var){
&a_sub($v);
}
%var={}; # A
map { $var{$_}=$var_new{$_}; } keys %var_new;
%var_new={}; # B
}
sub a_sub { #....} # will fill %var_new
Run Code Online (Sandbox Code Playgroud)
我的程序的内存使用率一直在上升.
似乎Perl没有在A线和B线释放内存.
我如何可以手动Perl来释放内存使用%var和%var_new?
Sta*_*amm 13
如果你使用过strict和warnings,你会看到:
参考文献中找到了偶数大小的列表
A行和B行不符合您的想法.它们实际上将对空哈希的引用的字符串化版本指定为键,并将undef作为其值.即使哈希现在几乎为空,内存也不会被标记为可重用,因为您没有使用正确的语句.
尝试在A行和B行使用以下语句之一:
undef %var; # this one
%var = (); # or this one
Run Code Online (Sandbox Code Playgroud)
IIRC,一旦Perl从操作系统中分配了内存,它就会在进程的生命周期内保留在内存中.在可能的情况下,Perl将重用已经分配的内存而不是向操作系统询问更多内容,但是您不会看到进程使用的内存减少.
| 归档时间: |
|
| 查看次数: |
9449 次 |
| 最近记录: |