Kal*_*lol 5 perl memory-management perl-module perl-data-structures
我在perl中遇到了处理内存的奇怪问题.我正在使用一个使用相当大的哈希结构的perl应用程序.我正在为来回对象指定has ref.但最后似乎即使我要释放对象和哈希值,内存使用量也保持不变.
以下是问题的示例:
my $hash = {};
.............
this ds gets populated with a lot of data ...
.......
{
my $obj = new Class("data"=>$hash);
.......
.......
......
}
#even undefing the $hash
undef $hash;
# I can expect some improvement in Memory Utilization, but its not happening
Run Code Online (Sandbox Code Playgroud)
我想我正在做一些非常基本的错误.任何人都可以建议吗?
Jos*_*len 12
你无法真正将内存返回给操作系统.Perl通常会保留它以便稍后重新分配它,尽管偶尔会有垃圾收集.
见http://learn.perl.org/faq/perlfaq3.html#How-can-I-free-an-array-or-hash-so-my-program-shrinks-
和
http://clokwork.net/2012/02/12/memory-management-in-perl/
一般来说,Perl 内存管理会做你需要做的事情,你不必担心。例如,为程序的其余部分分配大量内存有什么危害?可能没有。如果你的操作系统有内存不足的危险,Perl将释放它。
假设您有一些特殊情况,例如一个在后台不断运行的脚本,但偶尔需要执行内存密集型任务。您可以通过将其分成两个脚本来解决这个问题:background.pl 和内存密集型任务.pl。当需要时,background.pl 会执行内存密集型任务.pl。当该程序完成并退出时,内存将被释放。