SóProvas


ID
704338
Banca
CESPE / CEBRASPE
Órgão
MPE-PI
Ano
2012
Provas
Disciplina
Programação
Assuntos

Julgue os próximos itens, a respeito de linguagens e tecnologias de programação.

Em PHP, ao se removerem todas as referências a um objeto em particular, será executado um método destrutor. Com isso, elimina-se a possibilidade de permanecerem em memória objetos que não estejam acessíveis.

Alternativas
Comentários
  • No gabarito informa que a questão está errada, mas, de acordo com o manual PHP (http://www.php.net/manual/en/features.gc.php), é desse modo que ocorre. Eu acho que o erro está na palavra referência, pois o objeto é excluido quando não existem mais "simbolos" para ele. Alguém tem alguma explicação melhor?
  • "O destruidor ocorrerá automaticamente quando todas as referências a uma classe tiverem sido desconfiguradas ou estiverem fora de escopo." Pág. 120 do livro PHP e MySQL desenvolvimento web.  Depois de algumas discussões com colegas:
    Quando vc destrói um objeto, está sinalizando ao garbage collector para retirá-lo da memória. Acho que isso não é instantâneo e nem garantido. Por isso que está errado dizer que "... elimina-se a possibilidade de permanecerem em memória objetos que não estejam acessíveis."

    Coletor de lixo (em inglês: garbage collector, ou o acrônimo GC) é um processo usado para a automação do gerenciamento de memória. Com ele é possível recuperar uma área de memória inutilizada por um programa, o que pode evitar problemas de overflow de memória, resultando no esgotamento da memória livre para alocação.

    Esse sistema contrasta com o gerenciamento manual de memória, em que o programador deve especificar explicitamente quando e quais objetos devem ser desalocados e retornados ao sistema. Entretanto, muitos sistemas usam uma combinação das duas abordagens.

    fonte:
    http://pt.wikipedia.org/wiki/Coletor_de_lixo_%28inform%C3%A1tica%29

  • O examinador, para variar, não foi cuidadoso com o português e por isso gerou ambiguidade. Quando ele usou "Com isso", refiriu-se a remoção das referências a um objeto ou a execução do método destrutor? Se for o primeiro caso, a questão está certa. Se for o segundo caso, a questão está errada porque chamar o destrutor explicitamente não remove o objeto. O destrutor é uma espécie de callback que o GC chama quando vai reclamar o objeto. Se o programador estiver usando algum recurso não gerenciável pelo GC, ele deve manualmente desalocá-lo.
  • Só será chamado o método destrutor, se for definido na classe! - Márcio Vilanova
  • A primeira parte está certa, é exatamente o que diz a referência sobre o conceito de destrutor (http://php.net/manual/pt_BR/language.oop5.decon.php):

    "O método destrutor será chamado assim que todas as referências a um objeto particular forem removidas ou quando o objeto for explicitamente destruído ou qualquer ordem na sequência de encerramento. "

    A segunda parte, porém, restringe bastante, como se o garbage collector do PHP funcionasse de forma perfeita, o que não é o caso. A própria referência fala de alguns problemas relacionados, na seção "Cleanup problemas": http://www.php.net/manual/en/features.gc.refcounting-basics.php

  • Eu interpretei a segunda parte como errado pois imagine o seguinte caso: Objeto A referenciando objeto B, e B referenciando A, agora imagine que o restante dos objetos perdessem suas referências aos objetos A e B, concluindo, os dois estariam inacessíveis dentro da aplicação porém não seriam excluídos pois guardam referências entre eles. 

  • Acredito que a segunda parte refira-se a variáveis estáticas