LINUX.ORG.RU

Народ матерюсь уже третий день, когда же эта система мусора в перл работает?


0

0

Вот, реализую двух связаныый списко на перл, все ок.
Написал функцию, которая удаляет отдельный элемент и которая удаляет
целиком весь список. Вроде работает. На тест загрузил огромный файл.
и начал топом (top) следить как жрет память: после того как весь список удалился мой скрипт всеравно заберает памяти как и до удаления :((((( Когда же работает эта система зборки мусора? Почему не отдается назад операционке использованая памать? На всякий случай даю скрипт.
Может кто реализовал список тогда плиз поделитесь :)

#!/usr/bin/perl -w
use strict;
my $start = create_list_from_file('a.txt');
print "List created", ', first symbol: "', $start->{SYMBOL}, '"';
<STDIN>;
delete_all_list($start);
print "List deleted", ', first symbol: "', $start->{SYMBOL}, '"';
<STDIN>;

##==
sub create_node {
my $symbol = shift;
my $temp = {
SYMBOL => $symbol,
};
return $temp;
}

sub create_list_from_file {
my($pre_node, $first_node, $new_node, $file_name, $old_eos);
$file_name = shift;
open(IN_FILE, "< $file_name");
$old_eos = $/;
$/ = "";
$pre_node = create_node();
$first_node = $pre_node;
while(<IN_FILE>) {
for(split(//)) {
$new_node = create_node($_);
$new_node->{PRE} = $pre_node;
$pre_node->{POST} = $new_node;
$pre_node = $new_node;
}
}
$pre_node->{POST} = $first_node->{POST};
close IN_FILE;
$/ = $old_eos;
return $first_node->{POST};
}

sub delete_node {
my $deleting_node = shift;
my $post_node = $deleting_node->{POST};
$deleting_node->{PRE}->{POST} = $deleting_node->{POST};
$deleting_node->{POST}->{PRE} = $deleting_node->{PRE};
$deleting_node->{POST} = undef;
$deleting_node->{PRE} = undef;
return $post_node;
}

sub delete_all_list {
my($node) = $_[0];
my $deleted;
while($node) {
$node = delete_node($node);
}
$_[0] = undef;
}


Единожды зажрав память, программы ее не отдают до завершения. Сама программа может повторно использовать выделенную память... Опять же, она виртуальная, имеет смысл смотреть на RSS.

BaT ★★★★★
()

В перле работает сборщик мусора и он освобождает память, но эту память может усать только этаже программа, система и другие программы до завершения твоего скрипта, увы и ах нет.

anonymous
()

Но, народ, в cookbookсказано ведь что перл отдает использованую память операционой системе, но система должна ╨то поддерживать. Неужели Linux на ╨то не способен? И что твакое RSS ?

stanv
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.