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.
Parte 3: 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 "-".
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");
}
}
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]
[]s