[ruby-list:488] Re: memory size
From:
Date:
1996-09-04 07:22:20 UTC
List:
ruby-list #488
けいじゅ@SHLジャパンです. In [ruby-list :00486 ] the message: "[ruby-list:486] Re: memory size ", on Sep/04 15:11(JST) matz@caelum.co.jp (Yukihiro Matsumoto) writes: >|正確には, B.clearです. > >むむむ,それでは配列が大きくなっている可能性がありますね.現 >在公開しているバージョンの配列は今まで配列に格納された最大領 >域(+α)だけの領域を確保して小さくなることがありません. > >これはclearしても同様です. そうですか. でもその方が好都合かも... というのも, 今のrubyには配列やハッシュ表をあるサイズで生成することがで きませんよね. どうせそのサイズになると分かっているのなら, そのサイズ が前もって指定できた方が効率的だと思うのですが? >普通のobject > > インスタンス変数が無い時 = 20 byte > インスタンス変数がある時 ≒ 48 + 12*変数の数 + 4*変数の数/3 byte 内部では, ハッシュ表を使っているという話しでしたからね... 今は, シンボ ルとかもありますし, メンバ=クラス毎のシンポルですからsequence に id を 割り振ることもできると思うのですが... >hash > > サイズ ≒ 48 + 12*要素数 + 4*要素数/3 byte > >array > > サイズ = 20 + 4*最大要素数 > >string > > リテラルから生成されたもの = 20 byte > 上記以外 = 20 + 文字列の長さ+1 byte >こうしてみるとハッシュテーブルを持つものの大きさが馬鹿になり >ませんね.ちょっと見直しの余地があるかなあ. 忘れていた. fixnum/bignumも教えて下さい. 特に, オブジェクトがきになりますよね. そうですねえ. 例のプログラムも単純にオブジェクト数が多いだけかも知れま せん. 30000オブジェクトで1オブジェクト8インスタンス変数ですから: 約4.6MB 1オブジェクトあたり文字列が15/8/10/10のサイズがありますから: 約4.0MB あと, 最終的に30000オブジェクトはいるハッシュ表が2つで: 約1.OMB 合計 約10MB でその他にもオブジェクトをかなり生成しているので実プロセス サイズが 14MBになるのもそれほど変ではない?? 1.4倍の差は大きいという話 しもあるが... __ ..........................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----