- - PR -
セッション情報のメモリ使用容量について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-09 20:52
参考までに、Tomcat5以上ならば、
http://www.lambdaprobe.org/d/index.htm のような、ものすごく便利なものがあります。 でも、Oracle Application Server 10gdではだめですね。 | ||||
|
投稿日時: 2007-02-09 22:16
>サイズまではわかりませんが、ValueObject系なら多少の目安にはなるかなと。
StringはUTF8でエンコードされるので、ASCII文字列なら1/2になります。 逆に、日本語onlyの文字列だったら五割増になってしまいます。 MapやHashtableでは、検索用のデータ構造をキーと値から再構成します。 だから、HashMapをシリアライズしたサイズは実際のメモリー消費よりずっと小さくなります。 そこそこ正確に反映されるのは、primitive型の配列ぐらいでしょう。 ASCII文字列をキーとするHashMapとかだと・・・・・・ | ||||
|
投稿日時: 2007-02-09 22:24
完全なクラス情報が書き出されるのは一度だけですよ。 同じクラスのインスタンスは二つめ以降はクラスのポインタが出力されます。 個々のインスタンスを複数回writeObject()した場合も一度しかされません。 というわけで、純粋なオブジェクト数で言えばヒープ上と変わりないです。 | ||||
|
投稿日時: 2007-02-09 22:32
なかなか正確な数値をとることは難しそうですね。
サーバーにつけるのメモリ容量など皆さんはどのようにしているのかと 思ったのですが。経験などからやっておられるのでしょうか? | ||||
|
投稿日時: 2007-02-09 23:23
>完全なクラス情報が書き出されるのは一度だけですよ。
そうですね。 ただ、ヒープ上ではインスタンス毎にクラス情報を保持しているわけではないでしょうから。 たとえば Sun の JVM であれば Permanent 領域のクラス定義へのポインタを保持しているだけだと思います。 シリアライズしたバイト列はヒープ上のインスタンスが占めているバイト列よりも冗長だと思います。 実際に比較したわけではないのであくまで予想ですが。 >サーバーにつけるのメモリ容量など皆さんはどのようにしているのかと >思ったのですが。経験などからやっておられるのでしょうか? 私は以前実際にセッションを生成して計測しました。 特殊なコーディングや設定をしなければセッションはヒープ領域上に保持されますので純粋に多人数分のテストケースを回して減ったへー婦領域を人数で割れば良いわけです。 [ メッセージ編集済み 編集者: インギ 編集日時 2007-02-09 23:27 ] | ||||
|
投稿日時: 2007-02-10 00:18
クラス情報はオブジェクトが少なければ影響が大きいでしょうけど、 ある程度の数になってしまえば誤差範囲ではないでしょうか。 どちらかが多いかは計測してみる必要はありそうですが、 シリアル化されたデータの方が大きいとは限らないのでは? 例えば、byteやshortはヒープ上ではパディングに影響されて 実際に必要なバイト数よりも大きく確保されたりするでしょうし、 コレクション系のクラスは内部構造を省略して出力します。 私はむしろ、ヒープ上の方が大きそうだと思っています。 #本題から離れてしまっていますね。。 #スレ主さん、ごめんなさい。 |