Coletor de lixo PHP

Boa tarde Pessoal.

Estou estudando PHP e me deparei com a seguinte duvida.
No java existe um recurso chamado garbage collector, que limpa a memoria automaticamente se você não está usando mais aquela variável ou objeto.

Gostaria de saber se existe isso no php? Como a memoria é gerenciada.
Se eu fizer um foreach em um grande array de Objetos e depois parar de usar, eles ainda ficam na memoria ?

php funciona um pouco diferente, todo o uso de memoria (variáveis, conexões com banco de dados, arquivos abertos caso vc não os feche manualmente ok?) é liberado ao terminar o script, mas… ele possui sim gc…

http://php.net/manual/pt_BR/features.gc.php

Caso vc precise otimizar o consumo, existe a função unset que “destroi” as variáveis ou posições em arrays, por exemplo:

$v = 10;
$a = ['um'=>1,'dois'=>2,'tres'=>3];
unset($v);
# aqui $v ja não está mais na memoria...
unset($a['dois']);
# aqui a posicao com a chave "dois" não existe mais no array...

Agora frisando, gc tanto em java quanto em php não lhe dão garantia de que vão trabalhar quando vc chamar… ele trabalha quando ele quer, bons estudos!

Entendi, então sempre que um script for executado esses dados em memoria são liberados.
Obrigado.

Isso pq o php é executado a cada requisição que vc faz para a pagina, logo tudo é “reiniciado” vamos dizer assim (tem outras coisas por trás, como subprocessos do servidor web, mas não vem ao caso aqui)…

Ai acaba entrando na questão de linguagens compiladas vs interpretadas, outro assunto longo… mas pra vc ter uma noção, imagine uma página web como uma receita de bolo a ser seguida, cada vez o php vai lá, executa toda a receita linha por linha e quando chegar no final o bolo ta pronto, a pia, mesa e utensilios estão limpos pegou? :joy:

3 curtidas