2009-10-27 3 views

Répondre

2

Il existe une classe SessionSize here qui a pour fonction de renvoyer la taille d'un objet HttpSession qui lui est transmis, une partie de la bibliothèque Java Web Parts.

1

Le contenu de la session doit être sérialisable. Donc sérialisez-le et voyez la taille du tableau d'octets résultant.

Ce n'est pas égal à la taille en mémoire, mais peut être utilisé comme une représentation grossière de celui-ci.

P.S. Notez que les champs transitoires, le cas échéant, seront exclus.

+0

Attributs de session ** should ** Serializable (comme dans "c'est une bonne habitude de le faire"); mais ils n'ont pas ** à être. – ChssPly76

+1

La sérialisation de session est un moyen efficace d'économiser de la mémoire en enregistrant des sessions inactives sur le disque. Si Erlanged a une application avec une session non sérialisable, c'est la première chose à corriger au lieu de mesurer la taille des sessions induviduales. –

+1

Re: must/should: le conteneur DOIT accepter l'objet Serializable et PEUT accepter les autres. Il PEUT également lancer IllegalArgumentException sur n'importe quelle exception non sérialisable. Je dirais que Serializable est à peu près obligatoire, d'une manière WE-TOLD-YOU-SO. –

6

MessAdmin vous permet de calculer la taille de HttpSession bien qu'il ne soit pas clair sur la façon dont il calculates the size of transient objects.

Il semble que l'obtention d'une taille approximative de l'objet HttpSession est un exercice inutilisable en production, et on est susceptible d'obtenir une taille plus précise pour un environnement contrôlé. Une chose à noter est que la taille de l'objet de session sérialisé est imprécise en raison des changements dans le codage des caractères - Les chaînes Java sont stockées au format UTF-16 alors que le flux de sortie pourrait être dans un codage différent. Plus de détails sur pourquoi le calcul de la taille d'un objet en Java est un problème, peut être trouvé dans ce JavaWorld article.

+0

Je l'utilise dans une application Web avec struts-2 framework et spring 3.4 comme conteneur d'objet, la taille de session est toujours -1 ce qui signifie qu'il ne peut pas calculer la taille des objets dans la session. –

+0

@Alireza Fattahi J'ai lutté avec le même problème. Et finalement j'ai découvert que vous devez utiliser MessAdmin-SizeOf plugin en plus de MessAdmin-Core et MessAdmin-AutoProb afin d'obtenir la taille des attributs de session. Vous pouvez également ajouter MessAdmin-Serializable. – magicbacon

Questions connexes