2009-06-22 7 views

Répondre

11

destroy() sera appelé par le conteneur servlet au moment où le servlet sera arrêté. finalize() est appelée par la JVM avant que le garbage-collector ne réclame les objets (et n'est pas garanti d'être appelé du tout).

+0

Merci pour l'explication –

3

De même, finalize() peut être appelé ou non. Ne comptez jamais sur ce qui se passe.

0

La méthode finalize() est appelée lorsque l'objet sort de la portée et est éligible pour la récupération de place. Donc la méthode destroy() est appelée avant quand l'objet n'est pas hors de portée.

+0

Non, finalize() * peut * être appelé lorsque l'objet va es hors champ. Il n'est pas garanti d'être appelé avant la fermeture de la JVM. –

+0

@mmyers - La méthode finalize() ne peut pas être invoquée avant que l'objet ne soit hors de portée, mais la méthode destroy() doit être invoquée avant que l'objet ne soit hors de portée. Par conséquent, détruisez la méthode toujours appelée avant de finaliser la méthode. –

+0

True, * si * finalize() est appelé, il sera appelé après destroy(). Il semblait juste trompeur de dire que "la méthode finalize() sera appelée ..." au lieu de "la méthode finalize() peut être appelée ..." –

-1

Si vous souhaitez libérer des ressources à une certaine heure, ne comptez pas sur un code externe comme le conteneur de servlet ou la JVM pour le faire. Faites votre allocation et désaffectation des ressources aussi explicite que possible. Les bogues Nasty peuvent être le résultat de dépendre du code externe pour nettoyer après vous.

+0

C'est plutôt paranoïaque de votre part. Si le conteneur de servlet n'appelle pas destroy() au moment approprié, alors c'est de la merde et devrait être remplacé par un autre. Vous ne pouvez pas traverser la vie en ré-inventant constamment la roue, c'est ce que les serveurs d'applications sont là pour, – skaffman

+0

Le fait est que la méthode destroy() peut être appelée après un laps de temps considérable. C'est pourquoi j'ai dit "à un certain moment", ce qui signifie que libérer des ressources explicitement de votre propre code est la seule façon d'avoir le contrôle sur QUAND la ressource est libérée. Bien sûr, vous devriez compter sur le conteneur de servlet pour faire son travail, mais dans certains cas cela peut prendre trop de temps. –

0

Il suit 5 étapes

  1. Constructor
  2. init()
  3. Service() >> doGet() ou doPost()
  4. destroy()
  5. finalize()
Questions connexes