Garbage Collector, Finalizers & IDisposable

215 visualizações

Publicada em

Uma breve apresentação sobre um assunto simples, mas que gera muitas dúvidas entre desenvolvedores .net

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
215
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Garbage Collector, Finalizers & IDisposable

  1. 1. FEVEREIRO DE 2015 GARBAGE COLLECTOR E CLR GRUPO DE ARQUITETOS
  2. 2. ALTERNATIVA PARA O GERENCIAMENTO MANUAL, É RESPONSÁVEL POR REALIZAR A COLETA DE TODAS AS INSTÂNCIAS OU TIPOS PRIMITIVOS QUE NÃO POSSUEM MAIS REFERÊNCIAS, OU SEJA: SÃO LIXO QUE PODE SER DESCARTADO. O CONCEITO EXISTE DESDE A DÉCADA DE 50, NA LINGUAGEM LISP. O QUE É GARBAGE COLLECTOR?
  3. 3. COMO FUNCIONA O GARBAGE COLLECTOR DO .NET? “Contém trechos extraídos do livro “Programming .net Components, Juval Lowy - ISBN: 0-596-10207-0”
  4. 4. REALIZA COLETAAUTOMÁTICA DE TODAS AS CLASSES QUE SÃO 100% MANAGED CODE; REALIZAA COLETA DE ACORDO COM O SERVIÇO DE INFRA-ESTRUTURA DA CLR, OU QUANDO O USUÁRIO CHAMAR DE FORMA EXPLÍCITA (GC.COLLECT) PODE SER DISPARADO APENAS PARA UMA GERAÇÃO OU PARA TODAS. GARBAGE COLLECTOR .NET GARBAGE COLLECTOR
  5. 5. GARBAGE COLLECTOR GENERATIONS
  6. 6. A INTERFACE IDISPOSABLE É UTILIZADA QUANDO UMA CLASSE UTILIZAR RECURSOS NÃO GERENCIADOS, IMPLEMENTANDO NO MÉTODO DISPOSE A LIBERAÇÃO DESSES MESMOS RECURSOS. NÃO DEVE SER UTILIZADA PARA OUTROS PROPÓSITOS. ESSE TIPO DE OBJETO (IDISPOSABLE) DEVE SER DESCARTADO IMEDIATAMENTE APÓS SUA UTILIZAÇÃO. GARBAGE COLLECTOR .NET: IDISPOSABLE IDISPOSABLE
  7. 7. O PROBLEMA DE SE IMPLEMENTAR / UTILIZAR A INTERFACE IDISPOSABLE É O DE QUE NÃO EXISTE GARANTIA ALGUMA QUE O DESENVOLVEDOR IRÁ RESPEITAR E SEGUIR O SEU CRITÉRIO DE UTILIZAÇÃO, CHAMANDO O MÉTODO DISPOSE ASSIM QUE O MESMO NÃO FOR MAIS NECESSÁRIO GARBAGE COLLECTOR .NET: IDISPOSABLE IDISPOSABLE
  8. 8. DESTRUTOR / FINALIZADOR O METODO DESTRUTOR (FINALIZER) É DISPARADO PELO GARBAGE COLECTOR TODA VEZ QUE A COLETA DE UM OBJETO COM DESTRUTOR É EFETUADA. O SERVIÇO DE INFRA-ESTRUTURA DE CLR CONTROLAA FILA DE FINALIZAÇÃO DE FORMA TRANSPARENTE, SEM QUE O DESENVOLVEDOR TENHA QUE CHAMAR O DESTRUTOR DE FORMA EXPLÍCITA.
  9. 9. NÃO SÃO MUTUAMENTE EXCLUSIVOS, MAS DEVE-SE SEMPRE CHAMAR O MÉTODO GC.SUPRESSFINALIZER DENTRO DO DISPOSE QUANDO A CLASSE IMPLEMENTAR O DESTRUTOR. QUANDO DEVO UTILIZAR O DESTRUTOR E QUANDO DEVO IMPLEMENTAR A INTERFACE IDISPOSABLE E QUANDO DEVO USAR OS 2? IDISPOSABLE E DESTRUTORES SÃO MUTUAMENTE EXCLUSIVOS?
  10. 10. GARANTIR A CHAMADA DO DISPOSE EM CLASSES IDISPOSABLE ATRAVÉS DO USING OU DO ANINHAMENTO DE DISPOSE; COMBINAR DESTRUTOR E IDISPOSABLE PARA GARANTIR O DESCARTE CORRETO DE OBJETOS NÃO GERENCIADOS; MANTER “VIVAS” AS REFERÊNCIAS PARA OBJETOS IDISPOSABLE PELO MENOR TEMPO POSSÍVEL. BOAS PRÁTICAS DE DESENVOLVIMENTO A SEREM SEGUIDAS, SEMPRE! SEMPRE:
  11. 11. IMPLEMENTAR A INTERFACE IDISPOSABLE EM CLASSES QUE NÃO POSSUEM FIELDS OU PROPERTIES NÃO GERENCIADAS OU QUE NÃO IMPLEMENTEM A INTERFACE IDISPOSABLE; CRIAR METODOS DESTRUTORES SEM NECESSIDADE, LEMBRANDO SEMPRE DE COMO O GARBAGE COLLECTOR FAZ A COLETA DE LIXO; DEIXAR DE CHAMAR O DISPOSE... PRÁTICAS DE DESENVOLVIMENTO A SEREM EVITADAS, SEMPRE! NUNCA:
  12. 12. CASO CLÁSSICO DE PROBLEMAS ORIUNDOS DA NÃO UTILIZAÇÃO CORRETA DE IDISPOSABLE E FINALIZERS O PROVIDER .NET DO ORACLE UTILIZA OBJETOS NÃO GERENCIADOS (DO CLIENT ORACLE NATIVO). QUANDO NÃO SE FECHAM AS CONEXÕES E/OU NÃO É CHAMADO O DISPOSE DAS MESMAS, O GARBAGE COLLECTOR É INCAPAZ DE SINALIZAR PARA O ALGORITMO DO POOL QUE AS MESMAS PODEM SER RECICLADAS E COM ISSO, CRIA-SE UM VAZAMENTO DE CONEXÕES, COM O POOL ESTOURANDO EM UM CURTO ESPAÇO DE TEMPO.
  13. 13. PROPOSTA DE SOLUÇÃO PARCIAL EM RMSDATASERVER E DBSERVICES, COMBINAR IDISPOSABLE E FINALIZER PARA ATENDER AAMBOS OS CASOS: QUANDO O DESENVOLVEDOR CHAMAR O DISPOSE CORRETAMENTE, E QUANDO ELE NÃO CHAMAR. ENTRETANTO, QUAIS OS POSSÍVEIS CASOS ONDE ESSA ESTRATÉGIA PODE VIR A FALHAR? E QUAL SERIA O MOTIVO DA FALHA?
  14. 14. RESUMO IDISPOSABLE + DESTRUTOR • ENGLOBA TUDO O QUE FOI FALADO DOS ITENS ISOLADOS, POSSIBILITANDO UM ARRANJO QUE TENTA GARANTIR QUE UM OBJETO SERÁ DESCARTADO CORRETAMENTE MESMO QUE O DESENVOLVEDOR NÃO SIGA AS MELHORES PRÁTICAS DE DESENVOLVIMENTO; IDISPOSABLE • DEVE SEMPRE SER UTILIZADA EM CLASSES QUE POSSUIREM FIELDS OU PROPERTIES NÃO GERENCIADAS OU QUE IMPLEMENTEM IDISPOSABLE; • DEVE TER SER CONSUMIDO CONSIDERANDO O MENOR ESCOPO DE VIDA POSSÍVEL; DESTRUTORES • O MÉTODO DE FINALIZAÇÃO É CONTROLADO E CHAMADO AUTOMÁTICAMENTE PELO GARBAGE COLLECTOR. • SÓ DEVE SER UTILIZADO QUANDO FIZER SENTIDO, OU SEJA, QUANDO ALGUMA AÇÃO PRECISAR SEMPRE DE SER EXECUTADA NO ATO DO DESCARTE/COLETA DO OBJETO;
  15. 15. Obrigado ;) EQUIPE DE ARQUITETURA christiano.Coutinho@totvs.com.br

×