? Java usa um sistema de coleta de lixo para gerenciamento de memória. Enquanto isso leva uma carga excepcional fora do desenvolvedor - ele não tem mais para garantir os objetos são removidos manualmente da memória quando eles não estão mais em uso - mas também pode tirar algumas funcionalidades que os desenvolvedores de outras origens podem ser acostumado. Embora a funcionalidade de finalização não é exactamente o mesmo como um destruidor C + + , pode ser considerado o mais próximo de um análogo da linguagem Java fornece . Visão Geral de Coleta de Lixo
A coleta de lixo é um dos tópicos mais avançados em programação Java. Estritamente falando , os desenvolvedores Java pode ir carreiras inteiras sem nunca precisar saber muito sobre o coletor de lixo e como ele funciona . Essencialmente , cada objeto criado em um programa Java é registrado com o tempo de execução Java, juntamente com uma contagem de todos os lugares há uma referência existente para esse objeto. Quando um objeto já não é referido por quaisquer outros objetos , o sistema marca-o para coleta, e na próxima vez que o coletor de lixo é executado, ele exclui o objeto.
Básico de gerenciamento de memória em C + + < br >
as coisas são diferentes em outras linguagens de programação , como C + + , por exemplo. Em C + + , o promotor controla quando um objecto é removido da memória , ao contrário do sistema . Isto é conhecido como " gerenciamento de memória determinista ", e tem tanto seus prós e contras . O lado positivo principal para isso é que o desenvolvedor sabe exatamente quando no código o objeto é excluído . No entanto, é extremamente fácil de excluir um objeto que ainda possam estar em uso em outras partes do código.
Destruidores e Finalize
Em C + + , os desenvolvedores podem adicionar um destruidor de uma classe, que é um método que é chamado sempre que um objeto é excluído . Isso permite que o desenvolvedor para executar código quando o objeto não é mais necessário , talvez para apagar os seus filhos ou para limpar os recursos . Em Java , o sistema fornece o método finalize , que os desenvolvedores podem substituir para fornecer uma funcionalidade semelhante. A principal diferença é que o método finalize é chamado sempre que o tempo de execução determina que o objeto não tem mais referências e podem ser coletadas .
Use Com Cuidado
Enquanto finalize pode fornecer funcionalidade semelhante ao destruidor do C + +, ele realmente deve ser usado com cuidado . De um modo geral , ao substituir o método finalize pode ser perfeitamente bem para a maioria das situações , você não deve contar com ele para garantir recursos são limpos em um determinado momento . Por exemplo, se você tiver uma conexão de banco de dados aberto em um objeto que está fechado em finalizar , você ainda pode potencialmente criar muitas conexões com o banco de dados e passar o limite do banco de dados antes que o coletor de lixo finalizou todos os objetos - mesmo se você não já não têm referências a eles em qualquer lugar.