Скрипт Perl странное поведение / Восстановление памяти

Мой скрипт делает следующее

  1. Считывает огромный текстовый файл и создает из него хеш (около 24 миллионов простых пар значений ключей. Занимает около 5 минут и потребляет 92% компьютерной памяти 4 ГБ)
  2. Запускает симуляцию, используя информацию из хэша (занимает около 30 минут)
  3. Печатает результаты в конце симуляции (в файл и стандартный вывод)

Затем он ждет более 10 минут после последнего оператора печати и завершается. Ожидание в конце не происходит каждый раз. Во время ожидания top Команда показывает то же 92% -ое использование памяти, но без использования процессора. Почему это иногда ждет после того, как это сделано? Если я нажму CtrlC, он сразу выйдет без каких-либо изменений в результате (результатах). Как мне отладить это или это ожидаемое поведение, так как хэш огромен?

РЕДАКТИРОВАТЬ

Можно ли восстановить память на лету, удалив ненужные пары ключ-значение из хеша?

1 ответ

Я предполагаю, что вы знаете функцию 'delete' (поэтому удалили ссылку на perldoc -f delete:)

Для отладки памяти вы можете использовать valgrind. Также этот совет может быть полезен: есть ли в Perl v5.10.1 утечки памяти или как интерпретировать valgrind. Рекомендуется использовать:

use Perl:: Destruct:: Level level => 1;

Другие вопросы по тегам