| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/09/2003 20:22:42
|
jaoliveira
Debugger
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/09/2003 21:01:45
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
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/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/09/2003 21:37:23
|
Bani
JWizard
![[Avatar]](/images/avatar/6cdd60ea0045eb7a6ec44c54d29ed402.jpg)
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 ~ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/09/2003 21:50:42
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
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/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/09/2003 21:58:31
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/09/2003 23:08:01
|
jaoliveira
Debugger
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2008 16:06:10
|
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/08/2008 16:08:28
|
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".
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2008 09:17:59
|
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/08/2008 12:47:02
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
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 |
|
|
 |
|
|