perl中的内存管理

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/


dan*_*111 4

一般来说,Perl 内存管理会做你需要做的事情,你不必担心。例如,为程序的其余部分分配大量内存有什么危害?可能没有。如果你的操作系统有内存不足的危险,Perl将释放它。

假设您有一些特殊情况,例如一个在后台不断运行的脚本,但偶尔需要执行内存密集型任务。您可以通过将其分成两个脚本来解决这个问题:background.pl 和内存密集型任务.pl。当需要时,background.pl 会执行内存密集型任务.pl。当该程序完成并退出时,内存将被释放。