[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 <----

In This Thread

Prev Next