|
Usuários |
|
126 Usuários Online
|
|
[Artigos]
Garbage Collection do Delphi e o Oracle |
Publicado por ActiveDelphi : Quinta, Março 30, 2006 - 05:10 GMT-3 (3685 leituras)
4 Comentários Enviar para um amigo Versão para impressão
|
O “Garbage Colletion” ou “Coletor de Lixo” de uma linguagem é a forma pela qual os objetos ou variáveis instanciadas são liberadas de forma implícitas, ou seja, sem o comando direto do desenvolvedor. Por exemplo, quando se cria uma variável ou objeto privado ele é liberado automaticamente pela linguagem, no caso pelo Delphi, através de seus métodos de destruição sem a necessidade de informar que esses objetos ou variáveis devem ser destruídos.
A estes “métodos de destruição” ou “técnicas
de destruição” que mantém a memória do computador “limpa” de
objetos ou variáveis com referências perdidas, dá-se o
nome de “Garbage Collection”.
Quando for efetuado um instanciamento de um
objeto TQuery dinamicamente (via código), devemos sempre utilizar o
FreeAndNil para destruí-lo, mesmo sendo um
objeto de visibilidade privada. Isto é necessário, porque embora
o Garbage Colletion do delphi elimine o objeto instanciado da memória
do computador o Oracle não elimina o cursor enquanto a conexão
que o criou estivar ativa. Abaixo um Exemplo da maneira correta de se trabalhar:
procedure X;
Var
qryAux : TQuery;
begin
qryAux := TQuery.Create( Nil );
Try
//comandos a serem executados com qryAux
Finally
If ( qryAux.Active ) Then qryAux.close;
FreeAndNil( qryAux );
End;
End;
Caso o sistema em Delphi não liberar
o objeto Tquery explicitamente, o Oracle vai acumulando os cursores (“Querys”)
enquanto o sistema estiver conectado, o que pode ocasionar o erro “ORA-01000:
maximum open cursors exceeded”, que indica que a quantidade de cursores
suportados pelo Oracle foi excedida. Quando o sistema é finalizado a
conexão
com o Oracle é fechada, consequentemente todos os cursores da conexão
também são finalizados, desta forma se este erro ocorrer, o operador
do sistema deverá sair e entrar novamente no sistema para voltar a utilizá-lo,
causando um grande transtorno para o operador.
É possível aumentar a quantidade de cursores que podem ficar
abertos no Oracle aumentando o valor do parâmetro “open_cursors” (é necessário
reiniciar o banco de dados), mas isto é uma solução paliativa,
pois conforme a aplicação vai sendo utilizada os cursores continuam
sendo acumulados até que em um dado momento causarão novamente
um estouro do limite de cursores configurados.
Flavio Barbosa
fbarbosa@hcrp.fmrp.usp.br
|
|
Comentários | |
| | Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
por: gjfreitas : Mai 10, 2006 - 08:39 (Informações sobre o membro | Enviar uma mensagem)
http://
|
|
Flávio, sinto muito em enviar uma nota de correção, mas não poderia deixar uma informação falha neste site. Uma linguam com "Garbage Collection" cuida da liberação de memória de forma automática, como você mesmo disse, o coletor de lixo é um thread de baixa prioridade que é disparado sempre que os sistema está ocioso ou quando a memória está esgotando. Infelizmente o Delphi não possui um coletor de lixo, se possuísse nunca precisariámos executar o método free, destroy ou freeAndNil, estes métodos se fazem necessário pelo fato de não existir um coletor de lixo. A função do coletor de lixo é localizar todos os objetos que não são mais referenciados e liberar a memória utilizada, este recursos está disponível em linguagens como JAVA e dotNET, por isso acredito que um sistema criado em Delphi.NET também possa usufluir do coletor de lixo do framework dotNET.
|
|
por: Visitante : Dez 16, 2006 - 07:49
|
|
É isso mesmo. O Garbage Collection é um mecânismo coletor de lixo da memória. Seu funcionamento Flávio é da seguinte forma: Estando o sistema ocioso, ele aciona o Garbage que varre a memória procurando conteúdo sem ponteiros ativos, os liberando da memória. O JAVA possue um Garbage Collection, não o Delphi.
|
|
por: Visitante : Dez 16, 2006 - 07:51
|
|
Perai, o que vc fez foi somente liberar um ponteiro que vc mesmo criou da memória. Rs...pensei que fosse ensinar a criar o Garbage do JAVA...
|
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|