Top Banner
Garbage Collector Capítulo 5
30

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

Apr 21, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Capítulo 5. Garbage Collector  Introdução  Funcionamento do Garbage Collector  Execução do Garbage Collector  O método finalize()  Preparando o objeto.

Garbage CollectorCapítulo 5

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

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

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

Introdução

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

3

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

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

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

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

c p so

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

Introdução

6

c p so 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.

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

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

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

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

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

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

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

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

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

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

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

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

}}

12

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

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

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

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

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

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

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

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

x y

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

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

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

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

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

Configurações de memória -Xms

Define a quantidade inicial de memória a ser utilizada pelo JVM.

-XmxDefine a quantidade máxima de memória

que o sistema operacional alocará para o JVM.

19

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

Ciclo de vida dos objetos

20

Created

In use Invisible

Unreachable

Collected

Finalized

Deallocated

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

Ciclo de vida dos objetos

CreatedO 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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

Ciclo de vida dos objetos

In useApó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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

Ciclo de vida dos objetos

InvisibleAo 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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

Ciclo de vida dos objetos

UnreachableUm 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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

Ciclo de vida dos objetos

CollectedO 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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

Ciclo de vida dos objetos

FinalizedO 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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

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 use Invisible

Unreachable

Collected

Finalized

Deallocated

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

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

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

Tipos de referência

Referência strongReferência strong

Referência soft

Referência weak

Referência phantom

29

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

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