[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