Out of Memory

本ブログは更新を停止しました。Aerieをよろしくお願いいたします。

目次

Blog 利用状況

ニュース

2009年3月31日
更新を停止しました。引き続きAerieを御愛顧くださいませ。
2009年2月3日
原則としてコメント受付を停止しました。コメントはAerieまでお願いいたします。
詳細は2月3日のエントリをご覧ください。
2008年7月1日
Microsoft MVP for Developer Tools - Visual C++ を再受賞しました。
2008年2月某日
MVPアワードがVisual C++に変更になりました。
2007年10月23日
blogタイトルを変更しました。
2007年7月1日
Microsoft MVP for Windows - SDKを受賞しました!
2007年6月20日
スキル「ニュース欄ハック」を覚えた!
2006年12月14日
記念すべき初エントリ
2006年12月3日
わんくま同盟に加盟しました。

カレンダー

中の人

αετο? / aetos / あえとす

シャノン? 誰それ。

顔写真

埼玉を馬鹿にする奴は俺が許さん。

基本的に知ったかぶり。興味を持った技術に手を出して、ちょっと齧りはするものの、それを応用して何か形にするまでは及ばずに飽きて放り出す人。

書庫

日記カテゴリ

オブジェクト≠インスタンス

先日のオブジェクト指向分科会で一席打たせて頂いた際に、「オブジェクトとは何ぞや?」という問いの一つの答えとして「メッセージを受け取れるもの」という話をしました。
メッセージとは、C++の流れを汲むC#やJavaといった言語ではメソッドやプロパティという形をとっており、要するに「メソッドやプロパティを持つものがオブジェクトである」と言うことができます。
インスタンスは当然それらを持ちますが、インスタンスに関連づかない、静的メソッドや静的プロパティというものもあります。これらはどう考えればいいのでしょうか?

メソッドやプロパティを持つものがオブジェクトであれば、クラスもまたオブジェクトの一つであると言えるでしょう。
スピーチが終わった後の井戸端談義でfkojimaさんにフォローしていただきましたが、たとえばnewというやつは、クラスに対する「その型の新しいインスタンスを作ってくれ」というメッセージです。
#new はクラスに対して発行するという点で静的、インスタンスメンバにアクセスできるという点で動的という、特異な性質をもってはいますけどね。

というところでこの日記。
かつのりさんのGCについて勘違いしている人が結構多い
お題はJavaですが、static変数もクラスローダが到達不可能になればGCの対象になるという話がされています。

これ、考えようによってはですよ。
クラス自体も何らかのインスタンスであり、その「クラスのクラス」にあたるものがクラスローダである、という考えはできないでしょうか?
クラス自体も静的なものではなく、必要に応じてメモリ上にロードされたりアンロードされたりする。クラス自体も何らかのクラスのインスタンスであり、であるが故にGCの回収対象となる。
実際、クラスのクラスに当たる「メタクラス」という概念はあります。それはJavaのクラスローダや.NETのSystem.Typeとは必ずしも同じものではないんですが、それに近しいものです。
#プロトタイプベースオブジェクト指向ですと、クラス=インスタンスですね。

投稿日時 : 2007年7月31日 9:58

Feedback

# re: オブジェクト≠インスタンス 2007/07/31 10:35 凪瀬

そのあたり、私も考えました。
Javaの場合、クラスを意味するjava.lang.Classというクラスがあるのですが、VM上でのクラスの操作は実質的にこのクラスのインスタンスへの操作として行われています。(なんか単語が混在してややこしい…)
ここで、new 演算子を Classオブジェクトからオーオーバーロード一致するConstractorオブジェクトを取得し、newInstance()を呼び出すシンタックスシュガーなのだと捕らえると、綺麗にまとまります。
この辺、あとで記事にまとめますね。

# 内部クラスの階層 2007/07/31 23:05 凪瀬 Blog

内部クラスの階層

# 内部クラスの階層 2007/07/31 23:07 凪瀬 Blog

内部クラスの階層

タイトル
名前
Url
コメント