Programação orientada a objetos e o Java (Parte 6)

No nosso próximo passo iremos estudar os destrutores. Aprenderemos a utilizá-los no Java e descobriremos quais são suas diferenças com relação às outras linguagens orientadas a objetos.

[ Hits: 29.376 ]

Por: Ygor Thomaz em 31/05/2004 | Blog: http://www.ygorthomaz.net/


Trabalhando com um exemplo



Vamos criar um exemplo que permite uma quantidade arbitrária de objetos do tipo String, onde quando ocorre uma nova instanciação faz sair do escopo a anterior. Neste programa podemos passar dois argumentos, a quantidade de objetos a serem instanciados, ou seja, número de Strings.

O segundo argumento indica que iremos forçar uma chamada ao coletor de lixo a cada instanciação. Sem argumentos ele assume a primeira com valor 10, sendo que para cada instanciação ele exibe um caráter "-".

//GCTeste.java
public class GCTeste {
   public static void main(String args[]) {
      String c;
      int max = 10;
      boolean force = false;
      try {
         max = Integer.parseInt(args[0]);
         force = args.length > 1;
      }
      catch(Exception e) {
         System.out.println("Usando valor default");
      }
      System.out.println("Iniciando criacao de "+max+" objetos:");
      for(int i=0; i<max; i++) {
         System.out.print("-");
         c = new String("Coletor Automatico");
         if(force) {
            System.gc();
         }
      }
      System.out.println("\nFim");
   }
}

Agora devemos compilar o programa com o comando:

$ javac GCTeste.java

Depois de efetuada a compilação, vamos testar uma valor para que a memória se esgote e o gc interfira:

$ java -verbose:gc GCTeste 10000

A execução irá retornar entre as instanciações representadas por "-" a atuação do gc.

Agora com um único objeto podemos fazer:

$ java -verbose:gc GCTeste 1 s

Iremos obter as seguintes mensagens:

Iniciando criacao de 1 objetos:
-[Full GC 250K->135K(1984K), 0.0119571 secs]

Página anterior     Próxima página

Páginas do artigo
   1. Objetivo do artigo
   2. Destrutores
   3. Trabalhando com um exemplo
   4. Terminando e referências
Outros artigos deste autor

Instalando o QMail e ferrramentas de administração

Programação orientada a objetos e o Java (parte 7)

Dominando o Iptables (parte 2)

Manipulando erros com try catch finally

Programação orientada a objetos e o Java (parte 3)

Leitura recomendada

Introdução ao Java - Hello World

Manipulando erros com try catch finally

Montando um ambiente utilizando Tomcat + Java + MySQL (Debian)

Programação orientada a objetos e o Java (parte 4)

Conceito OOP no Java

  
Comentários
[1] Comentário enviado por pcalcado em 31/05/2004 - 21:56h

A regra básica para se usar destrutores em Java é: *não* use. System.gc() apenas sugere à VM que é hora de usar o gc [algo como um modificador register em C/C++]. Seu código não deve, em hipótese nenhuma,d epender da execução do método finalize().

[]s

[2] Comentário enviado por psousa em 01/06/2004 - 09:56h

Estou a iniciar a minha viagem pelo java;
Tenho seguido os teus artigos sobre java e têm me ajudado muitos;
continua com o trabalho;

Muito Obrigado......

:)
Pedro Sousa
Portugal

[3] Comentário enviado por Czuber em 01/06/2004 - 16:10h

Gostei do artigo!
Tenho uma dúvida, a diferença entre chamar o método finalize() e o System.gc...
O System.gc serve para todos os objetos q estaum com null (pelo exemplo que vc deu) e o finalize serve só para o objeto pelo qual chamei esse método?
Obrigado!
[]s

[4] Comentário enviado por ygorth em 01/06/2004 - 18:48h

Czuber,

o System.gc() funciona assim como adcionar null ao valor de um objeto.

Sim o finalize ira marcar o objeto desejado.

Cya !

[5] Comentário enviado por birilo em 02/06/2004 - 01:20h

Mandou bem...

Estou até pensando em usar a minha máquina java pra alguma coisa... =)

Abraços, Danilo

[6] Comentário enviado por ygorth em 19/06/2004 - 13:30h

(: boa sorte !!

[7] Comentário enviado por rsouza em 30/06/2004 - 03:17h

Meus parabens, esse tutorial esta sendo muito educativo.
Escreva mais++

[8] Comentário enviado por engos em 08/07/2004 - 14:15h

Não li ainda o artigo 7, mas até agora to vendo que a qualidade tá caindo...

Os outros nem comentei porque estavam até que bons, mas esse ficou fraco na minha opnião... espero que seja a única. :)

Até agora não deu para entender quando o gc vai entrar em ação e o que ele realmente faz, pelo que percebi só seta null nos valores, mas não é um destructor propriamente dito, to certo?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts