A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Capítulo 5 Garbage Collector.

Apresentações semelhantes


Apresentação em tema: "Capítulo 5 Garbage Collector."— Transcrição da apresentação:

1 Capítulo 5 Garbage Collector

2 Garbage Collector Introdução Funcionamento do Garbage Collector
Execução do Garbage Collector O método finalize() Preparando o objeto para a coleta Obtendo dados sobre memória Configurações de memória Ciclo de vida dos objetos Tipos de referência

3 Introdução Exploraremos aqui alguns aspectos da linguagem de programação Java quanto à utilização da memória do computador.

4 Introdução Durante o seu ciclo de vida, uma aplicação Java consome recursos de memória conforme sua necessidade alocando espaços para reter as informações utilizadas durante o processamento.

5 Introdução c p o s Cliente c = new Cliente(); Produto p = new Produto(); String s = “Impacta”; Object o = p; c = new Cliente(); p = new Produto(); s = null;

6 Introdução Após a execução de instruções, a memória do computador pode reter informações desnecessárias e não mais utilizadas pela aplicação Estas informações são consideradas lixo de memória. c p o s

7 Introdução Em linguagens de programação como C e C++, tais alocações devem ser explicitamente removidas pela aplicação a fim de liberar estes espaços de memória. A não-liberação destes recursos de memória pode acarretar a perda de performance da aplicação e impedir que outras informações mais importantes sejam carregadas, causando falhas como “out of memory”, “stack overflow” e, em alguns casos, reter lixo em memória mesmo após o encerramento da aplicação.

8 Garbage Collector O Garbage Collector é um recurso da linguagem Java responsável pela limpeza automática das informações não mais utilizadas pela aplicação. O Garbage Collector retira do programador Java a responsabilidade de desalocar os recursos de memória utilizados pela aplicação.

9 Execução do Garbage Collector
O Garbage Collector é automaticamente executado de tempos em tempos pelo JVM. Todavia, podemos programaticamente solicitar ao JVM a execução do Garbage Collector através da instrução abaixo: System.gc(); Vale observar que o uso da instrução System.gc() não garante que o JVM realize a execução imediata do Garbage Collector, por questões de disponibilidade de processamento.

10 O método finalize() Ao coletar cada um dos objetos considerados lixo de memória, o Garbage Collector executa para cada um deles o método finalize() O finalize() – também chamado de método destrutor – é um método presente na classe Object e, portanto, herdado por toda e qualquer classe presente na linguagem.

11 O método finalize() O método finalize() possui a funcionalidade inversa ao método construtor. É executado pelo GC quando o objeto é elimidado da memória.

12 O método finalize() Ao criar uma classe, podemos sobrescrever o método finalize() adicionando instruções de encerramento e finalização. public class Cliente { ... protected void finalize() { gravarDados(); enviar (); }

13 Preparando o objeto para coleta
Um objeto é considerado um candidato para coleta – ou coletável – quando não possui mais nenhuma referência na aplicação apontando para ele. Existem tipicamente três situações em que o objeto é preparado para coleta tornando-se coletável. Exclusão de referência Alteração de referência Isolamento de referência

14 Preparando o objeto para coleta
Exclusão de referência Ocorre quando a variável que aponta para aquele objeto perde o seu escopo ou é anulada c = new Object(); .... c = null; c

15 Preparando o objeto para coleta
Alteração de referência Ocorre quando a variável que apontava para um objeto passa a apontar para um outro objeto. c = new Object(); .... c

16 Preparando o objeto para coleta
Isolamento de referência O Garbage Collector consegue identificar também referências circulares em sua aplicação, removendo-as caso seja necessário x = new Funcionario(); y = new Funcionario(); x.setEncarregado(y); y.setEncarregado(x); y = null; x = null; x y

17 Obtendo dados sobre a memória
Durante a execução de uma aplicação, podemos obter informações de memória através da classe java.lang.Runtime Runtime runtime = Runtime.getRuntime(); long free = runtime.freeMemory(); long total = runtime.totalMemory(); long max = runtime.maxMemory(); System.out.printf("Memória livre : %,12d%n", free); System.out.printf("Memória total : %,12d%n", total); System.out.printf("Memória limite: %,12d%n", max);

18 Configurações de memória
Ao executar uma aplicação Java, podemos definir a quantidade de memória que o sistema operacional disponibilizará para o JVM: java -Xms128m -Xmx512m OlaMundo

19 Configurações de memória
-Xms Define a quantidade inicial de memória a ser utilizada pelo JVM. -Xmx Define a quantidade máxima de memória que o sistema operacional alocará para o JVM.

20 Ciclo de vida dos objetos
Created In use Invisible Unreachable Collected Finalized Deallocated

21 Ciclo de vida dos objetos
Created In use Invisible Unreachable Created O ciclo de vida do objeto começa com o estado “Created”, quando o JVM já alocou espaço em memória para registrar todos os membros de dados do objeto, mas ainda não o inicializou. Collected Finalized Deallocated

22 Ciclo de vida dos objetos
Created In use Invisible Unreachable In use Após a criação, o JVM realiza a inicialização do objeto, executando os passos na seguinte ordem Incializa os membros da classe mãe; Executa o construtor da classe mãe; Inicializa os membros da própria classe; Executa o construtor da própria classe. Collected Finalized Deallocated

23 Ciclo de vida dos objetos
Created In use Invisible Unreachable Invisible Ao longo da aplicação, o objeto pode-se tornar invisível. Isto ocorre quando a(s) sua(s) referência(s) está(ão) fora do escopo atual, onde não podemos manipular aquele objeto diretamente. Collected Finalized Deallocated

24 Ciclo de vida dos objetos
Created In use Invisible Unreachable Unreachable Um objeto torna-se unreachable (inalcançável) quando não há mais nenhuma referência (variável) apontando para ele, tornando-se candidato a ser coletado. Collected Finalized Deallocated

25 Ciclo de vida dos objetos
Created In use Invisible Unreachable Collected O objeto coletado é aquele que já foi identificado pelo GC para coleta mas ainda não teve a oportunidade de iniciar o processo de finalização deste. Collected Finalized Deallocated

26 Ciclo de vida dos objetos
Created In use Invisible Unreachable Finalized O objeto é considerado finalizado quando o GC já executou o seu método finalize(), mas ainda não desalocou o espaço de memória ocupado por este. Collected Finalized Deallocated

27 Ciclo de vida dos objetos
Created In use Invisible Unreachable Deallocated Última etapa do ciclo de vida do objeto. Ao ser desalocado, o espaço de memória que antes era ocupado pelo objeto torna-se totalmente liberado como se o objeto nunca tivesse existido. Collected Finalized Deallocated

28 Tipos de referência Existem diferentes tipos de referências à objetos que podem ser utilizados pela aplicação: Referência strong Referência soft Referência weak Referência phantom

29 Tipos de referência Referência strong Referência soft Referência weak
Referência phantom

30 Tipos de referência Até o momento temos utilizado variáveis comuns para referenciar objetos em memória. Tais variáveis são chamadas “strong”. Uma variável strong é uma variável cujo objeto apontado nunca é coletado pelo GC.


Carregar ppt "Capítulo 5 Garbage Collector."

Apresentações semelhantes


Anúncios Google