SlideShare une entreprise Scribd logo
1  sur  15
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 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?
COMO FUNCIONA O GARBAGE
COLLECTOR DO .NET?
“Contém trechos extraídos do livro “Programming .net
Components, Juval Lowy - ISBN: 0-596-10207-0”
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
GARBAGE COLLECTOR GENERATIONS
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
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
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.
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?
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:
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:
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.
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?
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;
Obrigado ;)
EQUIPE DE ARQUITETURA
christiano.Coutinho@totvs.com.br

Contenu connexe

Similaire à Garbage Collector, Finalizers & IDisposable

React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesJosé Barbosa
 
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Frederico Garcia Costa
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal RailsLuiz Costa
 
Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Huge
 
TDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJSTDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJStdc-globalcode
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarBetter Developer
 
Programando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UIProgramando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UIMahmoud Ali Neto
 
Desenvolvimento web ágil e descomplicado usando ruby on rails
Desenvolvimento web ágil e descomplicado usando ruby on railsDesenvolvimento web ágil e descomplicado usando ruby on rails
Desenvolvimento web ágil e descomplicado usando ruby on railsMaurício Linhares
 
Alta-disponibilidade com MySQL
Alta-disponibilidade com MySQLAlta-disponibilidade com MySQL
Alta-disponibilidade com MySQLMySQL Brasil
 

Similaire à Garbage Collector, Finalizers & IDisposable (10)

React e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer CirclesReact e reactividade Meetup Facebook Developer Circles
React e reactividade Meetup Facebook Developer Circles
 
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal Rails
 
Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016Desenvolvimento Client-Side 2016
Desenvolvimento Client-Side 2016
 
TDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJSTDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2016SP - Web Moderna além do Front-End com AngularJS
 
Arquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudarArquitetura em camadas em python e quanto isso pode ajudar
Arquitetura em camadas em python e quanto isso pode ajudar
 
Programando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UIProgramando interfaces reativas com Xamarin e Reactive UI
Programando interfaces reativas com Xamarin e Reactive UI
 
Desenvolvimento web ágil e descomplicado usando ruby on rails
Desenvolvimento web ágil e descomplicado usando ruby on railsDesenvolvimento web ágil e descomplicado usando ruby on rails
Desenvolvimento web ágil e descomplicado usando ruby on rails
 
Alta-disponibilidade com MySQL
Alta-disponibilidade com MySQLAlta-disponibilidade com MySQL
Alta-disponibilidade com MySQL
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 

Garbage Collector, Finalizers & IDisposable

  • 1. FEVEREIRO DE 2015 GARBAGE COLLECTOR E CLR GRUPO DE ARQUITETOS
  • 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. 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. 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Obrigado ;) EQUIPE DE ARQUITETURA christiano.Coutinho@totvs.com.br