Questão de Programação — Java — Quadrix 2025
- Código
- qg595093
- Banca
- Quadrix
- Órgão
- CFO
- Ano
- 2025
- Nível
- Médio
- Cargo
- Técnico em Tecnologia da Informação
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: ✅ CERTO. A afirmação está correta: o PHP não possui um sistema de garbage collection tão sofisticado quanto o de Java, e a administração de memória em PHP depende mais da boa prática do programador para liberar explicitamente objetos e recursos. Essa é uma distinção clássica entre as duas linguagens, amplamente reconhecida na literatura e em provas de TI.
O garbage collector (coletor de lixo) é o mecanismo que gerencia automaticamente a memória, liberando objetos que não são mais referenciados pelo programa. Em Java, o garbage collector é uma parte central da JVM (Java Virtual Machine), com algoritmos sofisticados (como G1, ZGC, Shenandoah) que rodam em segundo plano, de forma automática e otimizada, minimizando a necessidade de intervenção do programador. O programador Java raramente precisa se preocupar com a liberação explícita de memória — na verdade, chamar System.gc() é desencorajado, pois o coletor já decide o melhor momento para agir.
No PHP, o gerenciamento de memória também é automático em grande parte, mas o coletor de lixo é mais simples e menos previsível. O PHP usa um mecanismo de contagem de referências (reference counting) para gerenciar a memória, complementado por um coletor de ciclos (cycle collector) que roda periodicamente. Isso significa que, em muitos casos, o programador precisa tomar cuidados adicionais, como liberar explicitamente recursos (fechar conexões de banco de dados, arquivos, etc.) e evitar referências circulares, para garantir que a memória seja liberada de forma eficiente. Em aplicações PHP de longa duração (como workers de filas), a falta de liberação explícita pode levar a vazamentos de memória (memory leaks).
A diferença fundamental está na filosofia das linguagens: Java foi projetada com foco em aplicações empresariais de grande porte, onde o gerenciamento automático de memória é essencial para a produtividade e a segurança; PHP, por sua vez, foi criada para desenvolvimento web rápido, onde o ciclo de vida de cada requisição é curto e a memória é liberada ao final de cada script, o que reduz a necessidade de um coletor sofisticado. Por isso, a afirmação da questão reflete corretamente essa realidade.
A pegadinha que a banca poderia explorar é inverter a sofisticação: afirmar que o PHP tem um garbage collector mais sofisticado que o Java, ou que o programador Java precisa liberar memória explicitamente. Mas a questão está alinhada com o conhecimento técnico consolidado, então a resposta é Certo.
Critério | Java | PHP |
|---|---|---|
Sofisticação do garbage collector | Alta (G1, ZGC, Shenandoah) | Baixa (contagem de referências + coletor de ciclos) |
Dependência da ação do programador | Baixa (liberação automática; | Alta (liberação explícita de recursos, evitar referências circulares) |
Filosofia de gerenciamento | Automático e otimizado para aplicações empresariais | Ciclo de vida curto por requisição; menos previsível em processos longos |
A afirmação está correta. O PHP possui um garbage collector, mas ele é menos sofisticado que o da JVM. Em PHP, a liberação de memória depende mais de boas práticas do programador, como fechar recursos explicitamente (conexões, arquivos) e evitar referências circulares, enquanto em Java o coletor de lixo é mais automático e robusto. Essa é uma distinção amplamente aceita na comunidade de desenvolvimento.
Gabarito: ✅ CERTO
Link permanente: /questoes/qg595093