A implementação de linguagens de programação em geral depar...

Próximas questões
Com base no mesmo assunto
Q914389 Sistemas Operacionais
A implementação de linguagens de programação em geral depara-se com a questão do gerenciamento de memória. Nesse contexto, assinale a opção que melhor descreve o que é conhecido como “memory leak”.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: Alternativa B

Para entender a questão e por que a alternativa B está correta, vamos começar discorrendo sobre o conceito de memory leak (vazamento de memória).

Em termos de gerenciamento de memória dentro de sistemas operacionais e linguagens de programação, é essencial que a memória alocada dinamicamente seja eventualmente liberada quando não for mais necessária. Isso garante que o sistema não esgote os recursos de memória disponíveis, o que poderia levar a uma degradação de desempenho ou até mesmo a falhas no sistema.

O vazamento de memória ocorre quando um programa aloca memória para armazenar dados temporários, mas não libera essa memória corretamente após o uso. Isso resulta em segmentos de memória que ficam “presos” e não podem ser reutilizados pelo sistema, mesmo que não sejam mais necessários pelo programa. Esses segmentos ocupam espaço na memória, reduzindo a quantidade disponível para outras operações.

A alternativa correta é a B:
A impossibilidade de liberar a memória ocupada por objetos que se tornaram inalcançáveis.

Essa descrição se refere exatamente ao problema do vazamento de memória. Quando objetos se tornam inalcançáveis, significa que não há mais referências a eles no código, mas a memória que eles ocupavam não foi liberada. Isso pode ocorrer por diversos motivos, como erros de programação onde o desenvolvedor esquece de incluir a lógica para liberar a memória, ou em sistemas que não têm coleta de lixo (garbage collection) eficiente.

Vamos analisar brevemente por que as outras alternativas estão incorretas:

A - A liberação de trechos de memória ainda em uso por um ou mais objetos.
Essa opção descreve um problema diferente, conhecido como double free ou dangling pointer, onde a memória é liberada enquanto ainda está em uso, o que pode causar corrupção de dados ou falhas no programa.

C - A incapacidade de recuperar trechos de memória virtualizados.
Essa alternativa não está relacionada diretamente ao conceito de vazamento de memória, mas sim a problemas com a gestão da memória virtual.

D - A invasão de trechos de memória por objetos não autorizados.
Isso descreve um problema de segurança conhecido como buffer overflow ou memory corruption, onde um objeto acessa áreas de memória que não lhe pertencem.

E - O compartilhamento indesejado de trechos de memória por dois ou mais objetos.
Essa situação descreve problemas de race condition ou memory aliasing, onde dois ou mais objetos acabam utilizando a mesma área de memória de forma não segura.

Espero que esta explicação tenha ajudado a esclarecer o conceito de vazamento de memória e por que a alternativa B é a correta. Qualquer dúvida, estou à disposição para ajudar!

Clique para visualizar este gabarito

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

Comentários

Veja os comentários dos nossos alunos

Memory leak, ou vazamento de memória, é um fenômeno que ocorre em sistemas computacionais quando uma porção de memória, alocada para uma determinada operação, não é liberada quando não é mais necessária.

 

https://pt.wikipedia.org/wiki/Vazamento_de_memória

Gabarito B

Memory Leak, ou Vazamento de Memória, é um problema comum entre desenvolvedores de Software, que geralmente ocorre quando um sistema aloca espaços de memória da máquina para executar suas operações, porém, ao finalizar a execução destas operações, este sistema não consegue liberar toda a memória alocada. Este espaço de memória alocado, por não ter sido liberado, não pode mais ser utilizado pelo sistema operacional até que o software que alocou esta memória seja finalizado. Em casos extremos, problemas de vazamento de memória podem consumir toda a memória disponivel no sistema operacional, causando o travamento da máquina na qual o software está sendo executado.

As linguagens de programação mais suscetíveis a erros como este são as que não implementam um recurso conhecido como Garbage Collector, que é responsável pelo gerenciamento automático de memória e liberação objetos que estão alocados em memória e não estão mais sendo utilizados.

Como corrigir este problema?

 

Por ser um tipo de erro silencioso, já que nenhuma falha é exibida até que a memória do sistema operacional seja toda consumida, o desenvolvedor deve ter um cuidado adicional com este tipo de erro.

Cada linguagem de programação possui ferramentas específicas para auxiliar o desenvolvedor a identificar e resolver problemas deste tipo. Por exemplo:

Delphi: FastMM, MadExcept ou EurekaLog;

Java: Java implementa o recurso de Garbage Collector, porém também existem ferramentas como o Plumbr para ajudar na detecção e correção de memory leaks.

C#: C# também implementar o Garbage Collector e possui ferramentas como MemProfiler ou DotTrace.

 

 

 

"Retroceder Nunca Render-se Jamais !"
Força e Fé !
Fortuna Audaces Sequitur !

Irei comentar a alternativa correta:

Memory leak é a impossibilidade de liberar a memória ocupada por objetos que se tornaram inalcançáveis.

Como assim inalcançáveis? Simples, pode ser que por algum esquecimento na aplicação, não tenha nenhum ponteiro apontando para uma determinada área da memória.

Referência: PDF do estratégia.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo