Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

  #Este é um post fechado

Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!



Artigo Java Magazine 75 - Gerenciando Memória e Recursos

Conheça as melhores práticas – e as piores – para administrar recursos, prevenir leaks e outros erros.






BRK##: 0 - 0
Gerenciando Memória e Recursos
Você acha que devido ao GC, não precisa se preocupar com alocação de memória e outros recursos? Achou errado
Conheça as melhores práticas – e as piores – para administrar recursos, prevenir leaks e outros erros

De que se trata o artigo:
Examinamos os problemas de gerenciamento de memória e de recursos em Java, investigando várias “receitas” de bugs como leaks de memória ou retenção indevida de recursos, e aprendendo a evitar estes problemas.

Para que serve:
O gerenciamento correto e eficiente de memória e recursos é uma necessidade de qualquer aplicação, especialmente aquelas destinadas a executar continuamente durante muito tempo, ou aquelas que devem enfrentar picos de atividade intensa e apresentar boa escalabilidade. Leaks de memória podem resultar em problemas que vão desde mau desempenho até crashes da VM com OutOfMemoryError. Ineficiência no gerenciamento de recursos podem causar problemas difíceis de diagnosticar, como a observação que uma aplicação não consegue escalar acima de uma taxa modesta de transações simultâneas mesmo com o servidor aparentemente pouco carregado.

Em que situação o tema é útil:
Bugs relacionados à alocação de memória e manipulação de recursos são inaceitáveis em sistemas de “missão crítica”, mas devem ser evitados em qualquer tipo de aplicação. Uma das dificuldades de combater tais bugs, especialmente os de gerenciamento de memória, é que devido ao recurso de GC do Java, muitos desenvolvedores dão pouca atenção ao problema, achando que a JVM irá magicamente dar conta do recado. Infelizmente não é tão simples assim; neste artigo, exploramos alguns anti-patterns que com freqüência resultam em leaks de memória e outros problemas.

Na evolução das linguagens de programação, grandes avanços como a técnica de GC (Garbage Collection) são geralmente interpretados como “o fim de todos os seus problemas”, pelo menos de uma ampla categoria como os problemas relacionados ao gerenciamento de memória. Mas no longo prazo essa esperança sempre acaba em decepção, pelo menos parcial, pois nem todos os problemas atacados pela nova tecnologia terminam totalmente. Vamos fazer uma rápida análise dos efeitos da GC, em comparação com linguagens com gerenciamento manual de memória como C/C++:
•    Corrupção do heap: totalmente eliminado (devido parcialmente à GC, e parcialmente a outras características de linguagens gerenciadas);
•    Leaks de memória: mais raros, mas não eliminados;
•    Consumo de memória além do necessário: pouco melhorado. A melhoria vem da programação mais simples, especialmente para objetos com ciclo de vida complexo (referenciados de muitos lugares, alocados e liberados em lugares e momentos distantes). A GC permite a cada parte do código liberar referências para objetos utilizados tão logo estes deixem de ser localmente úteis, e quando não houver mais nenhuma referência, a VM detecta isso e remove o objeto. Já em programas com memória manual, quando é complicado determinar quando um objeto pode ser deletado, isso quase sempre resulta numa retenção muito conservadora do objeto, que só é deletado muito depois do último momento em que foi realmente usado;
•    Leaks de recursos: “recursos” são objetos que exigem procedimentos especiais de desalocação, por exemplo a liberação de um socket, conexão de pool, descritor de arquivo ou algum outro recurso gerenciado pelo sistema operacional, que a JVM não saberá desalocar automaticamente como parte da GC. É possível ter um leak do recurso, seja temporário ou permanente, mesmo para objetos que foram coletados por GC.

Além disso, é comum que surjam novos tipos de problemas que são efeito colateral da nova tecnologia, como:
•    Pausas de GC: como o coletor trabalha “em batch”, embora o custo total por objeto seja bem menor que na opção de memória manual, quando esse custo é concentrado por que milhares ou milhões de objetos são liberados de uma só vez, isso pode ser um problema;
•    Problemas misteriosos envolvendo tuning e ajustes de GC: por exemplo, é possível sofrer uma OutOfMemoryException quando existe muito mais memória livre que o exigido por uma solicitação de alocação. E entre problemas menos explícitos, pode-se ter perdas importantes de desempenho devido à simples falta dos parâmetros ideais para tunar a VM;
•    Consumo de memória além do necessário: também há cenários em que isso piora com GC. Para objetos de ciclo de vida simples (caso oposto ao anterior), o gerenciamento manual de memória permite deletar o objeto imediatamente após seu último uso, evitando a retenção de memória por um único nanossegundo. Já com GC, é preciso esperar pela próxima coleta;
•    Retenção de recursos além do necessário: a aplicação pode desalocar corretamente o recurso, mas só muito tempo após seu último uso. Isso tem sintomas não graves mas desagradáveis, por exemplo um arquivo pode permanecer bloqueado para escrita por muito tempo ao invés de ser desbloqueado imediatamente após a aplicação tê-lo utilizado, e uma conexão que já foi utilizada pode permanecer indisponível para outras transações que precisam de conexões de um pool de tamanho limitado.


ATENÇÃO! A exibição deste artigo foi interrompida.


  #Este é um post fechado

Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia. Clique aqui para saber mais sobre como abrir este post!







    2 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Mauricio Dos Santos Magnani Junior
Muito bom... Excelente artigo !
Esse é o melhor autor da devmedia...


em 20/12/2009 20:00 - Responder

 

Leandro Lamanna Zanardi
Excelente artigo e este é um conhecimento obrigatório de todos desenvolvedores. Devido ao incorreto uso da linguagem por muitos, inclusive pela Sun como citado pelo autor, ouvimos da maioria dos desenvolvedores do extremo baixo nível como C que java é lento, consome memória e não pode ser utilizado para games por exemplo, o que é um grande engano. Sou arquiteto de games para web e desktop e uma das minhas linguagens favoritas para tal é o java.
Desenvolver em java é muito simples e muito comum, o complexo é desenvolver corretamente, sem o uso excessivo de apis e frameworks obscuros.
Infelizmente este conhecimento está cada vez menos difundido e temos cada vez menos desenvolvedores java e mais usadores de framework que não conhecem a arquitetura dos mesmos.

Parabéns ao autor e a java magazine.



em 1/1/2010 12:23 - Responder

 



Autor
Osvaldo Pinali Doederlein

é Mestre em Engenharia de Software Orientado a Objetos e Arquiteto de Tecnologia da Visionnaire Informática, trabalhando em projetos de software e prospecção tecnológica.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]
Este post está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.

  Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!

Plano conveniência – Neste plano este post custa R$ 4,90 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ 1,96 (assinante) ou R$ 2,45 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ 1,47
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03