> というわけで、ニュースグループ再開発ということで、
> Followup-To: fj.comp.lang.implementation です。

# もっと早く適切なグループに移るべきでしたね。

yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:

> PostScript は、GC 要らないと思ったんだけど。明示的にsave で
> マークして restore すればその場所まできれいに忘れる。

えーと、
/x 100 string def
/x () def
とやったら、長さ100の文字列がゴミになると思うんですが。

その他、配列とかいろんなデータを、
・動的に割り付けて、
・それへの参照を(オペランドスタックや辞書スタックと無関係に)必要な間ずっ
  ととっておいて、
・最終的にその参照を切る
ことができるので、ゴミが出ちゃいます。

> Forth だと forget なんとかで、定義(alloc)したワードを全部忘れます。

Forthで使えるメモリは、スタックとページ(でしたっけ? メモリ上の仮想ファ
イルみたいなもの)だけですよね。

> GC というと、PHP とかめちゃくちゃだと聞きました。どうなんで
> すか。

きちんと調べてないので嘘かも知れませんが、ぱっとソースを読んだ限りPHP
には、まともなGCが付いてないと思います。あれでサーバソフトを書いた日に
は、使用メモリ量が単調増加していくんじゃないかと。

# Bohemらの保守的GCライブラリをリンクするだけで解決するかも。

> Java の VM の GC ですが、メモリ余っているのに動き出しちゃい
> ますね。GC 走らせないで実行時間を計りたいのに。ただ、GC が
> 頻繁に発生しても、OS レベルで見た時の仮想記憶のワーキング・
> セットが小さくなるなら、その方がいいみたい。

この辺はなかなか難しい問題です。

メモリを使い尽くすまでGCしないほうが仕事量(実行する命令の数)としては少
ないんですが、キャッシュミスやページフォルトを考えるとそれが最適とは限
りません。

2次キャッシュにおさまる程度の量を割り付けるごとに、もっとも若い世代の
領域をGCすることが多いと思います。

現在のJavaの実装は、GC関連でいじれるパラメータが山のようにありますので、
いろいろ試すと場合によってはかなり性能が変わるかも知れません。
http://java.sun.com/docs/hotspot/VMOptions.html
http://java.sun.com/docs/hotspot/gc1.4.2/

                                前田敦司