Cada objeto utiliza recursos do sistema, como memória. Preci...

Próximas questões
Com base no mesmo assunto
Q4282202 Programação
Cada objeto utiliza recursos do sistema, como memória. Precisamos de uma maneira disciplinada de retornar os recursos ao sistema quando eles não são mais necessários; caso contrário, podem ocorrer “vazamentos de recursos”, que evitariam que eles fossem reutilizados pelo próprio programa ou possivelmente por outros programas.
Sobre coleta de lixo em Java, analise os itens a seguir: 
I. Vazamentos de recursos, além de vazamentos de memória, também podem ocorrer. Por exemplo, um aplicativo pode abrir um arquivo no disco para modificar seu conteúdo — se o aplicativo não fechar o arquivo, ele deve terminar antes que qualquer outro aplicativo possa usar o arquivo.
Il. É recomendado utilizar o método finalize, para garantir a liberação dos recursos.
IIl. Objetos AutoClosable reduzem a probabilidade de vazamentos de recursos ao usá-los com a instrução try com recursos.

Conforme Deitel (2017), está correto o que se afirma em: 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: D

Fundamento decisivo: A documentação de Java não garante a execução oportuna de finalize(), contrariando a recomendação expressa em II. Interpretados o exemplo de I como situação particular e AutoClosable como AutoCloseable, o conjunto válido é I e III, correspondente à alternativa D.

Tema central: Liberação de recursos em Java
Análise das alternativas
A
Errada
Ao considerar todos os itens falsos, exclui indevidamente I e III. O núcleo de I está correto porque recursos externos podem permanecer sem liberação, observada a ressalva sobre o exemplo do arquivo; III está correto porque try-with-resources chama automaticamente close() nos recursos gerenciados.
B
Errada
Inclui II, embora finalize() não garanta execução nem liberação oportuna dos recursos, e exclui III, cujo mecanismo de fechamento automático por try-with-resources está correto.
C
Errada
Inclui II, atribuindo a finalize() uma garantia que ele não oferece, e exclui I, aceito pelo reconhecimento dos vazamentos de recursos externos, sem universalizar o exemplo de impedimento de acesso ao arquivo.
D
Certa
A alternativa D reúne os dois fundamentos válidos: podem ocorrer vazamentos de recursos externos, além dos de memória, e o gerenciamento por try-with-resources reduz esse risco ao fechar os recursos declarados tanto na conclusão normal quanto na saída por exceção. Há duas ressalvas de leitura: o exemplo de I não pode ser tomado como regra universal de que todo arquivo aberto impede qualquer outro acesso até o término do aplicativo; e AutoClosable, em III, deve ser entendido como erro material de grafia de AutoCloseable. Já a recomendação de finalize() como garantia não se sustenta, pois sua execução pode demorar indefinidamente ou nem ocorrer.
E
Errada
A inclusão de II impede considerar todos os itens corretos: finalize() pode demorar indefinidamente ou não ser executado, portanto não serve como garantia de liberação dos recursos.
Pegadinha da questão
Confundir recuperação de memória com liberação de recursos externos e supor que o nome finalize() indica uma garantia de fechamento. O fechamento automático decorre do gerenciamento por try-with-resources, não da simples implementação de AutoCloseable.
Dica para questões semelhantes
  • Separe recuperação de memória de liberação de recursos externos: uma não substitui a outra.
  • Rejeite garantias de liberação baseadas em finalize(); o problema é a ausência de garantia, não a impossibilidade absoluta de execução.
  • Ao identificar AutoCloseable, verifique se o recurso está declarado no try-with-resources: é esse gerenciamento que chama close() automaticamente.
  • Diferencie redução de risco de eliminação de risco: try-with-resources chama close(), mas a operação de fechamento pode falhar.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo