- PR -

セッション情報のメモリ使用容量について

投稿者投稿内容
つばさ
ベテラン
会議室デビュー日: 2005/02/05
投稿数: 54
投稿日時: 2007-02-09 20:52
参考までに、Tomcat5以上ならば、
http://www.lambdaprobe.org/d/index.htm
のような、ものすごく便利なものがあります。

でも、Oracle Application Server 10gdではだめですね。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2007-02-09 22:16
>サイズまではわかりませんが、ValueObject系なら多少の目安にはなるかなと。

StringはUTF8でエンコードされるので、ASCII文字列なら1/2になります。
逆に、日本語onlyの文字列だったら五割増になってしまいます。

MapやHashtableでは、検索用のデータ構造をキーと値から再構成します。
だから、HashMapをシリアライズしたサイズは実際のメモリー消費よりずっと小さくなります。

そこそこ正確に反映されるのは、primitive型の配列ぐらいでしょう。
ASCII文字列をキーとするHashMapとかだと・・・・・・
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-09 22:24
引用:

インギさんの書き込み (2007-02-09 09:50) より:
例えば直列化された形式には型がフルパッケージ名で記録されていると思うのですが、ヒープ内でインスタンスを保持するときには型のポインタが記されているだけですよね?もちろん実装にもよりますが。



完全なクラス情報が書き出されるのは一度だけですよ。

同じクラスのインスタンスは二つめ以降はクラスのポインタが出力されます。
個々のインスタンスを複数回writeObject()した場合も一度しかされません。

というわけで、純粋なオブジェクト数で言えばヒープ上と変わりないです。
うな
会議室デビュー日: 2003/10/13
投稿数: 15
投稿日時: 2007-02-09 22:32
なかなか正確な数値をとることは難しそうですね。
サーバーにつけるのメモリ容量など皆さんはどのようにしているのかと
思ったのですが。経験などからやっておられるのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-02-09 23:23
>完全なクラス情報が書き出されるのは一度だけですよ。
そうですね。
ただ、ヒープ上ではインスタンス毎にクラス情報を保持しているわけではないでしょうから。
たとえば Sun の JVM であれば Permanent 領域のクラス定義へのポインタを保持しているだけだと思います。
シリアライズしたバイト列はヒープ上のインスタンスが占めているバイト列よりも冗長だと思います。
実際に比較したわけではないのであくまで予想ですが。

>サーバーにつけるのメモリ容量など皆さんはどのようにしているのかと
>思ったのですが。経験などからやっておられるのでしょうか?
私は以前実際にセッションを生成して計測しました。
特殊なコーディングや設定をしなければセッションはヒープ領域上に保持されますので純粋に多人数分のテストケースを回して減ったへー婦領域を人数で割れば良いわけです。

[ メッセージ編集済み 編集者: インギ 編集日時 2007-02-09 23:27 ]
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-10 00:18
引用:

インギさんの書き込み (2007-02-09 23:23) より:
シリアライズしたバイト列はヒープ上のインスタンスが占めているバイト列よりも冗長だと思います。



クラス情報はオブジェクトが少なければ影響が大きいでしょうけど、
ある程度の数になってしまえば誤差範囲ではないでしょうか。

どちらかが多いかは計測してみる必要はありそうですが、
シリアル化されたデータの方が大きいとは限らないのでは?

例えば、byteやshortはヒープ上ではパディングに影響されて
実際に必要なバイト数よりも大きく確保されたりするでしょうし、
コレクション系のクラスは内部構造を省略して出力します。

私はむしろ、ヒープ上の方が大きそうだと思っています。

#本題から離れてしまっていますね。。
#スレ主さん、ごめんなさい。

スキルアップ/キャリアアップ(JOB@IT)