perl中的内存管理
我面临一个奇怪的问题,即在perl中处理内存。 我在一个perl应用程序中工作,它使用相当大的散列结构。我正在为对象分配has ref。但最后,似乎即使我取消分配对象和散列,内存使用量仍然保持不变 以下是问题的示例:perl中的内存管理,perl,memory-management,perl-module,perl-data-structures,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); .....
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
我想我犯了一些非常基本的错误。有人能建议吗?你真的不能将内存返回操作系统。Perl通常会保留它以便以后重新分配,尽管它偶尔会进行垃圾收集 看 及
一般来说,Perl内存管理做您需要做的事情,您不必担心。例如,将一大块内存分配给程序的其余部分有什么害处?可能没有。如果您的操作系统有内存不足的危险,Perl将释放它
假设您有一些特殊情况,比如脚本经常在后台运行,但偶尔需要执行内存密集型任务。您可以通过将其分为两个脚本来解决这个问题:background.pl和memory-intensive-task.pl。需要时,background.pl将执行memory-intensive-task.pl。当该程序完成并退出时,内存将被释放。对象的情况下会发生什么?当对象超出范围时,将调用析构函数。这还会保留对象中定义的词汇变量的内存吗?@Kallol,这种情况与超出范围的普通变量没有什么不同,只是您可以对对象进行一些自定义清理。内存将是免费的,Perl可以将其用于其他用途,但Perl仍然不会将其返回给系统。