Javaトリビア@阿部
どもです。
開発チームの阿部です。
最近は仕事でC#と格闘しております(笑)。
C#を使いこなせているわけではありませんが、画面デザインをVBのごとく簡単に作れるのは本当に助かります。
画面などのUIを作る部分は結構手間が掛かるところですから、それだけでも恩恵を受けられます。
で、話を戻して今回の「Javaトリビア」です。
それは「ガベージ・コレクション(略してGC)」です。
JavaやC#等でバリバリとソースコードを書いている方は読み飛ばして頂いて構いません(笑)。
JavaやC#では、new で確保したメモリを明示的に解放しなくても、プログラムから参照されなくなったメモリ(オブジェクト)を自動で検出して削除し、メモリ空きを確保してくれるという、ありがたい機能です。
私のようにCやC++を経由してきている技術者の方の中には、
「デストラクタが無い!!」
とか
「delete が無い!!」
と叫んでおられる方もいると思います。
(実は私もイマイチ馴染めない部分ではあります・・・)
ただ、コレくらいの内容だと「トリビア」とは言えませんね。
ご存知の方もいるでしょうが、この「ガベージ・コレクション」の効率を上げる方法があります。
やり方はいたって簡単。
メモリ(オブジェクト)を代入している変数(自動変数、クラスメンバ)に、意図的に「null」を設定して、明示的に「俺はこのメモリはもう使ってないぜ!!」としてあげるだけです。
JavaScriptやJavaアプレットであれば、そんな意識は必要ないでしょうが、スタンドアローンのJavaアプリでメモリの確保を頻繁に行う場合は、この手法が有効です。
マシンは大容量のメモリを積んでいるのに、Javaアプリの動作が進んでいくうちに何だか不安定になってきた場合は、起動時オプションでメモリ空き空間(「ヒープ」といわれるやつです)を監視しながら、この手法を用いてみると効果が判ると思います。
C#では、まだ試していませんが、おそらくこの手法は使えるのではないかと予想しています。
ちなみにこの手法は、私の実体験談でもあります・・・(苦笑)
以上、Javaトリビアでございました〜。