03- Garbage Collector

Embed Size (px)

Citation preview

  • 7/25/2019 03- Garbage Collector

    1/30

    Slide 1

    ProfessorLauro Barreto Fontes, M.Sc.

    GARBAGE COLLETCOR

    Linguagem de Programao

  • 7/25/2019 03- Garbage Collector

    2/30

    Slide 2

    Agenda

    Introduo

    Funcionamento do Garbage Collector

    Execuo do Garbage Collector

    O mtodo finalize()

  • 7/25/2019 03- Garbage Collector

    3/30

    Slide 3

    Agenda

    Preparando o objeto para a coleta

    Obtendo dados sobre memria

    Configuraes de memria

    Ciclo de vida dos objetos

  • 7/25/2019 03- Garbage Collector

    4/30

    Slide 4

    Introduo

    Exploraremos aqui alguns aspectos da linguagemde programao Java quanto utilizao damemria do computador.

  • 7/25/2019 03- Garbage Collector

    5/30

    Slide 5

    Introduo

    Durante o seu ciclo de vida, uma aplicao Javaconsome recursos de memria conforme suanecessidade alocando espaos para reter asinformaes utilizadas durante o processamento.

  • 7/25/2019 03- Garbage Collector

    6/30

    Slide 6

    Cliente c = new Cliente();

    Produto p = new Produto();

    String s = Impacta;Object o = p;

    c = new Cliente();

    p = new Produto();s = null;

    c p so

    Introduo

  • 7/25/2019 03- Garbage Collector

    7/30

    Slide 7

    Introduo

    c p so Aps a execuo deinstrues, a memriado computador podereter informaesdesnecessrias e nomais utilizadas pelaaplicao

    Estas informaes soconsideradas lixo dememria.

  • 7/25/2019 03- Garbage Collector

    8/30

    Slide 8

    Introduo

    Em linguagens de programao como C e C++, taisalocaes devem ser explicitamente removidas pelaaplicao a fim de liberar estes espaos de memria.

    A no-liberao destes recursos de memria pode acarretara perda de performance da aplicao e impedir que outrasinformaes mais importantes sejam carregadas, causandofalhas como out of memory, stack overflow e, em algunscasos, reter lixo em memria mesmo aps o encerramento

    da aplicao.

  • 7/25/2019 03- Garbage Collector

    9/30

    Slide 9

    Garbage Collector - Funcionamento

    O Garbage Collector um recurso da linguagemJava responsvel pela limpeza automtica dasinformaes no mais utilizadas pela aplicao.

    O Garbage Collector retira do programador Java aresponsabilidade de desalocar os recursos dememria utilizados pela aplicao.

  • 7/25/2019 03- Garbage Collector

    10/30

    Slide 10

    Garbage Collector - Execuo

    O Garbage Collector automaticamente executado detempos em tempos pelo JVM.

    Todavia, podemos programaticamente solicitar ao JVM aexecuo do Garbage Collector atravs da instruo abaixo:

    System.gc();

    Vale observar que o uso da instruo System.gc() no

    garante que o JVM realize a execuo imediata do GarbageCollector, por questes de disponibilidade deprocessamento.

  • 7/25/2019 03- Garbage Collector

    11/30

    Slide 11

    O mtodo finalize()

    Ao coletar cada um dos objetos considerados lixode memria, o Garbage Collector executa paracada um deles o mtodo finalize()

    O finalize() tambm chamado de mtododestrutor um mtodo presente na classe Objecte, portanto, herdado por toda e qualquer classepresente na linguagem.

  • 7/25/2019 03- Garbage Collector

    12/30

    Slide 12

    O mtodo finalize()

    O mtodo finalize() possui a funcionalidadeinversa ao mtodo construtor.

    executado pelo GC quando o objeto elimidado

    da memria.

  • 7/25/2019 03- Garbage Collector

    13/30

    Slide 13

    O mtodo finalize()

    Ao criar uma classe, podemos sobrescrever o mtodofinalize() adicionando instrues de encerramento efinalizao.

    public class Cliente {

    ......

    protected void finalize() {...

    gravarDados();enviarEmail();...

    }}

  • 7/25/2019 03- Garbage Collector

    14/30

    Slide 14

    O mtodo finalize()

    Um problema do mtodo finalize que no hgarantias de que o coletor de lixo ir execut-lo emuma hora especificada

    Sendo assim, no fica claro SE ou QUANDO omtodo ser executado

    Alguns autores sugerem a no utilizao domtodo

  • 7/25/2019 03- Garbage Collector

    15/30

    Slide 15

    Preparando o objeto para coleta

    Um objeto considerado um candidato para coleta oucoletvel quando no possui mais nenhuma referncia naaplicao apontando para ele.

    Existem tipicamente trs situaes em que o objeto

    preparado para coleta tornando-se coletvel.

    Excluso de referncia

    Alterao de referncia

    Isolamento de referncia

  • 7/25/2019 03- Garbage Collector

    16/30

    Slide 16

    Excluso de refernciaOcorre quando a varivel que aponta para aquele

    objeto perde o seu escopo ou anulada

    c = new Object();

    ....

    ....

    c = null;

    c

    Preparando o objeto para coleta

  • 7/25/2019 03- Garbage Collector

    17/30

    Slide 17

    Alterao de refernciaOcorre quando a varivel que apontava para um

    objeto passa a apontar para um outro objeto.

    c = new Object();

    ....

    ....

    c = new Object();

    c

    Preparando o objeto para coleta

  • 7/25/2019 03- Garbage Collector

    18/30

    Slide 18

    Isolamento de refernciaO Garbage Collector consegue identificar tambm

    referncias circulares em sua aplicao,removendo-as caso seja necessrio

    x = new Funcionario();

    y = new Funcionario();

    x.setEncarregado(y);

    y.setEncarregado(x);y = null;

    x = null;

    x y

    Preparando o objeto para coleta

  • 7/25/2019 03- Garbage Collector

    19/30

    Slide 19

    Obtendo dados sobre a memria

    Durante a execuo de uma aplicao, podemosobter informaes de memria atravs da classe

    java.lang.Runtime

    Runtime runtime = Runtime.getRuntime();

    long free = runtime.freeMemory();long total = runtime.totalMemory();long max = runtime.maxMemory();

    System.out.printf("Memria livre : %,12d%n", free);System.out.printf("Memria total : %,12d%n", total);System.out.printf("Memria limite: %,12d%n", max);

  • 7/25/2019 03- Garbage Collector

    20/30

    Slide 20

    Configuraes de memria

    Ao executar uma aplicao Java, podemos definira quantidade de memria que o sistemaoperacional disponibilizar para o JVM:

    java -Xms128m -Xmx512m OlaMundo

  • 7/25/2019 03- Garbage Collector

    21/30

    Slide 21

    Configuraes de memria

    -XmsDefine a quantidade inicial de memria a ser

    utilizada pelo JVM.

    -XmxDefine a quantidade mxima de memria que o

    sistema operacional alocar para o JVM.

  • 7/25/2019 03- Garbage Collector

    22/30

    Slide 22

    Ciclo de vida dos objetos

    Created

    In use Invisible

    Unreachablee

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    23/30

    Slide 23

    Ciclo de vida dos objetos

    CreatedO ciclo de vida do objeto comea com oestado Created, quando o JVM j alocou

    espao em memria para registrar todos osmembros de dados do objeto, mas aindano o inicializou.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    24/30

    Slide 24

    Ciclo de vida dos objetos

    In useAps a criao, o JVM realiza ainicializao do objeto, executando ospassos na seguinte ordem

    1. Incializa os membros da classe me;2. Executa o construtor da classe me;3. Inicializa os membros da prpria classe;4. Executa o construtor da prpria classe.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    25/30

    Slide 25

    Ciclo de vida dos objetos

    InvisibleAo longo da aplicao, o objeto pode-se tornar invisvel.

    Isto ocorre quando a(s) sua(s)referncia(s) est(o) fora do escopoatual, onde no podemos manipularaquele objeto diretamente.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    26/30

    Slide 26

    Ciclo de vida dos objetos

    UnreachableUm objeto torna-se unreachable(inalcanvel) quando no h mais

    nenhuma referncia (varivel)apontando para ele, tornando-secandidato a ser coletado.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    27/30

    Slide 27

    Ciclo de vida dos objetos

    CollectedO objeto coletado aquele que j foiidentificado pelo GC para coleta mas

    ainda no teve a oportunidade deiniciar o processo de finalizao deste.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    28/30

    Slide 28

    Ciclo de vida dos objetos

    FinalizedO objeto considerado finalizadoquando o GC j executou o seu

    mtodo finalize(), mas ainda nodesalocou o espao de memriaocupado por este.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    29/30

    Slide 29

    Ciclo de vida dos objetos

    Deallocatedltima etapa do ciclo de vida do objeto.

    Ao ser desalocado, o espao de

    memria que antes era ocupado peloobjeto torna-se totalmente liberadocomo se o objeto nunca tivesse existido.

    Created

    In use Invisible

    Unreachable

    Collected

    Finalized

    Deallocated

  • 7/25/2019 03- Garbage Collector

    30/30

    Slide 30

    FIM!