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

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

Capítulo 5. Garbage Collector  Introdução  Funcionamento do Garbage Collector  Execução do Garbage Collector  O método finalize()  Preparando o objeto.

Apresentações semelhantes


Apresentação em tema: "Capítulo 5. Garbage Collector  Introdução  Funcionamento do Garbage Collector  Execução do Garbage Collector  O método finalize()  Preparando o objeto."— Transcrição da apresentação:

1 Capítulo 5

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 2

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

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. 4

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

6 Introdução 6 cpso  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.

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. 7

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. 8

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. 9

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. 10

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. 11

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 ();... } 12

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 13

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; 14 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 = new Object(); 15 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; 16 xy

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); 17

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 18

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. 19

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

21 Ciclo de vida dos objetos  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. 21 Created In useInvisible Unreachable Collected Finalized Deallocated

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

23 Ciclo de vida dos objetos  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. 23 Created In useInvisible Unreachable Collected Finalized Deallocated

24 Ciclo de vida dos objetos  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. 24 Created In useInvisible Unreachable Collected Finalized Deallocated

25 Ciclo de vida dos objetos  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. 25 Created In useInvisible Unreachable Collected Finalized Deallocated

26 Ciclo de vida dos objetos  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. 26 Created In useInvisible Unreachable Collected Finalized Deallocated

27 Ciclo de vida dos objetos  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. 27 Created In useInvisible Unreachable 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 28

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

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. 30


Carregar ppt "Capítulo 5. Garbage Collector  Introdução  Funcionamento do Garbage Collector  Execução do Garbage Collector  O método finalize()  Preparando o objeto."

Apresentações semelhantes


Anúncios Google