11 月 2008 のアーカイブ

ActiveBasic5に追加された新機能その3
~ガベージコレクション~

ActiveBasic5のクラスが値型から参照型に変更されたことは前回紹介しました。

今回はそれに付随して実装された新しい機能「ガベージコレクション」について紹介したいと思います。

ガベージコレクションというのはJAVAC#ではお馴染みに機能なので、

それほど説明は要らないとはおもいますが、ActiveBasic4からの転向者には馴染みがないと思いますので

ここで紹介しておきたいと思います。

 

ガベージコレクションというのはその名の通り、「ガベージ」=「ごみ」、「コレクション」=「収集」であり、

ごみ収集機能のことです。

では、その「ごみ」とは何でしょうか?

それは以下のようなプログラムを動かしたときに分かりやすいと思います。

#console
 
Class GCSample
End Class
 
Dim g As GCSample
 
Dim i As Long
 
For i=0 To 100
    g = New GCSample
Next

上記のプログラムはActiveBasic4までの仕様では一見すると不味いことになること分かると思います。

即ち、New演算子によって確保されたメモリはDeleteしなければならないというルールを無視しています。

このサンプルではNew演算子によって変数gへ次々と新しいクラスのインスタンスを作っては上書きを行っています。

つまり、上書きされてしまったクラスのインスタンスにはアクセスできない状態になっています。

この何処からもアクセスすることのできないクラスのインスタンスが実はごみの正体です。

ガベージコレクションはこのようにプログラムに使用しなくなったクラスを集めて、

プログラムの実行中、または終了時に、自動的にまとめて破棄する機能です。

この機能によって、皆さんは「以前のメモリリークを気にしながらのプログラミング」から解放されることになります。

しかし、いいことばかりではありません。

ガベージコレクションが実装されていると、やはりパフォーマンスの低下は避けられません。

特に現在、ActiveBasic5に実装されているガベージコレクションはお世辞にも言えぬほど遅いです。

このスピードアップがActiveBasic5の正式版リリースに含まれるかどうかは分かりませんが、

近い内に改良しなければならないでしょう。

 

ッて、ことで大体の大きな仕様変更は紹介できたので、次回から色々なプログラミングを試してみたいと思います。

お楽しみにw

Comments コメントなし »