FEVEREIRO DE 2015
GARBAGE COLLECTOR E CLR
GRUPO DE ARQUITETOS
ALTERNATIVA PARA O GERENCIAMENTO MANUAL, É RESPONSÁVEL
POR REALIZAR A COLETA DE TODAS AS INSTÂNCIAS OU TIPOS
PRIMITIVOS QU...
COMO FUNCIONA O GARBAGE
COLLECTOR DO .NET?
“Contém trechos extraídos do livro “Programming .net
Components, Juval Lowy - I...
REALIZA COLETAAUTOMÁTICA DE
TODAS AS CLASSES QUE SÃO 100%
MANAGED CODE;
REALIZAA COLETA DE ACORDO COM
O SERVIÇO DE INFRA-E...
GARBAGE COLLECTOR GENERATIONS
A INTERFACE IDISPOSABLE É
UTILIZADA QUANDO UMA CLASSE
UTILIZAR RECURSOS NÃO
GERENCIADOS, IMPLEMENTANDO
NO MÉTODO DISPOSE A...
O PROBLEMA DE SE IMPLEMENTAR /
UTILIZAR A INTERFACE IDISPOSABLE
É O DE QUE NÃO EXISTE GARANTIA
ALGUMA QUE O DESENVOLVEDOR
...
DESTRUTOR / FINALIZADOR
O METODO DESTRUTOR (FINALIZER) É
DISPARADO PELO GARBAGE COLECTOR
TODA VEZ QUE A COLETA DE UM OBJET...
NÃO SÃO MUTUAMENTE
EXCLUSIVOS, MAS DEVE-SE
SEMPRE CHAMAR O MÉTODO
GC.SUPRESSFINALIZER DENTRO DO
DISPOSE QUANDO A CLASSE
IM...
GARANTIR A CHAMADA DO
DISPOSE EM CLASSES
IDISPOSABLE ATRAVÉS DO USING
OU DO ANINHAMENTO DE
DISPOSE;
COMBINAR DESTRUTOR E...
IMPLEMENTAR A INTERFACE
IDISPOSABLE EM CLASSES QUE
NÃO POSSUEM FIELDS OU
PROPERTIES NÃO GERENCIADAS
OU QUE NÃO IMPLEMENTE...
CASO CLÁSSICO DE PROBLEMAS ORIUNDOS DA NÃO
UTILIZAÇÃO CORRETA DE IDISPOSABLE E FINALIZERS
O PROVIDER .NET DO ORACLE UTILIZ...
PROPOSTA DE SOLUÇÃO PARCIAL
EM RMSDATASERVER E DBSERVICES,
COMBINAR IDISPOSABLE E FINALIZER PARA
ATENDER AAMBOS OS CASOS: ...
RESUMO
IDISPOSABLE + DESTRUTOR
• ENGLOBA TUDO O QUE FOI FALADO DOS
ITENS ISOLADOS, POSSIBILITANDO UM
ARRANJO QUE TENTA GAR...
Obrigado ;)
EQUIPE DE ARQUITETURA
christiano.Coutinho@totvs.com.br
Próximos SlideShares
Carregando em…5
×

Garbage Collector, Finalizers & IDisposable

208 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
208
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
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

×