[Cascavel-pm] Liberar Memoria
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Sábado Maio 13 06:56:39 PDT 2006
On 5/13/06, Solli Honorio <shonorio em gmail.com> wrote:
> Mas o fato mesmo, é que, memória alocada demora a ser desalocada em todos as
> linguagens que tem GC que eu conheço, já o que ele trabalha em ciclos e tem
> seus motivos próprios para liberar memória.
Não, não é bem assim. Isso acontece pra Java (talvez .NET também). Mas
na maioria das outras linguagens (incluindo Perl), não. Esse tipo de
GC normalmente é visto como sendo ruim.
O sistema de memória do Perl funciona mais ou menos assim: cada pedaço
de dados tem um contador de referências que é incrementado ou
decrementado de acordo com o que é feito no código. Quando ele chega a
0, a memória é devolvida ao pool de memória alocado.
Hoje em dia a situação de liberação de memória do Perl é bem mais razóavel.
Se você deixar executando o programa abaixo e observar o uso de
memória do processo vai ver ele subindo e descendo constantemente (e
não só subindo e ficando lá no alto). Contudo, isso talvez possa ser
apenas algum patch aplicado somente no ActivePerl, então alguém teria
que testar no Linux pra ver se a situação é a mesma.
my $var;
my @arr;
while (1) {
push(@{$arr[0]}, '1');
$var = 'x' x (65536 + rand(65535) );
push(@{$arr[1]}, '2');
@arr = () if scalar @{$arr[0]} > 5000
}
Ele é um pouco artificialmente complicado para parece um esquema de
alocação / desalocação mais real do que simplesmente alocar
constantemente e depois liberar.
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm