2009-10-27 12 views

答えて

2

SessionSizeクラスhereには、渡されたHttpSessionオブジェクトのサイズ(Java Web Parts libの一部)を返す関数があります。

1

セッションの内容はシリアル化可能でなければなりません。したがって、それをシリアル化し、結果のバイト配列のサイズを参照してください。

メモリ内のサイズと同じではありませんが、その大まかな表現として使用できます。

P.S.一時フィールドがある場合は除外されることに注意してください。

+0

**セッション属性**はシリアライズ可能である必要があります(「そうすることをお勧めします」)。しかし、彼らは**持っていない**。 – ChssPly76

+1

セッションのシリアル化は、アイドルセッションをディスクに保存してメモリを節約するのに効果的な方法です。 Erlangedが直列化不可能なセッションを持つアプリを持っている場合、それは誘導セッションのサイズを測定するのではなく、まず修正することです。 –

+1

Re:必須/必須:コンテナは直列化可能なオブジェクトを受け入れなければならず、他のものを受け入れなければならない(MUST)。また、直列化不可能なものに対してIllegalArgumentExceptionをスローすることがあります。私は、シリアライザブルは、WE-TOLD-YOU-SOのやり方で、かなり多くなければならないと言っています。 –

6

MessAdminは、どのようにそれがcalculates the size of transient objectsであるかは不明ですが、HttpSessionサイズを計算できます。

HttpSessionオブジェクトのおおよそのサイズを取得することは、プロダクションでは無駄な作業であり、制御された環境ではより正確なサイズが得られるようです。

シリアル化されたセッションオブジェクトのサイズは、文字エンコーディングの変更により不正確になることに注意してください。Javaの文字列はUTF-16形式で格納されますが、出力ストリームは異なるエンコーディングである可能性があります。 Javaでオブジェクトのサイズを計算するのがなぜ難しいかについての詳細は、JavaWorld articleにあります。

+0

私はstruts-2フレームワークとSpring 3.4をオブジェクトコンテナとして使用するWebアプリケーションでこれを使用しています。セッションサイズは常に-1です。つまり、セッション内のオブジェクトのサイズを計算できません。 –

+0

@Alireza Fattahi私は同じ問題で苦労しました。そして最終的には、セッション属性のサイズを取得するためにMessAdmin-CoreとMessAdmin-AutoProbに加えてMessAdmin-SizeOfプラグインを使用する必要があることが分かりました。 MessAdmin-Serializableを追加することもできます。 – magicbacon

関連する問題