2009-10-27 12 views

risposta

2

C'è una classe SessionSize here che ha una funzione per restituire la dimensione di un oggetto HttpSession passato ad esso, una parte della lib Java Web Parts.

1

Il contenuto della sessione deve essere serializzabile. Quindi serializzalo e vedi la dimensione della matrice di byte risultante.

Non è uguale alla dimensione in memoria, ma può essere utilizzato come rappresentazione approssimativa di esso.

P.S. Si noti che i campi transitori, se presenti, saranno esclusi.

+0

Gli attributi di sessione ** devono essere serializzabili (come in "è una buona pratica farlo"); ma non ** devono ** essere. – ChssPly76

+1

La serializzazione della sessione è un modo efficace per risparmiare memoria salvando le sessioni inattive su disco. Se Erlanged ha app con sessione non serializzabile, è la prima cosa da correggere invece di misurare le dimensioni delle sessioni induviduali. –

+1

Oggetto: deve/dovrebbe: contenitore DEVE accettare l'oggetto serializzabile e MAGGIO accettarne altri. Può anche lanciare IllegalArgumentException su qualsiasi non serializzabile. Direi che Serializable è praticamente DEVE, in un modo WE-TOLD-YOU-SO. –

6

MessAdmin consente di calcolare la dimensione di HttpSession anche se non è chiaro su come è calculates the size of transient objects.

Sembra che ottenere una dimensione approssimativa dell'oggetto HttpSession sia un esercizio inutile in fase di produzione e che uno possa ottenere una dimensione più accurata per un ambiente controllato.

Una cosa da notare è che le dimensioni dell'oggetto Session serializzato è destinata a inesatte a causa di cambiamenti nella codifica dei caratteri - stringhe in Java vengono memorizzati nel formato UTF-16, mentre il flusso di uscita potrebbe essere in una codifica diversa. Maggiori dettagli sul perché il calcolo della dimensione di un oggetto in Java è un problema, può essere trovato in questo JavaWorld article.

+0

Lo sto utilizzando in un'applicazione web con struts-2 framework e spring 3.4 come contenitore di oggetti, la dimensione della sessione I è sempre -1, il che significa che non è possibile calcolare la dimensione degli oggetti nella sessione. –

+0

@Alireza Fattahi Ho lottato con lo stesso problema. E alla fine ho scoperto che è necessario utilizzare il plugin MessAdmin-SizeOf oltre a MessAdmin-Core e MessAdmin-AutoProb per ottenere la dimensione degli attributi di sessione. Si consiglia di aggiungere anche MessAdmin-Serializable. – magicbacon

Problemi correlati