Construtores e Destrutores  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
jaoliveira
Debugger
[Avatar]
Membro desde: 18/09/2003 13:21:28
Mensagens: 72
Localização: Campo Grande/MS
Offline

Gostaria de saber se existe em java construtores e destrutores, como em C/C++...

falow

Atenciosamente,

José Augusto
[WWW] [MSN]
ricardolecheta
GUJ Master
[Avatar]

Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline

construtor sim, o construtor assim como no C++ possui o mesmo nome da classe e é chamadado toda vez que a classe é instanciada;;



destrutor, hummm, mais ou menos

existe um método finalize() da classe Object cujo é chamado toda vez que uma classe é coletada pelo Garbage Collector. No C++ vc usava um free ou delete para desalocar a memória mas no java como já deve saber existe o Garbage Collector que faz este trabalho. Então quando ele entra em ação ele "teoricamente chamaria o método finalize(), mas isto não é garantido pela especificação da linguagem"...

a assinatura do finalize é: protected void finalize() throws Throwable...

uma técnica usada para deixar um objeto elegível para o garbage collector é atribuir a sua referência ao valor "null", assim:
Object o = new Object(); // chama o construtor
o = null; // deixa este objeto pronto para ser coletado, mas isto não é garantido

vc pode provocar que o Garbage Collector rode manualmente assim:
System.gc(); Faça isso e veja como o finalize() funciona

Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/
Bani
JWizard
[Avatar]

Membro desde: 13/10/2002 23:17:37
Mensagens: 2443
Localização: São Paulo
Offline

Só um pequeno detalhezinho em relação ao finalize (útil apenas pra quem vai fazer prova de certificação ou algo do tipo):

A especificação garante sim que o método finalize será chamado na primeira vez que o garbage collector tentar remover o objeto. O que não é garantido pela especificação é que o garbage collector vá tentar remover o objeto, e por esse motivo o método finalize talvez nunca seja chamado.

~ Site da Bani ~
ricardolecheta
GUJ Master
[Avatar]

Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline

Bani wrote:Só um pequeno detalhezinho


bem observado

Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/
danieldestro
Moderador
[Avatar]

Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline

A chamada ao System.gc(); não garante que o Garbage Collector seja exacutado naquela momento, digo, não garante que os objetos eleitos ao GC sejam desalocados.

gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol
[WWW]
jaoliveira
Debugger
[Avatar]
Membro desde: 18/09/2003 13:21:28
Mensagens: 72
Localização: Campo Grande/MS
Offline

Aê galera...valew....

Agora estou esclarecido....

Falow

Atenciosamente,

José Augusto
[WWW] [MSN]
deathcon4
Thread.start()

Membro desde: 07/11/2004 21:42:42
Mensagens: 40
Offline

Muito interessante, o java não deixa acumular lixo na memória, ele possui um método automático para liberar a memória, coleta automática de lixo, ou seja eles finalizam o método liberando a memória, mas se quiser pode-se excluir você mesmo através do código. E é protegido, bom para evitar erros, interferências de algum outro código.
Prefiro fazer a finalização, o sistema não faz mágica, porque pode-se esquecer algum código e não ser liberado corretamente.

O trouxa já nasceu morto!
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O recomendado, no entanto, é:
- Ter um método "close" ou coisa parecida, para liberar os recursos que porventura tenham de ser devolvidos explicitamente (como é o caso de arquivos, que têm de ser fechados);
- Evitar ter o tal método "finalize", porque ele atrapalha o "garbage collection".
[WWW]
deathcon4
Thread.start()

Membro desde: 07/11/2004 21:42:42
Mensagens: 40
Offline

Fiquei pergutando para mim, e se a coleta automática não funcionar? O SO vai cair em um starvation e não vai conseguir liberar a memória, e ai? Eles tem de bolar um processo manual eficiente se o automático não funcionar, ou seja, liberar na marra.

O trouxa já nasceu morto!
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

deathcon4 wrote:Fiquei pergutando para mim, e se a coleta automática não funcionar? O SO vai cair em um starvation e não vai conseguir liberar a memória, e ai? Eles tem de bolar um processo manual eficiente se o automático não funcionar, ou seja, liberar na marra.


Se não funcionar, então tem algo de errado no programa que está rodando na JVM.

O SO não fica sem memória por que ele libera uma quantidade máxima fixa para a JVM. Se a JVM chegar ao limite, problema é somente dela, que se resolva com a coleta de lixo, ou morra tentando com um OutOfMemoryError.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team