(57)【要約】【課題】オブジェクト生成地点記録方法およびプログラムを提供することである。【解決手段】上記課題を解決するために第１の態様として、オブジェクトの生成地点を記録する方法であって、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトの生成地点ごとに異なる、生成地点ディスクリプタを指すポインタに置き換えるステップと、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタを経由して行うステップ、を有する、オブジェクトの生成地点記録方法を提供する。【選択図】図３
2011133919.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトの生成地点を記録する方法であって、
オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、
前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、
前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、
を有する、オブジェクトの生成地点記録方法。 
【請求項２】
前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用する、請求項１記載の方法。
【請求項３】
前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用する、請求項２記載の方法。
【請求項４】
さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集するステップと、
前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行うステップ
を有する請求項１記載の方法。
【請求項５】
さらに、前記拡張領域にクラス情報の一部をコピーするステップを有する請求項４記載の方法。
【請求項６】
前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用する、請求項５記載の方法。
【請求項７】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用するステップを有する、請求項１記載の方法。
【請求項８】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意するステップを有する、請求項１記載の方法。
【請求項９】
オブジェクトの生成地点を記録するシステムであって、
オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスと前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換える手段と、
前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用する手段と、
前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行う手段、
を有する、オブジェクトの生成地点記録システム。 
【請求項１０】
前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用する、請求項９記載のシステム。
【請求項１１】
前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用する、請求項１０記載のシステム。
【請求項１２】
さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集する手段と、
前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行う手段
を有する請求項９記載のシステム。
【請求項１３】
さらに、前記拡張領域にクラス情報の一部をコピーする手段を有する請求項１２記載のシステム。
【請求項１４】
前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用する、請求項１３記載のシステム。
【請求項１５】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用する手段を有する請求項９記載のシステム。
【請求項１６】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意する手段を有する請求項９記載のシステム。
【請求項１７】
オブジェクトの生成地点を記録するプログラムであって、該プログラムがコンピュータに、
オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、
前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、
前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、
を実行させる、オブジェクトの生成地点記録プログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はオブジェクトの生成地点を記録する方法に関し、特に低コストで生成地点を記録する方法およびプログラムに関する。
【背景技術】
【０００２】
Java (商標) などのオブジェクト指向言語を用いて大規模アプリケーションを構築することが一般的になっている。このようなシステムで起きる問題の一つに、オブジェクトが大量に生成され、GC (Garbage Collection) によっても回収されず、ヒープが使い尽くされてダウンするというものがある。この問題を解決するには、システムダウン時のメモリダンプを取得し、ヒープに残っている各オブジェクトがアプリケーションのどのコードによって生成されたか、つまり「オブジェクトの生成地点」を調べる機能が重要となる。
【０００３】
しかし、JVMTI (Java VirtualMachine Tool Interface) などを用いてオブジェクトの生成地点を生成の度にロギングする手法では実行が極端に遅くなる上、記録用の領域が膨大なサイズになるという問題がある。また、実行中に生成地点ごとの特性を集計し最適化に用いることも難しい。一方、各オブジェクトに生成地点を記録する領域を追加する手法では、実行時のオーバヘッドは少ないが、そのためのメモリが余計に必要となり、メモリ不足を解消する方法としては使えない。また最適化のためにオブジェクト生成地点ごとの情報を集計するのも難しい。
【０００４】
従来の方法として特許文献１または非特許文献１などがある。Java 処理系向けにオブジェクトヘッダ内にもともと存在している「hashcode」という領域を利用して、そこに生成地点の情報を変換して（コード化して）埋め込むという方法である。しかし、この方法はそのような領域が存在しないオブジェクトモデルでは使用できない。また生成地点を変換するコストなどのオーバヘッドがあるという弱点がある。そして生成地点情報が変換されているのでアプリケーションの実行中にその情報を利用することを困難にしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特願２００９−４９７２７
【非特許文献】
【０００６】
【非特許文献１】千葉 "スレッド別ごみ集めにおけるライトバリアの高速化", 情報処理学会論文誌：プログラミング, Vol.45, No.SIG5, pp.53-61,2004.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、本発明の課題は、オブジェクトの生成地点に関する情報を、少ないメモリオーバヘッドで記録する方法を提供することである。またアプリケーションの実行中に処理系がオブジェクトの生成地点を判別できるようにすることである。またオブジェクトの生成地点に関する情報を利用してオブジェクトの再配置やオブジェクト生成場所の最適化を行うことである。
【課題を解決するための手段】
【０００８】
本発明は、上記課題を解決するために、オブジェクトの生成地点を記録する方法であって、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、を有するようにする。
【０００９】
前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用するようにする。
【００１０】
前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用するようにする。
【００１１】
さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集するステップと、前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行うステップを有するようにする。
【００１２】
さらに、前記拡張領域にクラス情報の一部をコピーするステップを有するようにする。
【００１３】
前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用するようにする。
【００１４】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用するステップを有するようにする。
【００１５】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意するステップを有するようにする。
【００１６】
別の態様として、本発明は、オブジェクトの生成地点を記録するシステムであって、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスと前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換える手段と、前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用する手段と、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行う手段、を有する。
【００１７】
前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用する。
【００１８】
前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用する。
【００１９】
さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集する手段と、前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行う手段を有する。
【００２０】
さらに、前記拡張領域にクラス情報の一部をコピーする手段を有する。
【００２１】
前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用する。
【００２２】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用する手段を有する。
【００２３】
さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意する手段を有する。
【００２４】
別の態様として、本発明は、オブジェクトの生成地点を記録するプログラムであって、該プログラムがコンピュータに、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、を実行させる。
【発明の効果】
【００２５】
本発明により、オブジェクトの生成地点に関する情報を、少ないメモリオーバヘッドで記録することができる。またアプリケーションの実行中に処理系がオブジェクトの生成地点を判別できるので、その情報を利用してオブジェクトの再配置やオブジェクト生成場所の最適化を行うことが可能になる。
【図面の簡単な説明】
【００２６】
【図１】オブジェクトの一般的な構造を示す図である。
【図２】本発明によるオブジェクトの構造を示す図である。
【図３】存在する領域を生成地点ディスクリプタとして使用する例を示す図である。
【図４】生成地点ごとの情報を収集するための拡張例を示す図である。
【図５】オブジェクト指向言語実行環境に適用した場合の全体構成を示す図である。
【図６】オブジェクト生成のフローチャートを示す図である。
【図７】メモリ参照のコストを低減するための拡張を図示する。
【図８】クラス構造自体を１つ目の生成地点ディスクリプタとして使用する拡張例を示す図である。
【図９】オブジェクトの生成地点数の測定結果を示す図である。
【図１０】コンピュータ・ハードウェアのブロック図の一例を示す。
【図１１】生成地点ディスクリプタの構造を示す図である。
【発明を実施するための形態】
【００２７】
オブジェクト指向言語処理系では、オブジェクトはその設計図である「クラス」を指定して生成される。実行時にオブジェクトのクラスを判別するため、オブジェクトヘッダにクラスへのポインタが収められているのが一般的である。図１にオブジェクトの一般的な構造を示す。オブジェクトは大きく分けてヘッダと、ボディからなる。図１のオブジェクトＡ１、Ａ２，Ａ３，Ｂ１はその設計図である、クラスＡ，クラスＢを指定して生成される。
【００２８】
アプリケーション実行中に処理系がオブジェクトの生成地点を判別できれば、その情報を利用してオブジェクトの再配置やオブジェクト生成場所の最適化を行うことが容易になる。本発明はオブジェクトヘッダにクラスへのポインタを収める代わりに、「生成地点ディスクリプタ」へのポインタを収める。
【００２９】
図１１に生成地点ディスクリプタの構造を図示する。生成地点ディスクリプタは、オブジェクトを生成したアドレスと、オブジェクトのクラスへのポインタによって構成される。
【００３０】
図１１では明示的にオブジェクトを生成したアドレスを有しているが、オブジェクトが生成されたアドレスは生成地点ディスクリプタが存在するコードによって判別する方法がより実用的である。図２に本発明によるオブジェクトの構造の一例を示す。生成地点ディスクリプタ２１０、２２０には、オブジェクトをどこで生成したかの情報とクラスへのポインタを有する。図２では３つの生成地点ディスクリプタがある。図２の構成では，生成地点ディスクリプタにはクラスへのポインタだけが入っており，オブジェクトが生成されたアドレスは生成地点ディスクリプタが存在するコードによって表されている。以下、オブジェクトが生成されたアドレスをオブジェクトの生成地点と記載する。
【００３１】
この生成地点ディスクリプタによって、そのオブジェクトの生成地点を分別する。図２の例では、オブジェクトＡ１とＡ２はコードＸ（２１０）によって生成されＡ３とＢ１はコードＹ（２２０）によって生成されたことがわかる。もともとクラスへのポインタが収められていた場所を生成地点ディスクリプタへのポインタで置き換えているので、オブジェクトに対する追加メモリオーバヘッドが無い。生成地点ディスクリプタにはクラスへのポインタが入っているので、これをたどることでクラス情報にアクセスすることができる。
【００３２】
同じ地点で生成されるオブジェクトには、同じ生成地点ディスクリプタが使用される。そのため、ディスクリプタの数はオブジェクトの数に比べて圧倒的に少なくてよく、そのための追加メモリオーバヘッドは少ない。なおこの生成地点ディスクリプタはオブジェクト生成を指示するコード中の領域を流用するようにすると追加メモリオーバヘッドを無くすことができる。このオブジェクト生成を指示する領域は既に存在している領域なので生成地点ディスクリプタのため領域を別途用意する必要がない。
【００３３】
図３に、もともと存在する領域を生成地点ディスクリプタ３１０として使用する例を示す。オブジェクトを生成する場合にはクラスが指定されるが、多くの場合このクラス情報はコード中で静的に保持されている。その領域を使用すれば、生成地点ディスクリプタ用のメモリ領域を新たに確保する必要はない。たとえば、Javaのインタプリタ実行においては、バイトコード「new」で指定されるコンスタントプール（constant pool）の（resolve済みの）場所をディスクリプタとして使用できる。またJITコンパイルされたコードではオブジェクト生成用の関数（図３では createObj）に渡されるクラス情報が入っている場所をそのまま生成地点ディスクリプタとして使用できる。なお前者の場合、同じクラス内のどの newがオブジェクト生成を行ったかの分別が困難であるが、これはメモリオーバヘッドを増やさないためのトレードオフである。
【００３４】
リフレクションによるオブジェクト生成のように、クラス情報が動的に指定される場合、生成地点ディスクリプタに流用できる領域が存在しないことがある。この場合には専用の生成地点ディスクリプタを用意してもよいが、図３のオブジェクトＡ４のようにクラスごとに用意した「セルフポインタ」をディスクリプタとして用いることで、追加メモリオーバヘッドを少なく保つことができる。この場合はオブジェクトの生成地点の分別はできないが、そのようなケースは少数である。
【００３５】
このセルフポインタは、これまで述べた中では唯一の追加メモリオーバヘッドであるが、クラスの数はオブジェクトや生成地点の数に比べて圧倒的に少ないため、あまり問題とならない。また、言語処理系の実装によってはすでにセルフポインタと同様のものを内部に持っており、それを流用すればオーバヘッドとはならない。
【００３６】
本発明の生成地点記録方法では、オブジェクトの生成地点ごとに生成地点ディスクリプタが用意される。そのため、この領域を拡大し、生成地点ごとの情報を集計することで、アプリケーション実行中にオブジェクト配置の最適化を行うことができる。図４に生成地点ごとの情報を収集するための拡張例を示す。
【００３７】
図４でオブジェクトＡ１，Ａ２は生成地点ディスクリプタ４１０へのポインタをヘッダに有し、生成地点ディスクリプタ４１０はクラスＡへのポインタと拡張領域を有する。オブジェクトＡ３は生成地点ディスクリプタ４２０へのポインタをヘッダに有し、生成地点ディスクリプタ４２０はクラスＡへのポインタと拡張領域を有する。オブジェクトＢ１は生成地点ディスクリプタ４３０へのポインタをヘッダに有し、生成地点ディスクリプタ４３０はクラスＢへのポインタと拡張領域を有する。
【００３８】
この拡張領域には、この生成地点ディスクリプタを参照してきたオブジェクトの数、オブジェクトの種類などの統計情報を置いても良い。
【００３９】
集計する情報と最適化の例としては、
・GC の時に生成地点ごとに生存オブジェクト数を集計し、増加し続ける場合はその生成地点がメモリリークを引き起こしているのではないかという警告を出す。
・世代別 GC を用いる場合に、長生き領域に移されたオブジェクトの割合を生成地点ごとに集計し、割合が高い場合はその生成地点で生成されるオブジェクトは最初から長生き領域に生成する。
などが考えられる。生成地点ディスクリプタを拡張すると、上で述べた「もともと存在する領域」をそのまま使用することが困難になる場合もあるが、生成地点はオブジェクト数に比べれば圧倒的に少ないので、追加メモリオーバヘッドが低いという本発明の特長は保たれる。 
【００４０】
図５に本発明をオブジェクト指向言語実行環境に適用した場合の全体構成を示す。各オブジェクトＡ１，Ａ２，Ａ３，Ａ４，Ｂ１，Ｃ１はそれを生成した場所に対応する生成地点ディスクリプタ５２０をポイントしており、クラスＡ，Ｂ、ＣはコードＸ、コードＹ，コードＺ内の生成地点ディスクリプタからポイントされている。また各クラスＡ，Ｂ、Ｃには自分自身をポイントするセルフポインタ５１０が用意されている。
【００４１】
図６に、本発明によるオブジェクト生成のフローチャートを示す。オブジェクト生成時に、クラス情報に加え生成地点ディスクリプタの場所を渡すのが特徴である。この情報が指定されていない場合は、クラスのセルフポインタを生成地点ディスクリプタとして使用する。 
【００４２】
ステップ６０２で、引数として、クラス情報と生成地点ディスクリプタを受け取る。次にステップ６０４で、生成地点ディスクリプタが指定されているか判断する。ここで指定されている場合には処理はステップ６０８へ進む。指定されていない場合にはステップ６０６で、生成地点ディスクリプタとしてクラスのセルフポインタを使用しステップ６１２に進む。ステップ６０８ではクラス情報が生成地点ディスクリプタ内のクラス情報と等しいか判断する。もし等しければ処理はステップ６１２に進む。等しくなければ処理はステップ６１０へ進み引数エラーとして終了する。ステップ６１２でヒープ内に、指定されたクラスのオブジェクトを生成する。この処理は従来のオブジェクト生成処理と同様の処理である。次にステップ６１４で、生成したオブジェクトのヘッダに、生成地点ディスクリプタへのポインタを入れる。そして最後にステップ６１６へ進み、生成したオブジェクトを返す。
【００４３】
＜本発明の拡張１＞
本発明では、オブジェクトヘッダから生成地点ディスクリプタを指すことにより、生成地点の分別と生成地点ごとの情報収集を可能にする。しかし、これによりクラス情報へのアクセスに一回分メモリ参照が余計に必要になる。図７に、このメモリ参照のコストを低減するための拡張を図示する。クラス内の情報のうち、頻繁に参照され、かつほとんど変更されないものを、生成地点ディスクリプタ７１０、７２０、７３０にコピーする。図７では dataA、dataB と記載している部分がこのコピーに当たる。これによりアクセスを高速化している。頻繁に参照され、かつほとんど変更されない情報の例としては、仮想関数テーブルやオブジェクトサイズなどがある。
【００４４】
拡張１の方法により、メモリが余計に必要となるが、生成地点はオブジェクトの数に比べて少ないため、オブジェクトヘッダのサイズを増やす素直な方法よりもメモリオーバヘッドは少ない。
【００４５】
＜本発明の拡張２＞
さらに、クラスごとの最初の生成地点ディスクリプタとしてクラス構造自体を用いることで、拡張１のメモリオーバヘッドの削減を行うことができる。図８に、クラス構造自体を１つ目の生成地点ディスクリプタとして使用する拡張例を示す。図８では図７における生成地点ディスクリプタ７１０、７３０がクラス構造自体に入っているので、拡張１の方法と比べて、dataA、dataB の複製が少なくなっていることがわかる。 
【００４６】
＜本発明の拡張３＞
本発明の生成地点ディスクリプタは、生成するオブジェクトのクラスが同じであれば複数の生成地点で共有することもできる。収集したい情報の粒度がクラスごと、パッケージごとでよい場合はこのようにまとめることで情報収集のための領域を節約することができる。すなわちオブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用する。
【００４７】
逆に、生成地点だけでなくその呼び出しコンテクストの情報もトラックしたい場合、同じ生成地点であってもコンテクストごとに別の生成地点ディスクリプタを用意することでより細かい情報収集を行うことも可能である。すなわち、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意することも可能である。
【００４８】
本発明により、オブジェクトの生成地点に関する情報を少ないメモリオーバヘッドで記録し利用することが可能となる。図９にオブジェクトの生成地点数を測定した結果を示す。対象である複数の Java アプリケーションを行にとり、総メモリ使用量（ psで見える javaプロセスの RSS値）、クラスの数、生成地点の数、ヒープ内の平均オブジェクト数を列にして、測定結果を図示する。ヒープサイズには、動作可能な最小ヒープの４倍を指定している。図９の結果から、クラス数、生成地点数はオブジェクト数に比べて圧倒的に少ないことがわかる。
【００４９】
本発明では、生成地点ディスクリプタに情報収集用のフィールドを追加し実行中の最適化に用いることができる。実験によりその場合でも、生成地点はオブジェクト数に比べれば圧倒的に少ないので、追加メモリオーバヘッドが低いことがわかった。
【００５０】
また本発明では、もともと存在する領域を生成地点ディスクリプタとして使用する方法を開示しているが、実験により、追加メモリオーバヘッドが無いことがわかった。クラスのセルフポインタがもともと存在しない場合の方法については若干のオーバヘッドが生じるが、図９よりクラスの数は生成地点の数と比べてもさらに少ないので、問題とならない。
【００５１】
＜コンピュータ・ハードウェアのブロック図＞
図１０に本発明の実施態様における、コンピュータ・ハードウェアのブロック図を一例として示す。本発明の実施形態に係るコンピュータ・システム（１００１）は、ＣＰＵ（１００２）とメイン・メモリ（１００３）と含み、これらはバス（１００４）に接続されている。ＣＰＵ（１００２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。
【００５２】
バス（１００４）には、ディスプレイ・コントローラ（１００５）を介して、ＬＣＤモニタなどのディスプレイ（１００６）が接続されている。ディスプレイ（１００６）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス（１００４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（１００７）を介して、ハードディスク又はシリコン・ディスク（１００８）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢｌｕ−ｒａｙドライブ（１００９）が接続されている。
【００５３】
ハードディスク（１００８）には、オペレーティング・システム、好適にはオブジェクト指向言語実行環境のコードを含むプログラム及びデータが、メイン・メモリ（１００３）にロード可能なように記憶されている。本発明のオブジェクトのデータはハードディスク（１００８）もしくはメイン・メモリ（１００３）に格納されＣＰＵ（１００２）により処理が行われる。
【００５４】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢｌｕ−ｒａｙドライブ（１００９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢｌｕ−ｒａｙディスクからプログラムをハードディスクに追加導入するために使用される。バス（１００４）には更に、キーボード・マウスコントローラ（１０１０）を介して、キーボード（１０１１）及びマウス（１０１２）が接続されている。
【００５５】
通信インタフェース（１０１４）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（１０１４）は、通信コントローラ（１０１３）を介してバス（１００４）に接続され、コンピュータ・システム及び通信回線（１０１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。
【符号の説明】
【００５６】
２１０、３１０、４１０、４２０、４３０、５２０、７１０  生成地点ディスクリプタ
５１０  セルフポインタ
【図１】
2011133919.tif 000003
【図２】
2011133919.tif 000004
【図３】
2011133919.tif 000005
【図４】
2011133919.tif 000006
【図５】
2011133919.tif 000007
【図６】
2011133919.tif 000008
【図７】
2011133919.tif 000009
【図８】
2011133919.tif 000010
【図９】
2011133919.tif 000011
【図１０】
2011133919.tif 000012
【図１１】
2011133919.tif 000013
【手続補正書】
【提出日】平成22年10月26日(2010.10.26)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】変更
【補正の内容】
【００４０】
図５に本発明をオブジェクト指向言語実行環境に適用した場合の全体構成を示す。各オブジェクトＡ１，Ａ２，Ａ３，Ｂ１，Ｃ１はそれを生成した場所に対応する生成地点ディスクリプタ５２０をポイントしており、クラスＡ，Ｂ、ＣはコードＸ、コードＹ，コードＺ内の生成地点ディスクリプタからポイントされている。また各クラスＡ，Ｂ、Ｃには自分自身をポイントするセルフポインタ５１０が用意されている。