Perl脚本奇怪的行为/回收内存

Jea*_*ean 7 linux perl hash swap operating-system

我的脚本执行以下操作

  1. 读取一个巨大的文本文件并从中创建一个哈希值.(大约2400万个简单的键值对.大约需要5分钟,占用4Gb计算机内存的92%)
  2. 使用哈希信息运行模拟.(大约需要30分钟)
  3. 在模拟结束时打印结果(到文件和标准输出)

然后它在最后一个打印语句后等待10分钟以上并退出.最后的等待不会每次都发生.在wait top命令期间显示相同的92%内存使用量但没有cpu使用率.为什么它有时会在完成后等待?如果我击中CtrlC,它立即退出而结果没有任何变化(结果).我如何调试这个或者它是预期的行为,因为哈希是巨大的?

编辑

通过从哈希中删除不需要的键值对,可以动态回收一些内存吗?

sti*_*mur 1

我假设您知道“删除”功能(因此删除了对 perldoc -f delete 的引用:)

对于内存调试,您可以使用 valgrind 另外,此提示可能会有所帮助:Does Perl v5.10.1 has memoryleaks or how toterpret valgrind 它建议使用:

使用 Perl::Destruct::Level level => 1;