Questão de Programação — Java — Quadrix 2025
- Código
- qg595094
- Banca
- Quadrix
- Órgão
- CFO
- Ano
- 2025
- Nível
- Médio
- Cargo
- Técnico em Tecnologia da Informação
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: C — CERTO. A afirmação está correta: a administração de memória em Java é automatizada pelo garbage collector (coletor de lixo), que identifica e libera a memória ocupada por objetos que não são mais referenciados, reduzindo a ocorrência de vazamentos de memória. Esse é um dos pilares do design da linguagem, que difere de linguagens como C e C++, onde a liberação de memória é manual.
O garbage collection (GC) é um mecanismo da JVM (Java Virtual Machine) que gerencia automaticamente o ciclo de vida dos objetos no heap. Quando um objeto não é mais alcançável a partir de qualquer referência ativa no programa, ele se torna elegível para coleta. O GC então libera a memória ocupada por esse objeto, tornando-a disponível para novas alocações. Esse processo é fundamental para evitar memory leaks (vazamentos de memória), embora não os elimine completamente — vazamentos ainda podem ocorrer se referências desnecessárias forem mantidas por engano.
A filosofia de design do Java gira em torno da suposição de um coletor de lixo. Ao contrário de linguagens como C++ e Rust, o gerenciamento determinístico de memória através de uma palavra-chave delete (como no C++) não é possível. Mesmo introduzir tal recurso não seria viável, devido à falta de propriedade (ownership), exceto pelo uso de sun.misc.Unsafe ou através da java.lang.foreign para alocar/desalocar memória fora do heap Java. Como o Java utiliza principalmente a alocação baseada em heap, os objetos são armazenados como referências, e a exclusão manual resultaria em ponteiros pendentes.
Na prática, o programador Java não precisa (e não deve) liberar memória explicitamente. Basta que ele deixe de referenciar um objeto — por exemplo, atribuindo null a uma variável ou saindo do escopo — e o GC cuidará da liberação em algum momento futuro. Existem vários coletores de lixo disponíveis na JVM, como Serial, Parallel, CMS, G1, ZGC, entre outros, cada um com características específicas de throughput, pausa e uso de memória.
A pegadinha que a banca poderia explorar é a palavra "evitando-se vazamentos de memória". O GC reduz a ocorrência de vazamentos, mas não os elimina por completo. Se o programador mantiver referências desnecessárias (por exemplo, em coleções estáticas), o objeto nunca será coletado, caracterizando um vazamento. No entanto, a afirmação usa "evitando-se", que é uma expressão razoável e não absoluta, portanto o item está correto.
Guarde a distinção: Java gerencia memória automaticamente via GC, enquanto C/C++ exigem gerenciamento manual. É exatamente essa fronteira que separa o certo do errado em questões sobre este tema.
A afirmação descreve com precisão o funcionamento do garbage collection em Java. O GC é um componente da JVM que identifica objetos sem referências ativas e libera a memória por eles ocupada, automatizando a administração de memória e reduzindo o risco de vazamentos. Isso está alinhado com a filosofia de design do Java, que assume a presença de um coletor de lixo, ao contrário de linguagens como C++, onde a liberação é manual.
A alternativa E afirma que o item está errado, mas o item está correto. Não há erro conceitual na afirmação: o GC realmente automatiza a administração de memória, identifica objetos não referenciados e libera a memória, evitando (na prática, reduzindo) vazamentos. Portanto, a alternativa E é falsa.
Gabarito: letra C
Link permanente: /questoes/qg595094