Comment et quand est une @ViewScoped bean détruit en JSF?
Le cycle de vie de la @RequestScoped
et @SessionScopedBean
géré haricots sont gérées par le conteneur de Servlet lui-même, car ils sont essentiellement stockées en tant qu'attribut de HttpRequest
et HttpSession
respectivement. Comment faire JSF gérer le cycle de vie de la @ViewScopedBean
? Je sais qu'il est créé lorsque la vue est créée et est utilisable jusqu'à il y a une publication à une autre vue. Mais j'ai trouvé que n'est pas nettoyée immédiatement après nous déplacer à partir de ce point de vue.
Une fois un managed bean action méthode retourne un valide de navigation en cas de résultats, même si c'est pour le même point de vue, la vue étendue de managed bean sera garbaged et recréé. Lire ce balusc.blogspot.co.il/2011/09/communication-in-jsf-20.html et c'est là qu'ils stockés : stackoverflow.com/a/9177769/617373
Eh bien, en réalité, vous n'êtes pas censé être en mesure de prédire gc ou le faire se produire immédiatement êtes-vous? Mais en ce qui concerne la viewscoped les haricots dans la mojarra, voir stackoverflow.com/a/13097208/1530938
la collecte des ordures est asynchrone. lorsque la portée de vue est "détruit", il est vraiment juste "marqué prêt à être nettoyés", tout comme tous les autres objets java. Remarque: le marquage est vraiment un compteur de référence de 0 (c'est à dire marqué "n'est plus utilisé").
Eh bien, en réalité, vous n'êtes pas censé être en mesure de prédire gc ou le faire se produire immédiatement êtes-vous? Mais en ce qui concerne la viewscoped les haricots dans la mojarra, voir stackoverflow.com/a/13097208/1530938
la collecte des ordures est asynchrone. lorsque la portée de vue est "détruit", il est vraiment juste "marqué prêt à être nettoyés", tout comme tous les autres objets java. Remarque: le marquage est vraiment un compteur de référence de 0 (c'est à dire marqué "n'est plus utilisé").
OriginalL'auteur Geek | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
Il sera détruit lors de la
une publication avec un non-
null
résultat est exécutée,ou, le nombre de (logique) vues en session a dépassé et au point de vue particulier est le premier dans la LRU, de la chaîne (dans Mojarra, c'est configureable par
com.sun.faces.numberOfViewsInSession
etcom.sun.faces.numberOfLogicalViews
paramètres de contexte, chacune avec une valeur par défaut de 15),ou, le nombre de actieve afficher les étendues dans la session a dépassé (dans Mojarra, qui est codé en dur limite de 25), voir aussi JSF 2.2 Consommation de Mémoire: Pourquoi ne Mojarra garder le ViewScoped en grains de la dernier 25 Vues dans la Mémoire?
ou, la session a expiré.
Il va donc pas être détruit lorsque la page est déchargée, comme résultat de cliquer sur un lien vers une autre page, ou de l'actualisation de la page, ou de la fermeture du navigateur à onglet/fenêtre. Le haricot vivent aussi longtemps jusqu'à ce que l'une des conditions citées ci-dessus est remplie. Pour la détruire au cours de déchargement de toute façon, envisager d'utiliser OmniFaces
@ViewScoped
à la place.1) Oui. Elles sont stockées dans une LRU carte, classées par ordre de dernière utilisation. La moins récemment utilisée est la 1ère entrée. 2) Voir stackoverflow.com/questions/12562469/...
existe-il des solutions pour destory viewscoped haricots plus vite ? va ominfaces viewscoped annotation aider avec ça ?
dans icefaces il y a une annotation @WindowDisposed.sur la fermeture du navigateur lui-même la vue d'obtenir des ordures collectées
Peut-être ajouter quelques infos à propos de la js immédiatement le faire sur "décharger"?
OriginalL'auteur BalusC