世代別GC

昨日のMatzにっきを読んで、世代別ガベージコレクション(Generational Garbage Collection)、という言葉が気になったので調べてみた。

このWikipediaの説明でザックリと理解でき、さらに次のコラムでよりJavaの場合の具体的な処理の流れが分かる。

全く違う分野でも応用が利きそうな気もしてくる。
なんにせよ、このアルゴリズムの肝は次のような特性が見つけられ、それをうまく活かした対応である、ということだ。

「計算途上で利用される一時オブジェクトは数が多く、かつすぐさま破棄される率が高い」「ある程度長く生存したオブジェクトは、以降も長く生存する率が高い」という傾向

世代別ガベージコレクション - Wikipedia

最適化作業の基本の一つ、現状を把握する、である。

Ruby/Tk:ウィンドウを増やすテスト

ボタンをクリックするたびにウィンドウを追加する方法を調べてみました。

参考書

Ruby/Tkについて、とても参考になる記述が多い本が手元にあったので、順を追って読み進めています。

Rubyアプリケーションプログラミング

Rubyアプリケーションプログラミング

TkToplevel

上述した参考書「Rubyアプリケーションプログラミング」のp300にルートウィジェット等の説明があります。ここにトップレベウィジェット(TkToplevel)について次のように書かれています。

トップレベウィジェットは、「新たなウィンドウとして作成される」という重要な点を除き、フレームウィジェットと同じです。新たなルートウィジェットといってもよいでしょう。

つまりこれを使えば新しくウィンドウを作ることは簡単に出来そうだ。
また、TkToplevelクラスについては、ソース(自分の環境の場合、C:/ruby/lib/ruby/1.8/tk/toplevel.rb)を見ると簡単な使い方は想像できる。

class TkToplevel<TkWindow
  # -- 略 -- #
  def initialize(parent=nil, screen=nil, classname=nil, keys=nil)
    # -- 略 -- #
      @classname = keys['class']
      @colormap  = keys['colormap']
      @container = keys['container']
      @screen    = keys['screen']
      @use       = keys['use']
      @visual    = keys['visual']
  # -- 略 -- #
end

ウィンドウのタイトルは変更できないのかな?

コード

以上のようにあれこれ調べて、実際に動作に成功したコードを以下に載せておきます。
ウィンドウそれぞれについて何か処理を行いたくなるのは目に見えているので、簡単なクラスを定義しています。

続きを読む