JP2005529384A - 異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供 - Google Patents

異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供 Download PDF

Info

Publication number
JP2005529384A
JP2005529384A JP2004504112A JP2004504112A JP2005529384A JP 2005529384 A JP2005529384 A JP 2005529384A JP 2004504112 A JP2004504112 A JP 2004504112A JP 2004504112 A JP2004504112 A JP 2004504112A JP 2005529384 A JP2005529384 A JP 2005529384A
Authority
JP
Japan
Prior art keywords
class
code
providing
grandparent
hierarchy
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004504112A
Other languages
English (en)
Other versions
JP2005529384A5 (ja
Inventor
ラリ,モハメッド・ショアイブ
カサムセッティ,ラビカンス
クリシュナスワーミー,スリナス
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2005529384A publication Critical patent/JP2005529384A/ja
Publication of JP2005529384A5 publication Critical patent/JP2005529384A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

オブジェクトのためのメモリ管理を提供するための方法が説明される。具体的には、異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するための技術およびメモリ管理ツリーで特定のオブジェクトで開始するメモリ管理の下位ツリーを解放するための技術が説明される。メモリ管理テンプレートは共通のプリプロセッサメモリ管理コードを提供する。メモリ管理テンプレートの特別なバージョンは特別なテンプレートのサブクラスを作成するために使用される。特別なテンプレートのサブクラスのインスタンスであるオブジェクトのメモリ管理オペレータが起動されると、特別なテンプレートで共通のメモリ管理コードが実行される。メモリは階層的なツリーで各オブジェクトと関連付けられる。オブジェクト間の階層的なツリーの関係を反映するデータがメモリに対して維持される。下位ツリーおよび関連付けられるメモリは、関係を追跡するアプリケーションプログラムなしに解放することができる。

Description

関連出願への相互参照
この出願は、Shoaib Lari、Ravikanth Kasamsetty、およびSrinath Krishnaswamyによる「異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供("Providing Common Memory Management Code to Objects that are Instances of Different Classes")」と題される、2002年5月7日に出願された米国仮特許出願連続番号第60/378,872号(代理人事務処理番号50277−1989)に関連し、それからの優先権を主張し、ここに十分に説明されるかの如くその開示全体をここに引用により援用する。この出願は、Shoaib Lari、Ravikanth Kasamsetty、およびSrinath Krishnaswamyによる「異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供("Providing Common Memory Management Code to Objects that are Instances of Different Classes")」と題される、2002年5月31日に出願された米国仮特許出願連続番号第60/384,647号(代理人事務処理番号50277−2031)に関連し、それからの優先権を主張し、ここに十分に説明されるかの如くその開示全体をここに引用により援用する。
発明の分野
この発明はオブジェクトのためのメモリ管理に関し、特に、異なるクラスであるインスタンスであるオブジェクトへの共通のメモリ管理コードの提供、およびオブジェクトの階層で特定のオブジェクトと関連付けられるメモリおよび階層でその特定のオブジェクトの下にあるオブジェクトを解放することに関する。
発明の背景
メモリの管理は、メモリの割当および割当の取消を管理してオブジェクトまたは他のデータ構造を記憶するために行なわれる動作およびプロセスを指す。典型的には、大抵のアプリケーションは、そのアプリケーションが書かれるコンピュータ言語によって供給されるメモリ管理コードを使用する。しかしながら、コンピュータ言語によって供給されるメモリ管理コードは、性能のための最適化、メモリの割当のための最適化または互いに関係を有するオブジェクトのセットに対するメモリを解放することなどの或る望ましい特徴を有さないことがある。したがって、オブジェクトが自分自身のメモリ管理コードを有すると有利である。
オブジェクト指向の世界では、一意のメモリ管理コードをアプリケーションに供給することには、そのアプリケーションでオブジェクトを作成するために使用されるすべてのクラスで新規のオペレータおよび削除のオペレータをオーバーライドすることが伴う。このことに関する問題は、アプリケーションでオブジェクトを作成するために使用される各クラスは、それらのクラスで新規のオペレータおよび削除のオペレータをオーバーライドするためにメモリ管理コードの別々のコピーを必要とするという点である。メモリ管理コードの多くのコピーを有すると、日常のメンテナンスが複雑になるだけでなく、強化を行なうのも複雑になる。たとえば、メモリ管理コードにバグが見つかるたびに、各クラスでメモリ管理コードを修正しなくてはならない。
オブジェクトのセット間に或る関係があるとき、アプリケーションプログラムは、オブジェクトと関連付けられるメモリを適切な順番で解放するために、これらオブジェクト間の関係を追跡しなくてはならない。たとえば、所与のデータベース接続では、1つまたは
複数の照会がステートメントを伴って実行され、照会に応答して結果セットが戻される。したがって、データベース接続、関連するステートメント、結果セットおよびストリームの間に階層的な関係が存在する。接続および関連するステートメント、結果セットおよびストリームは、各々それら自身のオブジェクトによって表現することができ、これらオブジェクトは、これらオブジェクト間の関係を反映する階層的なツリーに組織化することができる。たとえば、接続オブジェクトは階層的なツリーの頂点のオブジェクトであり、ステートメントオブジェクトは接続オブジェクトのすぐ下のオブジェクトであり、結果セットオブジェクトはステートメントオブジェクトのすぐ下にある、等である。とりわけ、オブジェクトと関連付けられるメソッドを実行するため、またはオブジェクトのために計算を行なうためにメモリが必要とされる。したがって、メモリは階層的なツリー(以降は、「メモリ管理ツリー」と称される)で各オブジェクトと関連付けられる。
特定のオブジェクトおよびそのオブジェクトの下にあるオブジェクトは階層的なツリーの下位ツリーを形成する。たとえば、特定のステートメントオブジェクト、および、たとえば、結果セットオブジェクトおよびストリームオブジェクトなどのその特定のステートメントオブジェクトの下にあるすべてのオブジェクトは、階層的なツリーの下位ツリーを形成する。下位ツリー、および下位ツリーでオブジェクトと関連付けられるメモリは、メモリ管理の下位ツリーを形成する。特定のオブジェクトが必要とされなくなると、その特定のオブジェクトを含むメモリ管理の下位ツリー、この特定のオブジェクトの下にあるオブジェクト(以降は、特定のオブジェクトの「子孫」と称される)、およびこれらオブジェクトのすべてと関連付けられるメモリが解放される。たとえば、一旦アプリケーションプログラムがステートメントオブジェクトで終了されると、ステートメントオブジェクトおよびそのステートメントオブジェクトの子孫のすべて(たとえば、結果セットオブジェクトおよびストリームオブジェクト)は解放することができる。これらオブジェクトと関連付けられるメモリも解放することができる。これを行なうには、アプリケーションプログラムは、オブジェクトと関連付けられるメモリとの間の関係を追跡しなければならない。メモリ管理の下位ツリーの解放は、階層的なツリー内の他のオブジェクトおよびそれらの関連付けられるメモリが解放されないように行なわれる必要がある。たとえば、特定のステートメントで開始する下位ツリーが解放される場合、この特定のステートメントが関連付けられる接続およびその接続と関連付けられる他のステートメントは影響されてはならない。
したがって、アプリケーションプログラムのための一意のメモリ管理コードを提供する必要があるだけでなく、このメモリ管理コードがそのアプリケーションで使用されるクラスのインスタンスであるすべてのオブジェクトによって共有されるように提供する必要もあることがわかる。さらに、アプリケーションプログラムに対して透過的な態様で階層的なツリーのオブジェクトのセットとこれらオブジェクトと関連付けられるメモリとの間の関係を追跡する必要もあることがわかる。そうする中で、アプリケーションプログラムは、階層的なツリー内の1つの特定のオブジェクトに対して解放を発行することができ、これは結果として、その特定のオブジェクトで開始するメモリ管理の下位ツリーを解放することになる。
発明の概要
オブジェクトのためのメモリ管理を提供するための技術が説明される。特に、異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するための技術、およびメモリ管理のツリー内で特定のオブジェクトで開始するメモリ管理の下位ツリーを解放するための技術が説明される。
オブジェクトのための共通のメモリ管理の提供については、テンプレート(以降は、メモリ管理テンプレートと称される)は共通のプリプロセッサメモリ管理コードを提供するために使用される。メモリ管理インターフェイスを規定する抽象クラスは、コンパイル中に「特別なテンプレート」を作成するためにこのメモリ管理テンプレートに渡される。特別なテンプレートは、第2のクラスを下位に分類するために使用される(以降は「特別なテンプレートサブクラス」と称される)。特別なテンプレートのサブクラスは、コンパイル時間中に共通のプリプロセッサメモリ管理コードから生成されるメモリ管理実行ファイルを含む。一実施例によると、特別なテンプレートのサブクラスは抽象クラスでインターフェイスに対するインプリメンテーションを提供する。特別なテンプレートのサブクラスのインスタンスであるオブジェクトの、新規または削除などのメモリ管理オペレータが起動されと、特別なテンプレート内のメモリ管理実行ファイルが実行される。
たとえば、抽象クラスA_Absはインターフェイスを提供する。テンプレートMM<T>は、新規および削除のオペレータをオーバーロードすることによって共通のメモリマネージャに対してインターフェイスおよびインプリメンテーションを提供する共通のプリプロセッサメモリ管理コードを提供する。A_AbsがテンプレートMM<T>の一般的なパラメータ「T」に渡されると、特別なテンプレート、MM<A_Abs>が作成される。コンパイルのプリプロセッサ段階では、一般的なパラメータTは特定されたパラメータA_Absで置換され、特定されたテンプレートMM<A_Abs>で実行可能なコードを生成する。MM<A_Abs>は、A_STSを下位に分類するために使用され、これは特別なテンプレートのサブクラスである。クラスA_STSのインスタンスであるオブジェクトの新規または削除のオペレータが起動されると、MM<A_Abs>内の新規または削除のオペレータは、コンピュータ言語によって供給される新規または削除のオペレータの代わりに実行される。
メモリ管理の下位ツリーの解放に関しては、メモリは階層的なツリーで各オブジェクトと関連付けられる。階層的なツリーでのオブジェクト間の階層的なツリーの関係を反映するデータがメモリのために維持される。そうする中で、下位ツリーおよび関連付けられるメモリは、オブジェクトとオブジェクトと関連付けられるメモリとの間の関係を追跡するアプリケーションプログラムなしに、デストラクタなどの単一の命令で解放することができる。
この発明は、同様の参照番号が類似の要素を示す添付の図面の中で、限定ではなく例によって示される。
発明の詳細な説明
オブジェクトに共通のメモリ管理コードを提供するための方法である。以下の説明では、説明のため、多くの具体的な詳細を説明してこの発明を完全に理解できるようにしている。しかしながら、この発明は、これらの具体的な詳細な詳細なしに実現可能であることは明らかである。場合によっては、この発明を不必要にわかりにくくするのを避けるために、ブロック図の形で周知の構造および装置を示す。
共通のメモリ管理で使用されるクラスの階層の概要
図1は、この発明の実施例による異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するためにメモリ管理テンプレートを使用する3つのクラスの階層(class hierarchy)を示すブロック図である。3つのクラスの階層、クラスの階層1、クラスの階層2およびクラスの階層3内のクラスはすべて1つの形または別の形でコードを提供する。コードを提供することは、後続のコンパイルおよび実行のためにコー
ドを作成するプロセスまたは動作を指す。たとえば、プログラマは、クラスの形でファイルにソースを入力することによってコードを提供し、それはコンパイルのためにコンパイラによってアクセス可能である。コードを提供することは、ライブラリを参照する他のアプリケーションの後のコンパイルのためにコードをライブラリに記憶することも指す。
3つのクラスの階層は、3つの特別なテンプレートのサブクラス、A_STS:MM<A_Abs>130、B_STS:MM<B_Abs>160およびC_STS:MM<C_Abs>190のインスタンスであるオブジェクトを作成するために使用される(これら特別なテンプレートのサブクラスの表記は次の順序である:1)クラスの名前、2)コロン、3)クラスを下位に分類するために使用される特別なテンプレートの名前)。A_STS:MM<A_Abs>130の場合、A_STSはオブジェクトを作成するために使用されるクラスの名前であり、MM<A_Abs>は、後にさらに詳しく説明するように特別なテンプレートのサブクラスの名前である。これらオブジェクトは、後にさらに詳しく説明するように、メモリ管理テンプレートからの共通のプリプロセッサメモリ管理コードからすべて生成されるメモリ管理実行ファイルを含む。
各クラスの階層の頂点にあるのは、抽象クラス、A_Abs110、B_Abs_140およびC_Abs170であり、特別なテンプレートのサブクラス(130、160、190)で実現されるメソッド(131、132、161、162、191)に対するインターフェイス(113、114、143、144、173)を提供する。定義によると、抽象クラスは方法および/またはオペレータに対してインターフェイスを規定するが、方法および/またはオペレータに対してインプリメンテーションは提供しない。
新規および削除のオペレータに対する共通のプリプロセッサメモリ管理コードはメモリ管理テンプレートで提供される。メモリ管理テンプレートはMM<T>と称され、Tは特定の種類をメモリ管理テンプレートに渡すための一般的な種類のパラメータである。コンパイルのプリプロセッサ段階中に、(1)一般的な種類のパラメータTは、メモリ管理テンプレートに渡される特定の種類(たとえば、A_Abs、B_Abs、C_Abs)で置換され、(2)メモリ管理プレートが複製され、(3)メモリ管理テンプレートの複製は一般的なパラメータTに渡された特定の種類を使用して特別化され、特別なテンプレート(120、150、180)を生成する。たとえば、特別なテンプレートMM<A_Abs>120では、抽象クラスA_Abs110は一般的なパラメータTに渡された特定の種類である。
したがって、各特別なテンプレート(120、150および180)はそれ自身のメモリ管理実行ファイル(121、122、151、152、181、182)を有し、これらはメモリ管理テンプレート内のメモリ管理プリプロセッサコードの1つのコピーに端を発する。たとえば、新規(new)121および削除(delete)122は、MM<A_Abs>120自身のメモリ管理実行ファイルである。同様に、特別なテンプレート(120、150、180)は、データを記憶するために使用されるhndlp_(123、153および183)などのそれら自身のデータメンバのコピーを有する。
MM<A_Abs>120、MM<B_Abs>150およびMM<C_Abs>180は、各々、結果として別のクラス(130、160、190)を下位に分類するために使用可能な別々の特別なテンプレートになるが、メモリ管理プリプロセッサコードの1つのコピーのみが存在する。したがって、維持または強化するためのメモリ管理プリプロセッサコードの1つのコピーのみがある。メモリ管理プリプロセッサコードのその1つのコピーは、以下にさらに詳しく説明するように、メモリ管理テンプレートにある。
一実施例によると、1つのみの特別なテンプレートおよび1つの抽象クラスが提供され
る。たとえば、一般的なメモリ管理の抽象クラス、MM_Absは、任意の種類のオブジェクトを作成するためのインターフェイスなどの一般的なインターフェイスを提供するためにのみ使用され、クラスの階層1、2および3で抽象クラスとして使用される。次に、特別なテンプレート120、150、180は、すべて、MM<MM_Abs>であり、特別化なテンプレートのサブクラスは、A_STS:MM<MM_Abs>130、B_STS:MM<MM_Abs>160、およびC_STS:MM<MM_Abs>190である。
特別なテンプレート(120、150、180)は、特別なテンプレートのサブクラス(130、160、190)を作成するために使用される。一実施例によると、特別なテンプレートのサブクラス(130、160、190)は、メソッド(131、132、161、162、191)で抽象クラス(110、140、170)の非メモリ管理インターフェイス(113、114、143、144、173)を実現する。たとえば、MM<A_Abs>120は、A_STS:MM<A_Abs>130を下位に分類するために使用される。非メモリ管理インターフェイス113および114は、後にさらに詳細に説明するようにメソッド131および132で実現される。一実施例によると、1つの特別なテンプレートのサブクラス(130、160または190)は、別の特別なテンプレートのサブクラスのインスタンスであるオブジェクトを作成するためにファクトリメソッド(131または161)を提供する。たとえば、create_B_STS131は、A_STS:MM<A_Abs>130内にあり、クラスB_STS:MM<B_Abs>160のインスタンスであるオブジェクトを作成するファクトリメソッドである。理解されるように、ファクトリメソッドは、メソッドを起動するときに、共通のヒープなどのメモリへのポインタがパラメータとして渡される回数を最小化するための機構を提供する。
この出願の全体にわたって、さまざまな動作および動きをコードおよび命令によって行なわれるものまたはコードおよび命令で発生するものとして説明する。しかしながら、これは、命令のコード、またはそこからコンパイルされるコードが、実行されるときに動作および動きを行なわせることを説明するのに都合のよい方法であるに過ぎない。
メモリ管理テンプレート
図2は、この発明の実施例による共通のプリプロセッサメモリ管理コードを提供するメモリ管理テンプレートのブロック図である。メモリ管理テンプレートは、図2に示されるように、共通のプリプロセッサメモリ管理コードを提供し、これは、新規および削除のオペレータを過負荷にすることによって、共通のメモリマネージャに対するインターフェイス(204、205)およびインプリメンテーション(230、240)を提供する。クラスおよびテンプレートは、典型的には、(1)メソッドおよび/またはオペレータに対するインターフェイスを規定する規定の部分、および(2)メソッドおよび/またはオペレータに対するコードを規定するインプリメンテーション部分の2つの部分を有する。MMテンプレート(MM Template)200はメモリ管理テンプレートの規定を示す。MMテンプレート200の公開のセクションでは、3つのインターフェイス(202、204、205)が提供される。1つのインターフェイス202はMMテンプレートのコンストラクタ(MM Template's Constructor)210に対応する。他の2つのインターフェイス(新規(new)204および削除(delete)205)は、共通のメモリ管理のインプリメンテーション(230および240)に対応する。保護されたセクションでは、データメンバ、hndlp_206が提供される。データメンバhndlp_206は、共通のプリプロセッサメモリ管理コード(230、240)によって使用されるヒープまたはサブヒープへのポインタを記憶するために使用される。「T」(201、211、231、241)は、メモリ管理テンプレートの一般的な種類のパラメータであり、後に詳細に説明するように、特別なテンプレートMM<接続Abs>(MM<ConnectionAbs>)、MM<ステートメントAbs>(MM<StatementAbs>)およびMM<結果セットAbs>(M
M<ResultsetAbs>)を作成するために使用される。
一実施例によると、共通のプリプロセッサメモリ管理コードは、MMテンプレートの新規のオペレータ(MM Template's new operator)230およびMMテンプレートの削除のオペレータ(MM Template's delete operator)240で提供される。MMテンプレートの新規のオペレータ230は、オペレータの新規のインターフェイス204に対するインプリメンテーションコードを提供する。ヒープが存在しない場合、新規のオペレータ230は、コードが実現される言語のデフォルトのメモリマネージャを使用して、命令232でメモリを割当てる。ヒープが存在する場合、命令233で特別な処理が行なわれる。この特別な処理は、ヒープを再区分すること、特別な性能命令を実行すること、存在するヒープにポインタを戻すこと、またはその他の種類の特別な処理を伴い得る。MMテンプレートの削除のオペレータ240は、オペレータの削除のインターフェイス205に対するインプリメンテーションコードである。ヒープが存在する場合、命令242で特別な処理が行なわれる。この特別な処理は、ヒープを解放すること、ヒープの下位区分を解放すること、またはその他の種類の特別な処理を伴い得る。
抽象クラス
図3は、この発明の実施例による特別なテンプレートを提供するために特定の種類としてメモリ管理テンプレートに渡される抽象クラスのブロック図である。接続Absクラス(ConnectionAbs Class)300、ステートメントAbsクラス(StatementAbs Class)310、および結果セットAbsクラス(ResultsetAbs Class)320は、抽象クラスの例であり、(1)特別なテンプレートのサブクラスで実現されるインターフェイスを提供し、(2)特定の種類としてMMテンプレート200に渡される。一実施例によると、インターフェイス(301、311)は抽象クラス(300、310、320)で提供される。たとえば、これらインターフェイス(301、311)に対するインプリメンテーションは、特別なテンプレートのサブクラスのメソッド(510、530)で提供される。一実施例によると、抽象クラス内のインターフェイス(301、311)および特別なテンプレートのサブクラス内の対応するインプリメンテーション(510、530)はファクトリメソッドに対するものである。
特別なテンプレートのサブクラス
図4は、この発明の実施例による特別なテンプレートのサブクラスの規定のブロック図である。図5Aおよび図5Bは、この発明の実施例によるこれら特別なテンプレートのサブクラスに対する規定を実現するメソッドのブロック図である。これらの例では、3つの特別なテンプレートのサブクラスの規定(400、410、420)が示される。特別なテンプレートのサブクラスは、共通のメモリ管理コードにアクセスするオブジェクトのインスタンスを作成するために使用される(コードの断片401、411および421では、クラス400、410および420は特別なテンプレートのサブクラスであることに注意されたい)。たとえば、オブジェクトAが接続STSクラス(ConnectionSTS Class)400のインスタンスである場合、オブジェクトBはステートメントSTSクラス(StatementSTS Class)410のインスタンスであり、オブジェクトCは結果セットSTSクラス(ResultsetSTS Class)420のインスタンスであり、オブジェクトA、BおよびCは、コンパイル時間中にメモリ管理テンプレート(200、210、230、240)内の同じ共通のプリプロセッサメモリ管理コードからすべて生成されたメモリ管理実行ファイルを有する。
特別なテンプレートのサブクラスの規定の各々は、コンストラクタインターフェイス(402、412、422)を有する。コンストラクタインターフェイスのそれぞれのインプリメンテーションは、接続STSのコンストラクタ(ConnectionSTS's Constructor)500、ステートメントSTSのコンストラクタ(StatementSTS's Constructor)
520、および結果セットSTSのコンストラクタ(ResultsetSTS's Constructor)540である。コンストラクタは、そのコンストラクタが属するクラスのインスタンスであるオブジェクトを作成するために使用される。コンストラクタが提供することができる機能の1つは、オブジェクトのデータメンバの初期化である。たとえば、コンストラクタ500、520および540は、以下に詳しく説明するように、命令501、521および541でデータメンバhndlp_206を初期化する。別の実施例では、データメンバhndlp_206は、以下に詳しく説明するように、オブジェクトに対するインスタンスを作成するプロセス中にMMテンプレートのコンストラクタ(MM Template's Constructor)210が起動されるときにコードの断片212で初期化される。コンストラクタ500および520は、命令502および522でそれぞれデータメンバ405および415を初期化する。
オブジェクト指向プログラミングによると、オブジェクトがサブクラスのインスタンスである場合、コンストラクタは、オブジェクトのインスタンスを作成するプロセス中にそれらの継承階層の順番で呼出される。たとえば、MM<接続Abs>のサブクラスである接続STSクラス400がオブジェクトAを作成するために使用される場合、接続STSのコンストラクタ500は、MMテンプレートのコンストラクタ210の特別なバージョンであるスーパークラスのコンストラクタMM<接続Abs>::MMの後に起動される。
一実施例によると、特別なテンプレートのサブクラスは、抽象クラスにある非メモリ管理インターフェイスのインプリメンテーションを提供し、MMテンプレート200はメモリ管理インターフェイスのインターフェイスおよびインプリメンテーション(230、240)を提供する。たとえば、特別なテンプレートのサブクラスA_STS:MM<A_Abs>130は、非メモリ管理インターフェイス、create_B_STS113およびfunction_A114に対するインプリメンテーションを提供し、MM<T>はメモリ管理インターフェイス、新規111および削除112のインプリメンテーションを提供する。
別の実施例によると、1つの抽象クラスは一般的なインターフェイスのみを提供するために使用される。たとえば、一般的な抽象クラス、MM_Absは、任意の種類のオブジェクトを作成するため、または或る種類のプロセスを行なうためのインターフェイスなどの一般的なインターフェイスを提供することができ、メモリ管理テンプレート、MM<T>内の一般的なパラメータTは、MM_Absで置換されて1つの特別なテンプレートMM<MM_Abs>を生成する。この場合、MM_Absは、コードの断片401、411および421で特別なテンプレートのサブクラスに渡される。
一実施例によると、特別なテンプレートのサブクラスは、特別なテンプレートのサブクラスのインスタンスであるオブジェクトを作成するためにファクトリメソッド(403、413)を提供する。たとえば、ファクトリメソッドcreateStatement403は、後に詳しく説明するように、ステートメントSTSクラス410のインスタンスであるオブジェクトを作成するために使用される。特別な他のテンプレートのサブクラスのインスタンスであるオブジェクトを作成する際、ファクトリメソッドのインプリメンテーション(510、530)は、コードの断片511aおよび532aでそれぞれ新規のオペレータ230を起動して、オブジェクトに対してメモリを割当て、続いてコードの断片511bおよび532bで他の特別なテンプレートのサブクラスに対してコンストラクタをそれぞれ起動する。たとえば、ファクトリメソッドcreateStatement510は、接続STSクラス400内のメソッドであり、オブジェクトAを作成するために使用され、コードの断片511aは、MMテンプレートの新規のオペレータ230を起動してオブジェクトAに対するメモリを割当て、ステートメントSTSのコンストラクタ520は、コードの断片511bで起動されてオブジェクトAを「構築する」。ステートメントSTSクラス410は、
MM<ステートメントAbs>のサブクラスであるため、MMテンプレートのコンストラクタ210の特別な形、MM<ステートメントAbs>::Mが起動される。一実施例によると、MM<ステートメントAbs>::Mが起動されると、hndlp_206はコードの断片212で初期化される。
共通のメモリ管理の動作の例
図6は、この発明の実施例による共通のメモリ管理を使用するオブジェクトを作成するアプリケーションプログラム(application program)のブロック図である。アプリケーションプログラム600は、接続STSオブジェクト、ステートメントSTSオブジェクト、および結果セットSTSオブジェクトの3つのそのようなオブジェクトを一連の命令(602、603および604)で作成する。つまり、接続STSオブジェクト、connは命令602で作成される。conn内のファクトリメソッドは、命令603で起動され、ステートメントSTSオブジェクト、stmtを作成する。stmt内の別のファクトリメソッドが命令604で起動され、結果セットSTSオブジェクト、rsを作成する。すべての3つのオブジェクトは、後に詳細に説明するように、共通のプリプロセッサメモリ管理コードから生成されたメモリ管理実行ファイルおよび共通のヒープへのポインタを含む。
メモリ管理実行ファイルは、共通のプリプロセッサコードから得られたものである。たとえば、オブジェクトconnは、MM<接続Abs>::operators new and deleteに対するメモリ管理実行ファイルを含み、オブジェクトstmtはMM<ステートメントAbs>::operators new and deleteに対するメモリ管理実行ファイルを含み、オブジェクトrsはMM<結果セットAbs>::operators new and deleteに対するメモリ管理実行ファイルを含む。これらメモリ管理実行ファイルのすべては、図2に示されるMMテンプレートによって規定されるように共通のプリプロセッサメモリ管理コードから導かれたものである。
一実施例によると、共通のヒープは、後に詳しく説明するようにオブジェクト間で共有される。一実施例によると、共通のヒープは、オブジェクトを作成する一連の命令(602、603、604)の第1の命令にポインタを渡すことによって共有される。たとえば、ポインタpH1は、命令601で共通のヒープに初期化される。一実施例によると、共通のヒープは、後に詳しく説明するように、一連の命令の各命令にポインタを渡すことなくオブジェクト間で共有される。別の実施例によると、共通のヒープは、一連の命令の各命令にポインタを渡すことによってオブジェクト間で共有される。これは、命令602、603および604の起動時にpH1が存在する場合にあてはまる。
命令601では、アプリケーションプログラム600は、ポインタを共通のヒープに初期化する。命令602では、アプリケーションプログラム600は、グローバルなプログラム、createConnection610を起動し、これは、(1)接続STSオブジェクト、connを作成し、(2)ポインタをconnオブジェクトに戻し、(3)この共通のヒープへのポインタを新たに作成されたconnオブジェクトにセーブする。
たとえば、グローバルなプログラム、createConnection610は、命令611でconnオブジェクトを作成する。命令611は、コードの断片611aでのMM<接続STS>::newの起動、およびコードの断片611bでの接続STSのコンストラクタ500の起動の2つの部分を有する。MM<接続STS>::newはMMテンプレートの新規のオペレータ230の特別なバージョンであり、これは命令232でconnオブジェクトにメモリを割当て、ポインタをconnに戻す。接続STSのコンストラクタ500は、MM<接続Abs>::hndlp_を命令501で初期化し、かつ任意で命令502で他のデータメンバを初期化することによって、connを「構築する」。接続STSクラス400は、MM<接続Abs>401のサブクラスであるため、MMテンプレートのコンストラクタ210の特別なバージョンが起動される。
命令603および604では、オブジェクト内のファクトリメソッドは、とりわけ、(1)他のオブジェクトを作成し、(2)これら他のオブジェクトの各々に共通のヒープへのポインタを通信するために使用される。オブジェクト、stmtおよびrsを作成するため、ファクトリメソッド、createStatementメソッド(createStatement method)510およびexecQueryメソッド(execQuery method)540が命令603および604でそれぞれ起動される。共通のヒープにポインタを通信するために、ファクトリメソッド、createStatementおよびexecQueryは、1つのオブジェクトから次に作成されたオブジェクトへとポインタを伝搬する。たとえば、オブジェクトconnは命令602で作成され、命令603で共通のヒープのポインタをオブジェクトstmtに通信するために使用される。これは、共通のヒープメンバへのポインタ、pH1を命令602でcreateConnection610に渡すことによって実現される。コードの断片611aは、MM<接続Abs>::newを呼出すことに繋がる。コードの断片611bは、接続STSのコンストラクタ500の呼出に繋がり、共通のヒープへのポインタもオブジェクトconnにセーブされる。接続STSのコンストラクタ500は、共通のヒープのポインタを命令501でMM<接続Abs>::hndlp_にセーブする。次いでセーブされた共通のヒープへのポインタは、命令603でオブジェクトconnからオブジェクトstmtに伝搬され、このときconn内のファクトリメソッドcreateStatementは、オブジェクトstmtを作成するために使用される。たとえば、コードの断片511aでは、hndlp_206の特別なバージョンである、MM<接続Abs>::hndlp_は、新しいオペレータに渡され、これはstmtオブジェクトに対してメモリを割当てる。同様の処理が命令604でオブジェクトrsに関して行なわれる。
オブジェクトの階層的なツリー
図7は、この発明の実施例による互いに階層的なツリー関係(以降は「階層的なツリー」と称される)を有するオブジェクトのセットのブロック図である。たとえば、所与のデータベース接続では、1つまたは複数の照会はステートメントを伴って実行される。結果セットが照会に応答して戻される。ストリームは、1つのファンクションコールで読出すことができないバイナリラージオブジェクト(Binary Large Objects)などの大きなデータオブジェクトの読出を調整するために結果セットから獲得される。したがって、階層的な関係は、データベース接続、および関連するステートメント、結果セットおよびストリームの間に存在する。接続および関連するステートメント、結果セットおよびストリームは各々オブジェクトによって表現することができ、オブジェクトはオブジェクト間の関係を反映した階層的なツリーに組織化することができる。
たとえば、Conn_1は接続オブジェクトである。Stmt_1、Stmt_2およびStmt_3は、この接続に対する照会で使用されるステートメントを表現するステートメントオブジェクトである。RS_1およびRS_2は、Stmt_1を使用して照会に応答して戻される結果セットを表わす結果セットオブジェクトである。RS_3およびRS_4は、Stmt_3を使用して照会に応答して戻される結果セットを表わす結果セットオブジェクトである。ストリーム、Stream_1およびStream_2は、結果セットRS_1およびRS_4からそれぞれ獲得される。とりわけメソッドを実行するためおよび計算を実行するために使用されるメモリ(H0、H1、H2、H3、H11、H12、H31、H32、H111、H321)は、階層的なツリーで各オブジェクトと関連付けられる。たとえば、メモリH0はオブジェクトConn_1と関連付けられ、メモリH1はオブジェクトStmt_1と関連付けられる、等である。
オブジェクトの階層的なツリーと関連付けられるメモリ
図8は、この発明の実施例によるオブジェクトのセットの各オブジェクトと関連付けられるいくつかのメモリのブロック図である。いくつかのメモリ(以降は、階層的なメモリのツリーと称される)は、オブジェクトのセットの階層的なツリーの関係を反映するよう
に組織化される。一実施例によると、図8は、図7に示されるオブジェクトのセットと関連付けられる階層的なメモリのツリーを示す。たとえば、H0は、オブジェクトConn_1と関連付けられる1つのメモリであり、H1、H2およびH3は、ステートメントオブジェクトStmt_1、Stmt_2およびStmt_3とそれぞれ関連付けられるメモリであり、H11、H12、H31およびH32は、オブジェクト結果セットオブジェクトRS_1、RS_2、RS_3およびRS_4とそれぞれ関連付けられるメモリであり、H111およびH321は、ストリームオブジェクトStream_1およびStream_2と関連付けられるメモリである。
一実施例によると、ヒープは階層的なツリーの頂点のオブジェクトと関連付けられる1つのメモリであり、このヒープのサブヒープは、残りのオブジェクトと関連付けられるいくつかのメモリである。たとえば、図7では、頂点のオブジェクトConn_1と関連付けられるH0はヒープとなり、残りのオブジェクト(H1、H2、H3等)と関連付けられるメモリはH0のサブヒープである。
階層的なメモリのツリーの階層を決定する階層的なデータが維持され、階層的なメモリのツリーが階層的なツリー内のオブジェクトのセット間の関係を反映するように維持される。このデータは、とりわけ、(1)オブジェクトのセットのデータメンバ内、(2)オブジェクトのセットと関連付けられるメモリ内、または(3)1つまたは複数のテーブル内で維持されるポインタおよび参照であり得る。
オブジェクトのセットの階層的な関係を反映する階層的なデータをメモリに対して維持することによって、メモリの下位ツリーは、オブジェクトのデストラクタまたは関数(function)などの単一の要求で解放することができ、階層的なツリー内の他のオブジェクト、または階層的なツリー内の他のオブジェクトと関連付けられるメモリに影響しない。
一実施例では、この階層的なデータは、階層的なメモリのツリー内でヒープおよび各サブヒープと関連付けられる兄弟(sibling)および子(children)のポインタの対である。ヒープおよび各サブヒープは、それ自身の子およびそれ自身の兄弟のリストを指す。たとえば、Conn_1と関連付けられるヒープH0の子は、サブヒープH1、H2およびH3である。サブヒープH1の兄弟はサブヒープH2およびH3である。
単一の要求を使用するメモリの下位ツリーと関連付けられるメモリの解放
図9、図10Aおよび図10Bは、この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラス、およびこれらオブジェクトと関連付けられるメモリをのブロック図である。図9は、接続、ステートメントおよび結果セットのクラスに対してクラスの規定を示すブロック図である。図10Aおよび図10Bは、これらクラスと関連付けられるメソッドのブロック図である。この例では、クラスは接続、ステートメントおよび結果セットのオブジェクトを作成するために使用される。図11は、この発明の実施例による、図9、図10Aおよび図10Bに示されるクラスとともにオブジェクトを作成するプログラムを示すブロック図である。
一実施例によると、単一の要求でメモリの下位ツリーと関連付けられるメモリの解放は、共通のメモリ管理とともに行なわれる。この場合、接続クラス(Connection class)900、ステートメントクラス(Statement class)910および結果セットクラス(Resultset Class)920は、特別なテンプレートのサブクラスである。たとえば、接続クラス900がオブジェクトAを作成するために使用されるとき、新規のオペレータ230が起動される。同様に、オブジェクトAが破壊されるとき、接続クラス900内のデストラクタ(図示せず)が起動され、これは削除のオペレータ240を起動する。削除のオペレータ240、または削除のオペレータ240が起動する関数が、階層的なデータを横断して
、オブジェクトAと関連付けられるメモリ、およびオブジェクトAと関連付けられる下位ツリーを解放する。たとえば、図7に示されるように、Stmt_1に対するデストラクタがアプリケーションプログラムから起動される場合、図8に示されるように、デストラクタは子および兄弟のポインタを使用して、サブヒープH1、H11、H12、H111が解放されるべきであると決定することができる。
別の実施例によると、単一の要求でメモリの下位ツリーと関連付けられるメモリの解放は、共通のメモリ管理コードなしに行なわれる。たとえば、接続クラス900、ステートメントクラス910、および結果セットクラス920は特別なテンプレートのサブクラスではない。
メモリへのポインタ(906、916、923)は、階層的なツリーでオブジェクトを作成するために使用される各クラス(900、910、920)と関連付けられる。たとえば、接続クラス900、ステートメントクラス910、および結果セットクラス920は、すべてヒープまたはサブヒープへのポインタ(906、916、923)を有する。コンストラクタ(1000、1020、1040)は、初期化の命令(1001、1021、1041)を使用してこれらポインタ(906、916、923)を初期化するために使用される。たとえば、接続のコンストラクタ(connection's constructor)1000、ステートメントのコンストラクタ(statement's constructor)1020および結果セットのコンストラクタ(resultset's constructor)1040は、初期化の命令1001、1021および1041で、ヒープまたはサブヒープに向くようにそれぞれのメモリのポインタを初期化する。ファクトリメソッド(1010、1030)は、他のクラスの種類の新しいオブジェクトを作成するためだけでなく、新しく作成されたオブジェクト(1011、1032)にメモリを割当てかつオブジェクトのセット間の階層的な関係を反映する階層的なデータ(907、908、917、918、924、925)をメモリに対して維持するためにも使用される。たとえば、接続のcreateStatementメソッド(connection's createStatement method)1010は、(1)接続オブジェクトのヒープ(906)の新しいサブヒープを命令1011で作成し、(2)ステートメントオブジェクトを作成し、新しく作成されたサブヒープを命令1012でステートメントオブジェクトと関連付け、(3)サブヒープに対して子および兄弟のポインタ(907および908)の形で階層的なデータを維持して、命令1013でサブヒープがオブジェクトのセット間の階層的な関係を反映するようにする。
ファクトリメソッドでオブジェクトを作成し、階層的なデータをこれらオブジェクトと関連付けられるメモリに、またはオブジェクト自身のデータメンバとして維持することによって、下位ツリーおよびそれに関連付けられるメモリを単一の要求で解放することができる。階層的なデータをメモリに維持する例は既に説明した。階層的なデータがオブジェクトでデータメンバとして維持されると仮定すると、関数は、オブジェクトStmt_1、RS_1、RS_2およびStream_1でデータメンバを使用して、サブヒープH1、H11、H12、H111が解放されるべきだと決定することができる。
別の実施例
別の実施例によると、階層的なメモリのツリーのためのすべてのメモリは連続した1つのメモリにあり、これは階層的なツリー内で各オブジェクトと関連付けられるメモリの別々の部分にさらに分けられる。ポインタは、個々のオブジェクトと関連付けられるメモリの部分の間の関係を維持するために使用される。これらポインタを維持するための方法であればどのような方法でも使用可能であり、たとえば、単一のメモリ自身にポインタを維持すること、またはテーブルにポインタを維持することが可能である。
ハードウェアの概要
図12は、この発明の実施例を実現可能なコンピュータシステム1200を示すブロック図である。コンピュータシステム1200は、情報を通信するためのバス1202または他の通信機構、および情報を処理するためのバス1202に結合されたプロセッサ1204を含む。コンピュータシステム1200は、プロセッサ1204によって実行されるべき情報および命令を記憶するために、バス1202に結合されるランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ1206も含む。メインメモリ1206は、プロセッサ1204によって実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するために使用してもよい。コンピュータシステム1200は、プロセッサ1204のための静的な情報および命令を記憶するために、バス1202に結合されるリードオンリメモリ(ROM)1208または他の静的記憶装置をさらに含む。磁気ディスクまたは光ディスクなどの記憶装置1210が、情報および命令を記憶するために設けられ、バス1202に結合される。
コンピュータシステム1200は、情報をコンピュータのユーザに表示するために、バス1202を介してブラウン管(CRT)などのディスプレイ1212に結合されてもよい。英数字キーおよび他のキーを含む入力装置1214は、情報およびコマンドの選択をプロセッサ1204に通信するためにバス1202に結合される。他の種類のユーザ入力装置は、マウス、トラッグボールまたはカーソル方向キーなどのカーソル制御1216であり、方向情報およびコマンドの選択をプロセッサ1204に通信し、カーソルの動きをディスプレイ1212上で制御する。この入力装置は、典型的には第1の軸(たとえば、x)および第2の軸(たとえば、y)の2つの軸での2自由度を有し、装置は平面での位置を特定することができる。
この発明は、ここに説明される技術を実現するためにコンピュータシステム1200を使用することに関する。この発明の一実施例によると、これらの技術は、プロセッサ1204がメインメモリ1206に含まれる1つまたは複数の命令の1つまたは複数のシーケンスを実行することに応答して、コンピュータシステム1204によって行なわれる。そのような命令は、記憶装置1210などの別のコンピュータ読取可能な媒体からメインメモリ1206に読込まれてもよい。メインメモリ1206に含まれる命令のシーケンスの実行は、ここに説明されるプロセスのステップをプロセッサ1204に行なわせる。別の実施例では、この発明を実行するために、ソフトウェアの命令の代わりに、またはそれと組合せてハードウェアに組込みの回路を使用してもよい。したがって、この発明の実施例はハードウェアに組込みの回路およびソフトウェアの特定の組合せに限定されない。
ここで使用される「コンピュータ読取可能な媒体」という言葉は、プロセッサ1204に命令を提供して実行することに参加するあらゆる媒体を指す。そのような媒体は、これらに限らないが、不揮発性媒体、揮発性媒体および伝送媒体などを含む多くの形をとり得る。不揮発性媒体は、たとえば、記憶装置1210などの光ディスクまたは磁気ディスクを含む。揮発性媒体は、メインメモリ1206などの動的メモリを含む。伝送媒体は、バス1202を含むワイヤを含む同軸ケーブル、導線および光ファイバを含む。伝送媒体は、無線データ通信および赤外線データ通信中に生成されるような音波または光波の形もとり得る。
コンピュータ読取可能な媒体の一般的な形は、たとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、またはその他の磁気媒体、CD−ROM、その他の光媒体、パンチカード、紙テープ、孔のパターンを備えたその他の物理的媒体、RAM、PROM、EPROM、FLASH−EPROM、その他のメモリチップまたはカートリッジ、後に説明する搬送波、またはそこからコンピュータが読取ることのできる他の媒体を含む。
さまざまな形のコンピュータ読取可能な媒体が1つまたは複数の命令の1つまたは複数のシーケンスをプロセッサ1204に運んで実行することに関わり得る。たとえば、命令は当初遠隔コンピュータの磁気ディスク上で運ばれてもよい。遠隔コンピュータは命令をその動的メモリにロードし、モデムを使用して電話線上で命令を送信することができる。コンピュータシステム1200のローカルモデムはデータを電話線上で受け取り、赤外線送信機を使用してデータを赤外線信号に変換する。赤外線検出器は赤外線信号で運ばれたデータを受け取り、適切な回路はそのデータをバス1202上に位置付けることができる。バス1202はデータをメインメモリ1206に運び、そこからプロセッサ1204は命令を検索し実行することができる。メインメモリ1206によって受取られた命令は、任意でプロセッサ1204による実行の前後に記憶装置1210に記憶されてもよい。
コンピュータシステム1200は、バス1202に結合される通信インターフェイス1218も含む。通信インターフェイス1218は、ローカルネットワーク1222に接続されるネットワークリンク1220に結合する2方向のデータ通信を提供する。たとえば、通信インターフェイス1218は、データ通信接続を対応する種類の電話線に提供するための統合デジタル通信網(ISDN)カードまたはモデムであってもよい。別の例としては、通信インターフェイス1218は、データ通信接続を互換性LANに提供するためのローカルエリアネットワーク(LAN)カードであってもよい。無線リンクを実現しても良い。そのような実現例では、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を授受する。
ネットワークリンク1220は、典型的には、1つまたは複数のネットワークを介して他のデータ装置にデータ通信を提供する。たとえば、ネットワークリンク1220はローカルネットワーク1222を介して、ホストコンピュータ1224またはインターネットサービスプロバイダ(ISP)1226によって運営されるデータ機器に接続を提供し得る。ISP1226は、現在には一般に「インターネット」1228と称される世界規模のパケットデータ通信ネットワークを通じてデータ通信サービスを提供する。ローカルネットワーク1222およびインターネット1228は、ともにデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を使用する。さまざまなネットワークを介した信号およびネットワークリンク上ならびに通信インターフェイス1218を介した信号は、コンピュータシステム1200で授受されるデジタルデータを運び、情報を運ぶ搬送波の例示的な形である。
コンピュータシステム1200は、ネットワーク、ネットワークリンク1220および通信インターフェイス1218を通じて、プログラムコードを含むメッセージを送信しデータを受取る。インターネットの例では、サーバ1230は、インターネット1228、ISP1226、ローカルネットワーク1222および通信インターフェイス1218を介してアプリケーションプログラムに対して要求されたコードを送信することができる。
受け取られたコードは、受け取られたときにプロセッサ1204によって実行されてもよいし、および/または後に実行するために記憶装置1210、または他の不揮発性記憶装置に記憶してもよい。このようにして、コンピュータシステム1200は搬送波の形でアプリケーションコードを獲得することができる。
明細書では、この発明をその具体的な実施例に関して説明してきた。しかしながら、この発明の精神および範囲を離れることなく、さまざまな変形および変更を行ない得ることが明らかであろう。したがって、明細書および図面は、限定的なものではなく、例示的なものとしてみなされるべきである。
この発明の実施例による異なるクラスのインスタンスであるオブジェクトに共通のメモリ管理コードを提供するためにメモリ管理テンプレートを使用する3つのクラスの階層のブロック図である。 この発明の実施例によるプリプロセッサメモリ管理コードを提供するメモリ管理テンプレートのブロック図である。 この発明の実施例による特別なテンプレートを提供するために特定の種類としてメモリ管理テンプレートに渡される抽象クラスのブロック図である。 この発明の実施例による特別なテンプレートのサブクラスの規定のブロック図である。 この発明の実施例によるこれら特別なテンプレートのサブクラスに対する規定を実現するメソッドのブロック図である。 この発明の実施例によるこれら特別なテンプレートのサブクラスに対する規定を実現するメソッドのブロック図である。 この発明の実施例による共通のメモリ管理を使用するオブジェクトを作成するアプリケーションプログラムのブロック図である。 この発明の実施例による互いに階層的なツリーの関係を有するオブジェクトのセットのブロック図である。 この発明の実施例によるオブジェクトのセットの各オブジェクトと関連付けられるいくつかのメモリのブロック図である。 この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラスおよびこれらオブジェクトと関連付けられるメモリのブロック図である。 この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラスおよびこれらオブジェクトと関連付けられるメモリのブロック図である。 この発明の実施例による階層的な関係を有するオブジェクトを作成するためのクラスおよびこれらオブジェクトと関連付けられるメモリのブロック図である。 この発明の実施例による、図9、図10Aおよび図10Bに示されるクラスとともにオブジェクトを作成するプログラムのブロック図である。 この発明の実施例を実現することのできるコンピュータシステムの図である。

Claims (30)

  1. オブジェクトのセットに共通のメモリマネージャを提供する方法であって、前記方法はコンピュータで実現されるステップを含み、前記コンピュータで実現されるステップは、
    クラスの階層で祖父母である祖父母クラスを規定する第1のコードを提供するステップを含み、前記祖父母クラスは第1のインターフェイスを特定し、前記コンピュータで実現されるステップはさらに、
    第2のインターフェイス、前記共通のメモリマネージャおよび前記共通のメモリマネージャの第2のインプリメンテーションを特定するテンプレートを規定する第2のコードを提供するステップと、
    前記祖父母のクラスを前記テンプレートに対するパラメータとして特定することによって、前記クラスの階層で子クラスを親クラスのサブクラスとして規定する第3のコードを提供するステップとを含み、前記子クラスは前記第1のインターフェイスの第1のインプリメンテーションを特定し、前記コンピュータで実現されるステップはさらに、
    前記祖父母のクラスをパラメータとして前記テンプレートに渡すことによって、前記クラスの階層で前記親クラスを規定する第4のコードを生成するステップとを含む、方法。
  2. 前記子クラスは第1の子クラスであり、第1のデータメンバはメモリ管理で使用されるヒープへのポインタであり、前記第1の子クラスおよび第2のデータメンバと関連付けられ、これはメモリ管理で使用されるヒープへのポインタであり、第2の子クラスと関連付けられ、前記方法はさらに、
    前記第2の子クラスと関連付けられるコンストラクタで第5のコードを提供するステップを含み、
    前記コンストラクタは、前記第1のデータメンバと関連付けられる値に基づいて前記第2のデータメンバの初期化を行なわせる、請求項1に記載の方法。
  3. 前記コンストラクタは、前記ヒープのサブヒープへのポインタで前記第2のデータメンバの初期化を行なわせる、請求項2に記載の方法。
  4. 前記子クラスは第1の子クラスであり、前記方法は、第2の子クラスのオブジェクトを作成するために前記第1の子クラスでファクトリメソッドを規定する第5のコードを提供するステップをさらに含む、請求項1に記載の方法。
  5. 前記クラスの階層は第1のクラスの階層であり、前記第1の子クラスは前記第1のクラスの階層での子クラスであり、前記第2の子クラスは第2のクラスの階層での子クラスであり、前記第5のコードを提供するステップは、前記第2の子クラスのオブジェクトを作成するために前記第1の子クラスで前記ファクトリメソッドを規定する第5のコードを提供するステップをさらに含む、請求項4に記載の方法。
  6. 前記祖父母クラスは抽象クラスであり、前記第1のコードを提供するステップは、前記第1のインターフェイスを特定するために前記抽象クラスを規定する第1のコードを提供するステップをさらに含む、請求項1に記載の方法。
  7. 前記第1のインターフェイスはファクトリメソッドのためのインターフェイスである、請求項6に記載の方法。
  8. 前記クラスの階層は第1のクラスの階層であり、前記祖父母クラスは前記第1のクラスの階層および第2のクラスの階層での祖父母クラスであり、前記第1のコードを提供するステップは、前記第1のインターフェイスを特定する前記祖父母クラスを規定する第1のコードを提供するステップをさらに含み、前記祖父母クラスは前記第1のクラスの階層お
    よび前記第2のクラスの階層での前記祖父母である、請求項1に記載の方法。
  9. 前記クラスの階層は第1のクラスの階層であり、前記祖父母クラスは第1の祖父母クラスであり、前記親クラスは第1の親クラスであり、前記子クラスは第1の子クラスであり、前記方法は、
    第2の階層で祖父母である第2の祖父母クラスを規定する第5のコードを提供するステップと、
    前記第2のクラスの階層に前記第2のコードを提供するステップと、
    前記第2の祖父母クラスを前記テンプレートに対するパラメータとして特定することによって、前記第2のクラスの階層で第2の子クラスを第2の親クラスのサブクラスとして規定する第6のコードを提供するステップと、
    前記第2の祖父母クラスをパラメータとして前記テンプレートに渡すことによって、前記第2のクラスの階層で前記第2の親クラスを規定する第7のコードを生成するステップとをさらに含む、請求項1に記載の方法。
  10. 前記共通のメモリマネージャは新規のオペレータであり、前記第1のコードを提供するステップは、前記新規のオペレータに対する前記第2のインターフェイスおよび前記新規のオペレータに対する前記第2のインプリメンテーションを特定する前記祖父母クラスを規定する第1のコードを提供するステップをさらに含む、請求項1に記載の方法。
  11. 前記共通のメモリマネージャは削除のオペレータであり、前記第1のコードを提供するステップは、前記削除のオペレータに対する前記第2のインターフェイスおよび前記削除のオペレータに対する前記第2のインプリメンテーションを特定する前記祖父母クラスを規定する第1のコードを提供するステップをさらに含む、請求項1に記載の方法。
  12. 前記第2のインプリメンテーションはプリプロセッサコードであり、前記第2のコードを提供するステップは、前記プリプロセッサコードを特定する前記テンプレートを規定する第2のコードを提供するステップをさらに含む、請求項1に記載の方法。
  13. 前記親クラスは特別なテンプレートであり、前記第3のコードを提供するステップは、前記祖父母クラスを前記テンプレートに対する前記パラメータとして特定することによって、前記クラスの階層で前記子クラスを前記特別なテンプレートの前記サブクラスとして規定する第3のコードを提供するステップをさらに含む、請求項1に記載の方法。
  14. 前記子クラスは特別なテンプレートのサブクラスであり、前記第3のコードを提供するステップは、前記祖父母クラスを前記テンプレートに対する前記パラメータとして特定することによって、前記クラスの階層で前記特別なテンプレートのサブクラスを前記親クラスの前記サブクラスとして規定する第3のコードを提供するステップをさらに含む、請求項1に記載の方法。
  15. メモリ管理実行ファイルは前記親クラスと関連付けられ、前記第4のコードを生成するステップは、
    前記祖父母クラスを前記パラメータとして前記テンプレートに渡すことによって、前記クラスの階層で前記親クラスを規定する第4のコードを生成するステップをさらに含み、
    前記メモリ管理実行ファイルは前記親クラスと関連付けられる、請求項1に記載の方法。
  16. 共通のメモリマネージャをオブジェクトのセットに提供するために命令の1つまたは複数のシーケンスを運ぶコンピュータ読取可能な媒体であって、1つまたは複数のプロセッサによる前記命令の1つまたは複数のシーケンスの実行は、前記1つまたは複数のプロセ
    ッサに以下のステップを行なわせ、前記以下のステップは、
    クラスの階層で祖父母である祖父母クラスを規定する第1のコードを提供するステップを含み、前記祖父母クラスは第1のインターフェイスを規定し、前記以下のステップはさらに、
    第2のインターフェイス、前記共通のメモリマネージャおよび前記共通のメモリマネージャの第2のインプリメンテーションを特定するテンプレートを規定する第2のコードを提供するステップと、
    前記祖父母クラスを前記テンプレートに対するパラメータとして特定することによって、前記クラスの階層で子クラスを親クラスのサブクラスとして規定する第3のコードを提供するステップとを含み、前記子クラスは前記第1のインターフェイスの第1のインプリメンテーションを特定し、前記以下のステップはさらに、
    前記祖父母クラスをパラメータとして前記テンプレートに渡すことによって、前記クラスの階層で前記子クラスを規定する第4のコードを生成するステップを含む、コンピュータ読取可能な媒体。
  17. 前記子クラスは第1の子クラスであり、第1のデータメンバはメモリ管理で使用されるヒープへのポインタであり、前記第1の子クラスおよび第2のデータメンバと関連付けられ、これはメモリ管理で使用されるヒープへのポインタであり、第2の子クラスと関連付けられ、前記コンピュータ読取可能な媒体は、
    前記第2の子クラスと関連付けられるコンストラクタで第5のコードを提供するステップをさらに含み、
    前記コンストラクタは、前記第1のデータメンバと関連付けられる値に基づいて前記第2のデータメンバの初期化を行なわせる、請求項16に記載のコンピュータ読取可能な媒体。
  18. 前記コンストラクタは、前記ヒープのサブヒープへのポインタで前記第2のデータメンバの初期化を行なわせる、請求項17に記載のコンピュータ読取可能な媒体。
  19. 前記子クラスは第1の子クラスであり、前記コンピュータ読取可能な媒体は、第2の子クラスのオブジェクトを作成するために前記第1の子クラスでファクトリメソッドを規定する第5のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  20. 前記クラスの階層は第1のクラスの階層であり、前記第1の子クラスは前記第1のクラスの階層での子クラスであり、前記第2の子クラスは第2のクラスの階層での子クラスであり、前記第5のコードを提供するステップは、前記第2の子クラスのオブジェクトを作成するために前記第1の子クラスで前記ファクトリメソッドを規定する第5のコードを提供するステップをさらに含む、請求項19に記載のコンピュータ読取可能な媒体。
  21. 前記祖父母クラスは抽象クラスであり、前記第1のコードを提供するステップは、前記第1のインターフェイスを特定するために前記抽象クラスを規定する第1のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  22. 前記第1のインターフェイスはファクトリメソッドのためのインターフェイスである、請求項21にコンピュータ読取可能な媒体。
  23. 前記クラスの階層は第1のクラスの階層であり、前記祖父母クラスは前記第1のクラスの階層および第2のクラスの階層での祖父母クラスであり、前記第1のコードを提供するステップは、前記第1のインターフェイスを特定する前記祖父母クラスを規定する第1のコードを提供するステップをさらに含み、前記祖父母クラスは前記第1のクラスの階層お
    よび前記第2のクラスの階層での前記祖父母である、請求項16に記載のコンピュータ読取可能な媒体。
  24. 前記クラスの階層は第1のクラスの階層であり、前記祖父母クラスは第1の祖父母クラスであり、前記親クラスは第1の親クラスであり、前記子クラスは第1の子クラスであり、前記コンピュータ読取可能な媒体は、
    第2のクラスの階層で祖父母である第2の祖父母クラスを規定する第5のコードを提供するステップと、
    前記第2のクラスの階層に前記第2のコードを提供するステップと、
    前記第2の祖父母クラスを前記テンプレートに対するパラメータとして特定することによって、前記第2のクラスの階層で第2の子クラスを第2の親クラスのサブクラスとして規定する第6のコードを提供するステップと、
    前記第2の祖父母クラスをパラメータとして前記テンプレートに渡すことによって、前記第2のクラスの階層で前記第2の親クラスを規定する第7のコードを生成するステップとをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  25. 前記共通のメモリマネージャは新規のオペレータであり、前記第1のコードを提供するステップは、前記新規のオペレータに対する前記第2のインターフェイスおよび前記新規のオペレータに対する前記第2のインプリメンテーションを特定する前記祖父母クラスを規定する第1のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  26. 前記共通のメモリマネージャは削除のオペレータであり、前記第1のコードを提供するステップは、前記削除のオペレータに対する前記第2のインターフェイスおよび前記削除のオペレータに対する前記第2のインプリメンテーションを特定する前記祖父母クラスを規定する第1のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  27. 前記第2のインプリメンテーションはプリプロセッサコードであり、前記第2のコードを提供するステップは、前記プリプロセッサコードを特定する前記テンプレートを規定する第2のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  28. 前記親クラスは特別なテンプレートであり、前記第3のコードを提供するステップは、前記祖父母クラスを前記テンプレートに対する前記パラメータとして特定することによって、前記クラスの階層で前記子クラスを前記特別なテンプレートの前記サブクラスとして規定する第3のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  29. 前記子クラスは特別なテンプレートのサブクラスであり、前記第3のコードを提供するステップは、前記祖父母クラスを前記テンプレートに対する前記パラメータとして特定することによって、前記クラスの階層で前記特別なテンプレートのサブクラスを前記親クラスの前記サブクラスとして規定する第3のコードを提供するステップをさらに含む、請求項16に記載のコンピュータ読取可能な媒体。
  30. メモリ管理実行ファイルは前記親クラスと関連付けられ、前記第4のコードを提供するステップは、
    前記祖父母クラスを前記パラメータとして前記テンプレートに渡すことによって、前記クラスの階層で前記親クラスを規定する第4のコードを生成するステップをさらに含み、
    前記メモリ管理実行ファイルは前記親クラスと関連付けられる、請求項16に記載のコ
    ンピュータ読取可能な媒体。
JP2004504112A 2002-05-07 2003-04-28 異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供 Pending JP2005529384A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US37887202P 2002-05-07 2002-05-07
US38464702P 2002-05-31 2002-05-31
US10/209,469 US7398531B2 (en) 2002-05-07 2002-07-30 Providing common memory management code to objects that are instances of different classes
PCT/US2003/013310 WO2003096186A2 (en) 2002-05-07 2003-04-28 Providing common memory management code to objects that are instances of different classes

Publications (2)

Publication Number Publication Date
JP2005529384A true JP2005529384A (ja) 2005-09-29
JP2005529384A5 JP2005529384A5 (ja) 2006-06-01

Family

ID=29424432

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004504112A Pending JP2005529384A (ja) 2002-05-07 2003-04-28 異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供

Country Status (7)

Country Link
US (1) US7398531B2 (ja)
EP (1) EP1502183A2 (ja)
JP (1) JP2005529384A (ja)
CN (1) CN1653418A (ja)
AU (1) AU2003225220B2 (ja)
CA (1) CA2484002C (ja)
WO (1) WO2003096186A2 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100401686C (zh) * 2005-09-20 2008-07-09 华为技术有限公司 一种实现自动进行设备操作的系统及方法
US7567992B1 (en) * 2006-12-29 2009-07-28 Unisys Corporation Replicating of plurality of instances of an object model in memory arrangement using portable object references where each object attribute assigned GUID
US7499992B1 (en) * 2008-02-27 2009-03-03 International Business Machines Corporation Association traversal translation for common information model
CN101373445B (zh) * 2008-09-09 2011-10-26 创新科存储技术(深圳)有限公司 一种内存调度方法及装置
CN101576824B (zh) * 2009-06-19 2011-11-30 深圳市科陆电子科技股份有限公司 基于jsf开发框架的内存优化系统及方法
US8990499B2 (en) 2010-03-26 2015-03-24 Amazon Technologies, Inc. Caching of a site model in a hierarchical modeling system for network sites
US8700838B2 (en) 2012-06-19 2014-04-15 Concurix Corporation Allocating heaps in NUMA systems
US9047196B2 (en) 2012-06-19 2015-06-02 Concurix Corporation Usage aware NUMA process scheduling
US9575813B2 (en) 2012-07-17 2017-02-21 Microsoft Technology Licensing, Llc Pattern matching process scheduler with upstream optimization
US8966462B2 (en) * 2012-08-10 2015-02-24 Concurix Corporation Memory management parameters derived from system modeling
US9043788B2 (en) 2012-08-10 2015-05-26 Concurix Corporation Experiment manager for manycore systems
US8656135B2 (en) 2012-11-08 2014-02-18 Concurix Corporation Optimized memory configuration deployed prior to execution
US8954546B2 (en) 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
US8924941B2 (en) 2013-02-12 2014-12-30 Concurix Corporation Optimization analysis using similar frequencies
US8997063B2 (en) 2013-02-12 2015-03-31 Concurix Corporation Periodicity optimization in an automated tracing system
US20130283281A1 (en) 2013-02-12 2013-10-24 Concurix Corporation Deploying Trace Objectives using Cost Analyses
US20130227529A1 (en) 2013-03-15 2013-08-29 Concurix Corporation Runtime Memory Settings Derived from Trace Data
US9575874B2 (en) 2013-04-20 2017-02-21 Microsoft Technology Licensing, Llc Error list and bug report analysis for configuring an application tracer
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
US9772927B2 (en) 2013-11-13 2017-09-26 Microsoft Technology Licensing, Llc User interface for selecting tracing origins for aggregating classes of trace data
CN104679741B (zh) * 2013-11-26 2021-03-12 腾讯科技(深圳)有限公司 一种获取实例占用内存的方法及装置
CN109144477B (zh) * 2018-07-06 2022-02-08 武汉斗鱼网络科技有限公司 一种自动管理类对象内存的方法及电子设备
CN112232003B (zh) * 2020-12-17 2021-03-30 芯华章科技股份有限公司 对设计进行仿真的方法、电子设备及存储介质
CN113849309B (zh) * 2021-09-26 2022-09-16 北京元年科技股份有限公司 一种业务对象的内存分配方法以及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000057277A1 (en) * 1999-03-23 2000-09-28 Koninklijke Philips Electronics N.V. Memory reclamation method
JP2000322315A (ja) * 1999-04-23 2000-11-24 Internatl Business Mach Corp <Ibm> データを管理する方法及び装置
WO2001050270A2 (en) * 2000-01-05 2001-07-12 Sun Microsystems, Inc. Methods and apparatus for improving locality of reference through memory management

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5923877A (en) 1996-05-01 1999-07-13 Electronic Data Systems Corporation Object-oriented programming memory management framework and method
US5951680A (en) 1997-06-24 1999-09-14 International Business Machines Corporation Configurator object
US6327606B1 (en) 1998-06-24 2001-12-04 Oracle Corp. Memory management of complex objects returned from procedure calls
US6219678B1 (en) 1998-06-25 2001-04-17 Sun Microsystems, Inc. System and method for maintaining an association for an object
EP0967546A3 (en) 1998-06-25 2001-05-02 Intellution Inc. System and method for storing and retrieving objects
US6763440B1 (en) 2000-06-02 2004-07-13 Sun Microsystems, Inc. Garbage collection using nursery regions for new objects in a virtual heap
AU2002230777A1 (en) 2000-11-01 2002-05-27 Aeroflex Altair Cybernetics Corporation Information transformation software engine
US6874074B1 (en) 2000-11-13 2005-03-29 Wind River Systems, Inc. System and method for memory reclamation
US20020169786A1 (en) * 2001-02-16 2002-11-14 Richek Martin D. Type-safe homogeneous linkage for heterogeneous smart pointers
US6892212B2 (en) 2001-03-22 2005-05-10 International Business Machines Corporation Method for efficient garbage collection based on object type
US20030097537A1 (en) 2001-10-23 2003-05-22 Sun Microsystems, Inc. Method and apparatus for scoped memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000057277A1 (en) * 1999-03-23 2000-09-28 Koninklijke Philips Electronics N.V. Memory reclamation method
JP2000322315A (ja) * 1999-04-23 2000-11-24 Internatl Business Mach Corp <Ibm> データを管理する方法及び装置
WO2001050270A2 (en) * 2000-01-05 2001-07-12 Sun Microsystems, Inc. Methods and apparatus for improving locality of reference through memory management

Also Published As

Publication number Publication date
EP1502183A2 (en) 2005-02-02
WO2003096186A2 (en) 2003-11-20
AU2003225220B2 (en) 2009-10-01
CA2484002C (en) 2011-03-22
US7398531B2 (en) 2008-07-08
WO2003096186A3 (en) 2004-12-02
US20050177836A1 (en) 2005-08-11
AU2003225220A1 (en) 2003-11-11
CN1653418A (zh) 2005-08-10
CA2484002A1 (en) 2003-11-20

Similar Documents

Publication Publication Date Title
JP2005529384A (ja) 異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供
JP4541877B2 (ja) オブジェクトをプログラミングするための簡略化されたメモリの割当ての取消
US6018628A (en) Method of implementing parameterized types to be compatible with existing unparameterized libraries
US6526570B1 (en) File portability techniques
EP1686470B1 (en) Efficient data access via runtime type inference
MacIntyre et al. Language-level support for exploratory programming of distributed virtual environments
US6633313B1 (en) Event routing mechanism in a computer system
US6070008A (en) System, method, and computer program product for providing an incremental storage adaptor
JPH0687222B2 (ja) アプリケーションとデータベース管理システム間の相互通信システム及び方法
JP2000155679A (ja) 共有デ―タ収集において安定反復子を作成する方法及びその装置
CN103718155A (zh) 运行时系统
JP2002525744A (ja) テキスト・オブジェクトのコンパイル方法およびシステム
JP2007012064A (ja) 非ジェネリック化方法がジェネリック化方法をオーバーライドすることの許可
US8146068B2 (en) Managing heuristic properties
JP2002116917A (ja) オブジェクト指向型プログラミング言語によるソース・プログラムをコンパイルするコンパイラ
US10684873B2 (en) Efficient data decoding using runtime specialization
US7526752B1 (en) Introspection support for generic types
Lortz et al. Combining contracts and exemplar-based programming for class hiding and customization
JP2000347875A (ja) ファイル移植技術
US6904516B2 (en) Mechanism for enabling efficient execution of an instruction
KR100287065B1 (ko) 객체지향데이터베이스시스템의영속객체관리방법
US9058339B2 (en) Source control inheritance locking
Biliris et al. Ode 2.0 user's manual
JP2002014813A (ja) 分散適応実行時プラットホーム用のアプリケーションプログラム開発方法及びコンピュータ装置
Ali iPhone SDK 3 Programming

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060405

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060405

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090407

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090706

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090713

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090731

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090825

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100105

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100601