JP2924705B2 - メモリ管理方法およびオブジェクト管理方法 - Google Patents

メモリ管理方法およびオブジェクト管理方法

Info

Publication number
JP2924705B2
JP2924705B2 JP7107780A JP10778095A JP2924705B2 JP 2924705 B2 JP2924705 B2 JP 2924705B2 JP 7107780 A JP7107780 A JP 7107780A JP 10778095 A JP10778095 A JP 10778095A JP 2924705 B2 JP2924705 B2 JP 2924705B2
Authority
JP
Japan
Prior art keywords
area
persistent object
persistent
data
pointer
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.)
Expired - Fee Related
Application number
JP7107780A
Other languages
English (en)
Other versions
JPH08286969A (ja
Inventor
美樹 渡辺
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
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 Fuji Xerox Co Ltd filed Critical Fuji Xerox Co Ltd
Priority to JP7107780A priority Critical patent/JP2924705B2/ja
Priority to US08/623,991 priority patent/US5799185A/en
Publication of JPH08286969A publication Critical patent/JPH08286969A/ja
Application granted granted Critical
Publication of JP2924705B2 publication Critical patent/JP2924705B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は,プログラムにおけるメ
モリの管理方法に関し、特に、ガーベージコレクション
機能を用いた自動的なメモリのデータ領域の回収、ある
いは永続オブジェクトをキャッシュして用いるオブジェ
クト指向データベース管理システムにおけるキャッシュ
領域の回収等を行う方法に関する。
【0002】
【従来の技術】応用プログラムのデータの領域として割
り当てられたメモリの領域を、その容量いっぱいまで使
うと使用できる領域がなくなるので、メモリを解放する
必要がある。そのためのメモリの管理の方法として、例
えば、ユニックスのシステムでは、領域の確保、解放を
行うために用意されたmalloc/freeというコ
マンドを用いて、領域の確保と解放を行う方法がある。
これは、コマンドmallocで領域を確保し、コマン
ドfreeで必要でなくなったオブジェクトを解放する
ものであり、明示的に応用プログラムからこの領域を使
うことを指定して領域を確保し、応用プログラムがその
領域を必要としなくなったときに、その領域がいらなく
なったことを明示的に指示するやり方である。この方法
の問題は、コマンドfreeによる領域の開放をどこで
行うかということを応用プログラムにおいて明確に設定
しておかないと、必要なものを解放してしまったり、使
わなくなったのに解放されずに残ってしまうということ
が生ずることである。
【0003】これをなくすためにいわゆるガーベージコ
レクションが用いられる。このガーベージコレクション
の機能は、応用プログラムによりメモリ上に動的に確保
されたデータ領域のうち使用しなくなった領域を自動的
に解放することである。ガーベージコレクションにおい
ては、応用プログラムの持つ領域からの参照を調べて行
って参照されていない領域が残っていているとき、この
領域は使っていないと見なしてその領域を解放する処理
を自動的に行う。ガーベージコレクションは、ポインタ
を探すことが必要になるので、リスプLisp、スモー
ルトークSmalltalkなどデータ領域へのポイン
タと整数値が区別できるような言語処理系で用いられて
きた。
【0004】しかし、整数かアドレスかの区別がないよ
うなデータ構造を持つそれ以外の言語例えばCであると
かC++のようなな言語でもガーベージコレクションの
機能が欲しいという要求があり、整数かポインタかの区
別は出来ないという前提のもとに、どのようにガーベー
ジコレクションを実現して行くかと言う研究もなされて
いる。例えば、(1)整数値もボインタであるとみなし
て領域の参照の有無を判断する方法(Hans−Jue
rgen Boehm and mark Weise
r、Garbage Collectioning a
n Uncooperative Environme
nt、Software−Practice and
Experience、Vol.18、No.9、p
p.807−820、1988。以下、文献(1)とい
う。)や、(2)整数値かボインタかの区別できない部
分についてのみプログラムで明示的に解放させる方法
(特開平5−173869号公報。以下、文献(2)と
いう。)等が提案されている。
【0005】前記文献(1)記載のような従来方法は、
メモリのデータ領域に割り当てられた所定単位のデータ
であるデータオブジェクトの一群をチャンクChunk
と呼ぶ所定サイズ(例えば4092バイト)のホルダに
保持し、そのホルダのアドレス(Chunkの先頭のア
ドレス)のリストを作成して、データオブジェクトの管
理を行うものである。また、各ホルダ(チャンク)は対
応するリストのエントリへのポインタを有している。ホ
ルダ内のデータオブジェクトのアドレスは、下位12ビ
ットを0に置き換えることによりホルダのアドレスとな
る。このような関係に着目することにより、ガーベージ
コレクションにおける、ポインタであるか否かの判断を
して回収可能なデータを調べることを可能としている。
即ち、ガーベージコレクションにおいて、応用プログラ
ムの持つ整数またはポインタのいずれかである変数値
を、下位ビット12ビットを0に置き換えて、これを1
つのオブジェクトホルダのアドレスとみなし、それに対
応すべきリストのエントリへのポインタ部分を求める。
そのポインタにより得られた記憶位置の内容が、前記オ
ブジェクトホルダのアドレスとみなした値と一致するか
を調べる。もし、一致すれば、データオブジェクトとそ
れを保持するホルダと、データオブジェクトを管理する
ためのリストとの前記関係を満たし、前記応用プログラ
ムの持つ変数値はポインタであると判定し、そうでなけ
ればポインタではないと判定する。判定結果はマークビ
ットとして保持し、そのマークビットに従って、領域の
回収を行う。
【0006】前記文献(2)記載の従来方法は、データ
オブジェクトを、ガーベージコレクションにより回収す
るものと、応用プログラムから明示的に回収するものと
に分けて管理するようにしたものである。
【0007】オブジェクト指向データベース管理システ
ムでは、二次記憶に記憶されているオブジェク卜を一時
的に主記憶に取り出して操作する。この処理を高速化す
るためにオブジェクトの内容を主記憶上へキャッシユ
し、そのオブジェクトの領域のアドレスを記憶したオブ
ジェクトテーブルを用いたオブジェクト管理方法(特開
平5−225034号公報(以下、文献(3)とい
う))が堤案されている。即ち、このオブジェクト管理
方法では、オブジェクト指向データベース管理システム
が、二次記憶装置および主記憶装置上の永続オブジェク
トを管理するが、その管理において主記憶装置上のキャ
ッシュ領域に置かれたオブジェクトテーブルを用いる。
この主記憶装置上のオブジェクトテーブルはオブジェク
ト識別子OID、永続オブジェクトの二次記憶装置での
アドレスDisk Address、および永続オブジ
ェクトの主記憶装置でのアドレスMemory Add
ressの各フィールドからなるデータ構造を有してい
る。応用プログラムからのオブジェクト識別子OIDを
指定してデータの要求があると、オブジェクト指向デー
タベース管理しシステムは、オブジェクトテーブルを調
べ、対応するアドレスMemory Addressが
登録されていれば、そのアドレスMemoryAddr
essを返し、登録されていなければ、二次記憶装置か
ら指定のオブジェクト識別子OIDを持つ永続オブジェ
クトを主記憶装置のキャッシュ領域に読み込んで、その
位置を示すアドレスをオブジェクトテーブルのMemo
ryAddressのフィールドに登録し、そのアドレ
スを応用プログラムに返す。応用プログラムは、以降は
得られたアドレスによりデータを直接に参照する。
【0008】
【発明が解決しようとする課題】前記文献(1)記載の
ような従来方法(1)と文献(2)記載のような従来方
法(2)のいずれも、基本的には、整数とポインタの区
別がつかない場合でも、必要なデータ領域の回収を行う
ことができる。しかしながら、従来方法(1)では、ガ
ーベージコレクションの際に、応用プログラムからの参
照が残っている場合に強制的にデータ領域を回収できな
いため、メモリの利用効率が悪くなるおそれがあった。
例えば、応用プログラムがデータを識別子等により管理
する管理テーブルを持ち、その管理テーブルを介して、
データにアクセスする構成とすることがある。このよう
な構成においては、管理テーブルに管理されるデータは
常に応用プログラムから参照されるデータであるため、
ガーベージコレクションでは応用プログラムからの参照
が残っており、この領域のガーベージコレクションによ
る回収はできなかった。
【0009】また、従来の方法(2)では応用プログラ
ムから明示的に回収のための指示を与えなければならな
いため、応用プログラムの記述が繁雑になるばかりでな
く、また、ガーベージコレクションができるデータ領域
ににおいては、前述の管理テーブルを用いる場合には、
前述の通り回収できない領域が生じるおそれがあった。
【0010】文献(3)記載のような従来のオブジェク
ト管理方法では、主記憶装置のキャッシュ領域に一旦読
み込まれた永続オブジェクトは、トランザクションや応
用プログラムの処理が終了するまで、回収することがで
きなかった。従って、応用プログラムから操作されたこ
とのあるオブジェクトがトランザクションや応用プログ
ラムの終了まで残ってしまうので、プログラムを動作さ
せるために多くのメモリ資源を必要とする。図23に示
すように、応用プログラム231が、オブジェクトデー
タを必要なときに、識別子OIDをオブジェクト指向デ
ータベース管理システム232に与えてデータを要求す
ると、オブジェクト指向データベース管理システム23
2は管理テーブルを用いて、識別子に対応する主記憶装
置内の永続オブジェクトの格納アドレス(ポインタ)を
返す。応用プログラム231は、得られた格納アドレス
により主記憶装置234内のキャッシュ領域の永続オブ
ジェクトデータを直接参照する。この直接の参照がある
ため、オブジェクト指向データベース管理システム23
2は、どのデータが応用プログラムからの参照が終了し
て回収可能かを判断することができず、従って、回収の
ための手段を有しなかったのである。
【0011】なお、応用プログラムからの直接の参照を
なくして、すべてオブジェクト指向データベース管理シ
ステムを介して参照するように構成することも考えられ
るが、そのようにすると速度が遅くなり性能が悪くなる
ので、実用に供することは難しかった。また、従来のガ
ーベージコレクションにより前記キャッシュ領域をも含
むデータ領域の回収処理を行うとしても、キャッシュ領
域の永続オブジェクトは管理テーブルからの参照が残っ
ているため、この領域のガーベージコレクションによる
回収もできなかった。
【0012】本発明は、上述の諸問題を解決することを
目的とする。即ち、本発明は、ガーベージコレクション
を行う際に、他の領域から参照されているデータ領域に
ついても自動的に回収できるようなメモリ管理方法を堤
供することを目的とする。
【0013】また、本発明は、ガーベージコレクション
を行う際に、回収されるデータ領域ごとに異なる処理を
設定でき、そのデータ領域に関連する資源の解放、管理
情報の更新ができるようなメモリ管理方法を堤供するこ
とを目的とする。
【0014】本発明は、オブジェクト指向データベース
システムにおいて、応用プログラムから参照されていな
いキャッシュ領域内の永続オブジェクトの領域を回収し
再利用することのできるオブジェクト管理方法を堤供す
ることを目的とする。
【0015】
【課題を解決するための手段および作用】本発明の基本
的な特徴は、データを記憶する所定単位(例、オブジェ
クト単位)のデータ領域(例、図2の領域215)を管
理情報(例、図2の22,23)を用いて管理する電子
計算機のメモリ管理方法において、 ・前記管理情報にデータ領域内のデータのうち、ポィン
タを示すデータの場所を示す情報(例、図2のpoin
ters222)を付与しておき、 ・ガーベージコレクションを行う際に、前記データ領域
からの参照のうち、ポインタを示すデータの場所からの
参照のみを参照元として有効なものとして扱うことであ
る。データを記憶する所定単位のデータ領域中には、ポ
インタあるいは非ポインタであるデータを保持する複数
の場所(位置)があり、前記管理情報はそれらの場所の
うちどの場所にポインタが格納されているかを指定する
情報である。例えば、データ領域に保持されるデータ
が、永続オブジェクトであり、各永続オブジェクトが整
数あるいはポインタである複数(例えば5つ)の変数か
らなると仮定した場合に、ポインタの場所を示す情報と
して01110と指定すれば、第2、第3および第4番
目の変数はポインタであると指定され、残りの第1番目
と第5番目の変数は非ポインタと指定されたことにな
る。ガーベージコレクションにおいては、一般に、応用
プログラムから参照されるデータ、および応用プログラ
ムから参照されるデータからさらに参照されるデータ等
のような、応用プログラムから参照される可能性のある
すべてのデータをマークし、その結果、マークのない従
って参照される可能性のないデータのデータ領域を解放
する。本発明では、このような参照関係を調べる際に、
前記ポインタを示すデータの場所を示す管理情報を調
べ、その管理情報を優先させる。即ち、実際にはポイン
タであり、本来は参照元となるべきデータであっても、
その管理情報が非ポインタであると指定しているデータ
は参照元として有効なものとしては扱わず、ポインタを
示すデータの場所からの参照のみを参照元として有効な
ものとして扱う。従って、本発明によれば、データ領域
内にポインタが存在しないことを指定できるため、実際
にはポインタによる参照を含んでいても、その参照先を
自動的に回収することができる。
【0016】また、本発明の他の特徴は、上記メモリ管
理方法において、前記管理情報に、データ領域を回収す
る際に呼び出す手続き(例、deallocFunc)
のアドレス情報を付与しておき、当該データ領域の回収
の際に、前記アドレス情報により手続を呼び出して実行
するようにしたことである。呼び出す手続きとしては、
その領域が参照している他の領域や資源を解放する処理
や、データ領域がオープンされたファイルの操作を含む
ものである場合のファイルのクローズ処理など、広い意
味での資源の解放をデータ領域のデータの型に応じて適
切に行うことができる。
【0017】また、本発明の他の特徴は、前記基本的な
特徴のメモリ管理方法において、前記所定単位のデータ
領域に記憶されるデータとして、応用プログラムからの
参照の対象となるオブジェクトとそのオブジェクトを管
理する管理テーブルとを有し、・前記管理テーブルは、
少なくとも、前記オブジェクトへのポインタを含み、・
前記管理テーブルに対応する前記管理情報における前記
ポインタを示すデータの場所を示す情報として、前記オ
ブジェクトへのポインタのすべてが、ガーベージコレク
ションのための参照の有無の検査においては参照元とし
て無効であるとみなす非ポインタ情報を設定するように
した。例えば、図12におけるオブジェクトホルダヘッ
ダ122あるいは図21におけるオブジェクトホルダヘ
ッダ212には、pointers=0を設定してい
る。従来、管理テーブルにより管理されるオブジェクト
は、管理テーブルのポインタによって指されるので、ガ
ーベージコレクションの際の参照の有無の検査におい
て、管理される全てのオブジェクトは参照があると判定
され、ガーベージコレクションによって回収することは
できなかったが、本発明では、上記のように非ポインタ
情報を設定するので、オブジェクトの回収が可能とな
る。
【0018】本発明のオブジェクト管理方法は、二次記
憶装置から永続オブジェクトを読み出して主記憶装置の
キャッシュ領域に保持して管理するオブジェクト指向デ
ータベース管理システムにおいて、 ・前記主記憶装置上に、応用プログラムが前記キャッシ
ュ領域の永続オブジェクトの領域(例ハンドラ)の参照
アドレスを含む値を保持する変数(例、大域変数/局所
変数)領域を設けておき、 ・前記キャッシュ領域の各永続オブジェクトの領域につ
いて、前記変数領域と、当該永続オブジェクトの領域を
除く、前記変数領域から参照された他の永続オブジェク
トの領域とのいずれからも参照されていない場合には、
当該永続オブジェクトの領域を回収して新たな永続オブ
ジェクトの領域として再利用することを特徴とするオブ
ジェクト管理方法である。永続オブジェクトを主記憶装
置のキャッシュ領域に保持して管理するオブジェクト指
向データベース管理システムにおいては、前述のよう
に、従来は、キャッシュ領域の使われなくなったオブジ
ェクトの領域を回収して、再利用する方法を持っておら
ず、またガーベージコレクションでも回収することがで
きなかった。本発明は、オブジェクト指向データベース
管理システムのオブジェクト管理方法として、キャッシ
ュ領域からの回収手順を付加した。オブジェクト指向デ
ータベース管理システムは、応用プログラムからのキャ
ッシュに対する永続オブジェクトの要求があると、その
永続オブジェクトがキャッシュ領域に保持されている場
合には、そのアドレスを返す。応用プログラムはそのア
ドレスを変数領域に保持して、必要に応じてキャッシュ
領域に対して直接にアクセスする。従って、本発明は、
この点に着目して、変数領域からのキャッシュ領域に対
する参照(直接的な参照のほかに、間接的な参照即ち変
数領域から参照された永続オブジェクトからの参照をも
含む)された永続オブジェクトを調べることにより、回
収可能なキャッシュ領域の永続オブジェクトを決定でき
るようにした。このように、本発明によれば、永続オブ
ジェクトの領域を確保する処理において、十分な空き領
域がない場合に、応用プログラムからの参照のない永続
オブジェクトの領域を回収し、再利用できるため、キャ
ッシュの大きさを限定でき、限られたメモリ資源でも応
用プログラムが動作可能となる。
【0019】また、上記オブジェクト管理法方におい
て、永続オブジェクトの領域の管理情報として、永続オ
ブジェクトの識別子、二次記憶装置の格納アドレス
(例、デイスクアドレス)、およびキャッシュ領域上の
記憶アドレス(例、メモリアドレス)、を示す情報(図
14のオブジェクトテーブルキャッシュ)を記憶し、か
つ記憶アドレスが示す永続オブジェクトの領域には、対
応する永続オブジェクトの識別子または、対応する各記
憶アドレスの記憶場所を示す情報を記憶するように構成
した場合は、前記管理情報に保持している記憶アドレス
と、永続オブジェクトの識別子または前記記憶アドレス
の記憶場所との間に設定された相互の指定関係を調べる
ことにより、変数領域のある値がキャッシュ領域内の永
続オブジェクトを参照するものであるか否かを検査する
ことができ、また、双方向の参照関係があるため判定結
果をマークの値として書込みに行くことが可能となる。
その具体的な1つの態様では、前記キャッシュ領域に、
永続オブジェクトの識別子、二次記憶装置の格納アドレ
ス、キャッシュ領域上の永続オブジェクトハンドラへの
ポインタ、およびその記憶アドレスの永続オブジェクト
についての応用プログラムからの参照の有無を表すマー
クを対応させたエントリを持つ永続オブジェクト管理テ
ーブル(図13の13111)と、永続オブジェクト管
理テーブル上の対応するエントリへのポインタを有し二
次記憶装置から読み込まれた永続オブジェクトを保持す
る永続オブジェクトハンドラ(図13の13112)と
を設け、 ・永続オブジェクトの回収処理において、応用プログラ
ムの保持するデータをすべてポインタとみなして、それ
により指される永続オブジェクトハンドラを探し、それ
により見つかった永続オブジェクトハンドラが永続オブ
ジェクト管理テーブルのいずれかのエントリと相互に参
照されているとき、その永続オブジェクトハンドラの永
続オブジェクトは応用プログラムからの参照があると判
定し、その判定結果を対応するエントリの前記マークに
設定し、その設定されたマークに基づき応用プログラム
からの参照があると判定されなかった永続オブジェクト
を回収する。
【0020】また、本発明のオブジェクト管理方法の他
の特徴は、二次記憶装置から永続オブジェクトを読み出
して主記憶装置のキャッシュ領域に保持して管理するオ
ブジェクト指向データベース管理システムにおいて、 ・前主記憶装置上に応用プログラムが前記キャッシュ領
域の永続オブジェクトの領域(例、ハンドラ)の参照ア
ドレスを含む値を保持する変数(例、大域変数/局所変
数)領域を設けておき、 ・前記キャッシュ領域の回収処理を行う際に、当該キャ
ッシュ領域の各永続オブジェクトの領域について、前記
変数領域から参照されている永続オブジェクトの領域に
ついては、内容を削除し、かつ状態情報として無効を付
与し、前記変数領域から参照されている永続オブジェク
トの領域を除く永続オブジェクトの領域については、そ
の領域を回収して新たな永続オブジェクトの領域として
再利用することである。一般に、永続オブジェクトハン
ドラが保持するデータの内容は二次記憶装置に記憶され
たものを読み込んだものであるので、内容を消去しても
必要に応じて再読み込みすることで復元できる。本発明
はこの点に着目し、変数領域から参照されていることが
わかった永続オブジェクトは、その内容を削除し、無効
を示す状態情報を付与するようにした。これにより復元
に際しては、その状態情報を調べ無効が付与されていれ
ば、二次記憶装置から対応する永続オブジェクトを読み
込めばよい。本発明によれば、間接的に参照されている
永続オブジェクト即ち永続オブジェクトのみから参照さ
れている永続オブジェクトの領域は回収されるので、領
域の回収率が高まり、メモリの使用効率を高くすること
ができる。
【0021】また、本発明は、二次記憶装置から読み出
した永続オブジェクトとその永続オブジェクトに対する
アクセスの管理をする管理テーブルとをそれぞれオブジ
ェクトとして主記憶装置のキャッシュ領域に記憶し、か
つ、前記永続オブジェクトおよび前記管理テーブルのた
めのキャッシュ領域の確保および回収を行うための管理
情報を主記憶装置の前記キャッシュ領域外に記憶して、
永続オブジェクトの管理をするオブジェクト指向データ
ベース管理システムのメモリ管理方法であって、 ・前記管理テーブルは、永続オブジェクトの識別子、永
続オブジェクトの二次記憶装置の格納アドレス、および
キャッシュ領域上の永続オブジェクトへのポインタ(メ
モリアドレス)を対応させた情報を保持し、 ・前記管理情報は、回収のための参照の有無の検査にお
いて参照元として無効であるとみなす非ポインタ情報
と、回収の際に呼び出す手続のアドレス情報とを有し、
かつ、前記管理テーブルの前記ポインタに対しては、す
べて非ポインタ情報を指定し、また、回収の際に呼び出
す手続は回収される永続オブジェクトに対応する前記管
理テーブルの前記ポインタをヌルにする処理を含み、 ・キャッシュ領域の永続オブジェクトの回収処理におい
ては、応用プログラムの変数を保持する主記憶装置上の
データ領域である変数領域からの参照の有無および前記
管理情報の非ポインタ情報に基づき、回収する永続オブ
ジェクトを決定するとともに、前記メモリアドレスをヌ
ルにする手続を呼び出して実行することを特徴とする。
上記のように、前記管理テーブル中の前記永続オブジェ
クトへのポインタに対しては、すべて非ポインタ情報を
指定しているので、管理テーブル中のポインタはすべて
回収のための参照の有無の検査においては参照元として
無効であるとみなされる。従来の永続オブジェクトのキ
ャッシュにおいては、キャッシュ領域に読み込まれた永
続オブジェクトは管理テーブルにより参照されているた
め回収することができなかったが、本発明の上記構成に
よれば、管理テーブルからの参照は無効とみなされるの
で、回収が可能となった。また、回収の際に呼び出す手
続が、回収される永続オブジェクトに対応する前記管理
テーブルの前記ポインタをヌルにする処理を含むので、
回収に伴う管理テーブルの更新も行うことができる。前
記管理情報に設定される前記永続オブジェクトの領域を
回収する際に呼び出す手続きとして、上記以外に、前記
回収される永続オブジェクトが別に管理されるキャッシ
ュ領域外のデータ領域を参照している時に、明示的にそ
のデータ領域を解放する処理がある。
【0022】
【実施例】
(第1の実施例)図1から図12に、本発明の第1の実
施例を示す。図1は本発明のメモリ管理方法をプログラ
ムにより実施するためのシステムの概略の機能ブロック
である。同図において、このシステムは、主記憶装置1
1、メモリ管理モジュール12、応用プログラム13を
備えている。主記憶装置11は、応用プログラム13が
作成したオブジェクトを記憶するために用いられる。オ
ブジェクトの領域1121は、メモリ管理モジュール1
2の管理の対象となり、メモリ管理空間112内に確保
される。オブジェクトの領域1121を管理するための
情報も、管理情報111として、主記憶装置11に記憶
される。さらに主記憶装置11には応用プログラム13
の実行環境として、その大域変数113や局所変数11
4などのデータ領域も記憶される。メモリ管理モジュー
ル12は、主記憶装置11中に設けられたメモリ管理空
間15を管理し、応用プログラム13の要求によりオブ
ジェクトのための領域1121の確保や自動的な再利用
を行う。
【0023】図2は図1のメモリ管理空間112の詳細
な構成を示す図である。同図において、オブジェクトホ
ルダ(Object Holder)21、21’はメ
モリ管理モジュール12の管理の対象となるオブジェク
トの領域1121を確保する部分である。メモリ管理空
間112には複数のオブジェクトホルダ21、21’が
存在する。各オブジェクトホルダ21、21’には、確
保する領域の大きさ(unitSize)221、領域
中のポインタの位置を示すビット列(pointer
s)222、領域が回収される時に呼び出される手続き
(deallocFunc)223が対応付けられてい
る。これらの情報はオブジェクトホルダヘッダ(Obj
ect Holder Header)22、22’と
して、オブジェクトホルダ21,21’とは別の領域に
確保され、オブジェクトホルダ21、21’はそのオブ
ジェクトホルダヘッダへのポインタ213を保持してい
る。一個のオブジェクトホルダヘッダには、大きさ、領
域中のボインタの位置、領域が回収される時に呼び出さ
れる手続きが同じである領域のみが確保される。オブジ
ェクトホルダ21、21’の先頭には、オブジェクトホ
ルダエントリ(Object Holder Entr
y)211として、そのオブジェクトホルダを参照して
いるオブジェクトホルダエントリ23のノードのアドレ
スを記憶する。その他に、空き領域をリスト状に保持す
るフリーリスト(freeList)212、領域の回
収時に参照の有無を記憶するマークビット(markB
its)214がある。また、オブジェクトホルダは2
nの整数倍の大きさとなるように、主記憶装置11中に
確保される。ここでは、212=4096バイトの大き
さとなるように確保する。一個のオブジェクトホルダヘ
ッダ22は、上述の情報を保持するとともに、対応する
一個以上のオブジェクトホルダ21を、オブジェクトホ
ルダエントリ23を介して参照する。オブジェクトホル
ダエントリ23はリスト構造により複数のオブジェクト
ホルダを連結する。また、オブジェクトホルダエントリ
23は主記憶装置11中の連続した領域に配置される。
【0024】このように構成されたメモリ管理空間11
2に対して、メモリ管理モジュール12は、応用プログ
ラム13の要求に基づいて、領域の確保、自動回収を行
う。以下に、その処理の内容を説明する。領域の確保の
処理は応用プログラム13の要求に基づいて起動され
る。図3に、応用プログラム13の要求の記述例を示
す。図3において、struct part{ }はオ
ブジェクトの型を定義するもので、オブジェクトは5個
の変数とその種類を指定している。続く、void d
eallocPart{ }の部分は、オブジェクトが
回収される際に呼び出される処理を表している。また、
Parts=…の部分は、メモリ管理モジュールにより
allocate_objectという手続を呼び出し
て、オブジェクト管理テーブルの領域を、指定の属性を
持たせて確保することを表している。load_par
t(int id){ }の部分は、オブジェクトを主
記憶装置のメモリ管理空間内に読み込む関連の処理の内
容を記述したものである。これをフローチャートの形式
で表現したのが、図4のステップ(0−1)〜(0−
4)である。図4のステップ(0−1)で、point
ersおよびdeallocFuncの指定を行う。図
3では、pointers=01110、deallo
cFunc=deallocPartが指定されてい
る。図4のステップ(0−2)では、オブジェクトのた
めの領域を確保し、そのアドレスを変数pに保持するこ
とを表している。手続きallocate_objec
t()の呼び出しが、メモリ管理モジュール12に対す
る領域の確保の要求を表しており、この例では、オブジ
ェクトpartのために領域として、大きさがsize
of(struct part)で、2、3、4番目の
変数がポインタであるような領域で、回収時にdeal
locPart()が呼ばれる領域を確保するように指
示している。次に、ステップ(0−3)で、確保した領
域をオブジェクトテーブルへ登録し、変数pの指す内容
を二次記憶装置から読み込む。
【0025】応用プログラム13からの指示を受け取っ
たメモリ管理モジュール12が領域を確保する手順を、
図5〜図11に示す。この手順は応用プログラムによっ
て起動される。応用プログラムは、この手順に対する引
数として、確保する領域の大きさ、ポインタの場所を示
すピット列、領域が回収された時に呼ばれる手続きを渡
す。これらはステップ(1−1)で、それぞれ、変数
s、p、fに代入される。
【0026】次のステップ(1−2)で、すでに存在し
ているオブジェクトホルダヘッダの中から、size=
s、pointers=p、deallocFunc=
fであるものを検出する。これらを高速に検索する方法
としては、オブジェクトホルダヘッダをSizeの順に
並べて、二分検索によりsize=sであるものを検出
した後に、その中から、deallocFunc、po
intersが同じであるもの検出する方法がある。ま
た、size、pointers、deallocFu
ncの一部またはすべてについてハッシュ法やB−木な
どの手法によりインデクスを付与し、検索を高速化する
ことも可能である。
【0027】ステップ(1−3)では、オブジェクトホ
ルダヘッダの検出の結果、該当するものがあるか否かを
判定する。そして、該当するオブジェクトホルダヘッダ
があれば、対応するオブジェクトホルダの空き領域を探
し、空き領域がなければガーベージコレクションによ
り、領域の回収を行って空き領域を確保する(ステップ
(1−6〜1−12))。領域の回収に失敗したときは
それに対応するオブジェクトホルダを作成、追加する
(ステップ(1−15〜1−19))。あるいは該当す
るオブジェクトホルダヘッダがなかったときは、新しい
オブジェクトホルダヘッダを作成し(ステップ(1−1
3〜1−14))、それに対応するオブジェクトホルダ
を作成、追加する(ステップ(1−13〜1−1
9))。
【0028】これをさらに詳細に説明する。即ち、ステ
ップ(1−3)の判定により、該当するオブジェクトホ
ルダヘッダがあればステップ(1−4)で、そのアドレ
スを変数hhに代入する。ステップ(1−5)では、変
数nに変数hhの指す先のオブジェクトホルダヘッダの
Holderの内容を代入する。
【0029】ステップ(1−6)で、変数nがNULL
か否かを判定する。nがNULLでなければ、ステップ
(1−7)でnの指している先のオブジェクトホルダエ
ントリのholderの内容をhに代入する。
【0030】ステップ(1−8)では、h→freeL
ist即ち変数hの指す先のオブジェクトホルダのfr
eeListがNULLか否かを判定する。h→fre
eListがNULLでなければ、ステップ(1−9)
で、変数oに、h→freeListの内容を代入し、
h→freeListにo→nextFreeを代入す
る。oが応用プログラムへ返される。これにより、h→
freeListが指していた空き領域が使用中の領域
となり、応用プログラムが利用できるようになる。
【0031】ステップ(1−8)でh→freeLis
tがNULLであれば、そのオブジェクトホルダには空
きの領域がないことを示しているので、ステップ(1−
10)で、オブジェクトホルダエントリのエントリのリ
ストから次のノードn→nextが取り出され、ステッ
プ(1−6)に戻る。ステップ(1−8)でh→fre
eListがNULLでない場合には、ステップ(1−
9)で、h→freeListの内容を確保した領域と
して変数oに代入し、応用プログラムに返す。それに伴
って、freeListを繰り下げる。即ち、h→fr
eeListをo→nextFreeとする。
【0032】また、ステップ(1−6)でnがNULL
であれば、空き領域が残っていないため、ステップ(1
−11)で領域の回収いわゆるガーベージコレクション
を行う。
【0033】ステップ(1−12)では、領域の回収の
成否を判定する。領域の回収に成功したならば、ステッ
プ(1−5)に戻り、再び空き領域を検出する。
【0034】領域の回収に失敗したならば、ステップ
(1−15)に進み、新たなオブジェクトホルダを生成
する。この時、メモリ管理空間の使用量を検査し、予め
定められた大きさを越える場合には、ObjectHo
lderの生成を行わず、領域の確保に失敗した旨を応
用プログラムに通知することも可能である。
【0035】ステップ(1−3)で該当するオブジェク
トホルダヘッダがなければステップ(1−13)へ進
み、新たなオブジェクトホルダヘッダを生成する。この
時にも、メモリ管理空間の使用量が予め定められた大き
さを越える場合には、オブジェクトホルダヘッダの生成
を行わず、領域の確保に失敗した旨を応用プログラムに
通知することも可能である。
【0036】ステップ(1−14)で、新たに生成され
たオブジェクトホルダヘッダのアドレスが変数hhに代
入される。ステップ(1−15)では、新しいオブジェ
クトホルダが生成され、ステップ(1−16)でそのア
ドレスが変数hに代入される。
【0037】ステップ(1−17)ではステップ(1−
15)で生成されたオブジェクトホルダのためのオブジ
ェクトホルダエントリのノードが確保される。確保され
たノードのアドレスはステップ(1−18)で変数nに
代入される。
【0038】ステップ(1−19)では、変数nの指す
ノードと変数hの指すオブジェクトホルダの間に双方向
のポインタを設定する。その後、ステップ(1−9)に
進むことで、要求された領域を確保することができる。
【0039】図8〜図9は、メモリ管理モジュール12
が領域を回収する手順を示している。この手順は、文献
(1)に記載されているマーク・スイープ法に基づいて
いる。最初にステップ(2−1)で、すべてのオブジェ
クトホルダのmarkBitsを初期化する。続いて、
ステップ(2−2)からステップ(2−4)で、応用プ
ログラム中の大域変数、局所変数に格納されているすべ
てのデータを取り出し、そのデータに対してマークを付
ける処理を呼び出す。応用プログラムの大域変数、局所
変数の内容は、そのプログラムがUNIXなど一般的な
OSで動作している場合には、データ領域とスタック、
レジスタから取り出すことができる。
【0040】ステップ(2−2)ですべてのデータにつ
いてマークを付ける処理が終了したと判定されると、ス
テップ(2−5)に進む。ステップ(2−5)からステ
ップ(2−13)で、すべてのオブジェクトホルダにつ
いて、領域の回収の処理を行う。この中でステップ(2
−8)からステップ(2−13)は1個のオブジェクト
ホルダのすべての領域について、回収の処理を行う。ス
テップ(2−9)はi番目の領域にマークが付いている
か否かを判定する。マークが付いていれば、iを1だけ
増加させ、ステップ(2−8)に戻り、次の領域の回収
の処理を行う。
【0041】また、マークが付いていなければ、ステッ
プ(2−11)からステップ(2−13)で、その領域
のアドレスを引数に手続dealloc−Funcを呼
び出し、参照している資源の解放などの処理を行うとと
もに、その領域をfreeListの先頭に追加する。
【0042】ステップ(2−5)ですべてのオブジェク
トホルダについての回収の処理が終了したと判断されれ
ば、処理全体を終了する。
【0043】図10〜図11は、図8のステップ(2−
4)で呼び出される、領域にマークする手順を示してい
る。この手続きは、領域のアドレスである可能性のある
データを引数pとして受け取る。ステップ(3−1)で
は、この引数pの値の下位12ピットを0クリアしたア
ドレスを変数hに代入する。この例では、pの値がもし
アドレスであれば下位12ビットを0とする値はpを含
むオブジェクトホルダの領域の先頭のアドレスである。
そして、そのアドレスには図2に示すようにそのオブジ
ェクトホルダに対応するオブジェクトホルダエントリの
ノードのアドレスが格納されている。
【0044】続いてステップ(3−2)で変数hの指し
ている先の内容を変数nに代入する。ステップ(3−
3)で変数nの値がオブジェクトホルダエントリ内のア
ドレスで、かつn→holder=nであるか否かを判
定する。即ち、そのオブジェクトホルダが作成されたと
きにオブジェクトホルダエントリの対応するノードとの
間に相互に設定されたポインタに該当するか否かを判定
する。
【0045】ステップ(3−3)の判定の結果がyes
であれば、変数hはオブジェクトホルダのアドレスであ
り、変数nはそれに対応するオブジェクトホルダエント
リのノードである。また、pはhの指すオブジェクトホ
ルダ内の領域を指すアドレスとなる。よって、ステップ
(3−4)からステップ(3−11)で、pの指す領域
にマークを付ける。即ち、ステップ(3−4)で、オブ
ジェクトホルダ内の何番目の領域であるかを、(P−
(h+オフセット))/h→header→unitS
izeを計算することによって求め、結果を変数iに設
定する。そして、ステップ(3−5)で、マークビット
列のi番目のビットmarkBits[i]を1に設定
する。そして、ステップ(3−6)で、変数oにi番目
の領域を代入する。ステップ(3−7)で、変数jを0
にし、ステップ(3−8)〜(3−11)のループにお
いて、pの指すi番目の領域内の変数データを順次調べ
て行く。ステップ(3−9)で、i番目の領域内のj番
目の変数はポインタか否かを判定する。その際、対応す
る図2のオブジェクトホルダヘッダ22のpointe
rs 222を参照する。pointers 222で
ポインタであると指定されている変数の場合には、ステ
ップ(3−10)で、その内容を引数に、そのポインタ
の指す他の領域についてのマークを付ける処理を呼び出
す。その実行により、j番目の変数の指す領域にマーク
を付ける処理を施した後、ステップ(3−11)へ移
る。一方、そのpointers222で、ポインタで
ない(整数である)と指定されているものは、ステップ
(3−10)でのマーク付けの処理を行わずに、ステッ
プ(3−11)へ移る。
【0046】従来のガーベージコレクション技術では、
i番目の領域に応用プログラムの変数領域からの参照が
あると判定され、マークが付けられると、i番目の領域
内の全ての変数についてさらに参照があるか否かを調
べ、参照があればマークが付けられて、マークがつけら
れたものは回収することができなかった。しかし、ポイ
ンタの指すデータであっても回収を行った方がよい場合
がある。例えば、ディスクキャッシュされたオブジェク
トを管理するテーブルは、それに含まれる各エントリが
オブジェクトへのポインタを含んでいるが、ディスクの
キャッシュはそのデータが必要になったときには、簡単
に読み込むことができるので、参照される可能性が残っ
ていても、それを一旦回収して必要なときに再度読み込
めば格別の不都合は生じない。そこで、本実施例では、
上述のように、オブジェクトホルダHeadder22
に設定された管理情報であるpointers 222
を利用することにより、ポインタではないことが指定さ
れている変数についての参照先にはマークを付ける処理
を行わないので、その回収が可能となる。変数jがi番
目の領域内の変数の数を超えた値となったときには、i
番目の領域に関するマーク付けの処理を終了する。
【0047】次に、本実施例の具体的なデータの一例に
ついて説明する。図12は、応用プログラムがオブジェ
クトを生成し、オブジェクト管理テーブルを用いてメモ
リ管理モジュールを介して管理する場合の一例である。
即ち、オブジェクト管理テーブルとそれにより管理され
るオブジェクトをそれぞれのオブジェクトホルダに保持
し、そのオブジェクト管理テーブルにより管理されるデ
ータを回収可能にするようにメモリ管理モジュール13
により管理するものである。この例でのデータの構造
や、処理の内容は図3に表わされている。図3に定義す
るようなオブジェクトpartを管理するオブジェクト
管理テーブルPartsを保持するオブジェクトホルダ
オブジェクトホルダ 21とそのヘッダオブジェクトホ
ルダヘッダ22、およびオブジェクトpartを保持す
るオブジェクトホルダ21とそのヘッダオブジェクトホ
ルダヘッダ22、およびオブジェクトホルダエントリ2
3がメモリ管理空間112に割り当てられた状態を示し
ている。オブジェクト管理テーブルのオブジェクトホル
ダヘッダオブジェクトホルダヘッダ22には、ユニット
の大きさunitSize221が4000バイト、ポ
インタ指定情報pointers222が0、回収時に
呼び出し実行する手続deallocFunc223が
NULL、オブジェクトホルダを指定するholder
s224等が設定されている。また、オブジェクトホル
ダヘッダ22’には、ユニットの大きさunitSiz
eが20(4バイトの変数が5個)、ポインタ指定情報
pointersが01110、回収時に呼び出し実行
する処理deallocFuncが図3に定義されてい
る関数deallocPart、オブジェクトホルダを
指定するholders等が設定されている。
【0048】オブジェクトホルダ121のオブジェクト
管理テーブルは、オブジェクト識別子によりアクセスさ
れるポインタの格納欄を有し、あるオブジェクトがメモ
リ管理空間112に読み込まれたときに、そのオブジェ
クトの格納された場所へのポインタが上記格納欄に登録
される。オブジェクトがメモリ管理空間112内に存在
しないものについては、ポインタの代わりにヌルNUL
Lが設定される。このオブジェクト管理テーブルの管理
情報であるオブジェクトホルダヘッダ122のポインタ
指定情報pointersの欄1222には0が指定さ
れているので、データの回収時のマーク付けにおいて
は、オブジェクト管理テーブルのオブジェクトへのポイ
ンタはべて参照元として無効なものとみなされる。即
ち、オブジェクト管理テーブルから参照されるオブジェ
クトについては、図11のステップ(3−9)のポイン
タか否かの判定では、強制的にポインタではないと判定
され、マークは付けられない。この点、従来のガーベー
ジコレクションならば、オブジェクト管理テーブルに一
旦登録されたオブジェクトはオブジェクト管理テーブル
のポインタにより必ず参照されることになるので、デー
タの回収をすることができなかったが、本実施例ではポ
インタ指定情報により、オブジェクト管理テーブルのポ
インタは非ポインタであると強制的に指定されることに
より、そのオブジェクト管理テーブルから指されるオブ
ジェクトは、ほかの参照がない場合には、回収可能とな
る。また、オブジェクト管理テーブルに対応するオブジ
ェクトホルダヘッダ122の回収時に行う処理の指定情
報deallocFuncの欄1223にはヌルNUL
Lが指定されているので、この管理情報によっては、特
に何も処理は行わない。
【0049】オブジェクトホルダヘッダ122’のポイ
ンタ指定情報pointersの欄1222’には01
110が指定されているので、データの回収時のマーク
付けにおいては、各オブジェクトの変数の内2、3、4
番目の変数はべて参照元として無効なものとみなされ
る。即ち、各オブジェクトの変数の内2、3、4番目の
変数から参照される参照される他のオブジェクトについ
ては、図11のステップ3−9のポインタか否かの判定
では、強制的にポインタではないと判定され、マークは
付けられない。また、オブジェクトホルダ212’の管
理情報であるオブジェクトホルダヘッダ122’の回収
時に行う手続きの指定情報deallocFuncの欄
1223’には図3に定義されている手続きdeall
ocPartが指定されているので、領域を回収する際
に図9のステップ(2−12)でその手続が呼び出され
る。その手続の実行において、図3のvoid dea
llocPart{}の部分に示されているように、回
収するオブジェクトのオブジェクト識別子oidに対応
するオブジェクト管理テーブルのエントリに登録されて
いるオブジェクトへのポインタ(メモリアドレス)をヌ
ルNULLにすることにより、オブジェクト管理テーブ
ルから削除する処理を行う。また、どこからも参照され
ていない即ちマークの付いていないオブジェクトが、メ
モリ管理空間112とは別に管理されている領域にある
オブジェクトlarge_textへのポインタを持つ
場合には、そのポインタの指すlarge_textの
領域をコマンドfreeにより解放する。また、同様
に、オブジェクト識別子OID持たないオブジェクトが
メモリ管理空間112とは別に管理されている領域にあ
って、そのOID持たないオブジェクトを前記マークの
付いていないオブジェクトが参照している場合には、そ
の参照されているOID持たないオブジェクトをコマン
ドfreeにより解放する。
【0050】本実施例で対象とする他のデータの例とし
てファイルを取り扱う場合がある。その場合には、オブ
ジェクトを読み込むときに、ファイルをオープンしなけ
ればならない。そのために、領域確保する処理load
_partに、ファイルのオープンの手続が含められ
る。ファイルに関するオブジェクトはファイルの情報を
ファイルディスクリプタという一意に割り当てられたフ
ァイル識別番号の形で持つことになる。ファイルはオー
プンするとOSの中に管理用の領域が確保される。それ
をオープンしたままにすると、OSの中に残ったままと
なる。あるオブジェクトがファイルの情報をそのファイ
ルディスクリプタとして持っている場合に、そのままオ
ブジェクトが回収されてなくなるとそのファイルディス
クリプタが分からなくって、そのファイルはオーブンさ
れたままとなる。そうするとOSの資源を無駄に使うこ
とになるので、それをクローズする必要がある。そこ
で、このようにファイルのデータを取り扱う場合の回収
時に呼び出される手続dealloc_partには、
ファイルをクローズするコマンドが含められる。
【0051】以上に説明した第1の実施例によれば、領
域を確保する時にオブジェクトホルダヘッダにおいて指
定した手続きdeallocFuncが、領域を回収す
る際にステップ(2−12)で呼び出されるため、その
領域が参照している他の領域や、資源を解放することが
できる。また、領域を確保する時に、その領域内にポイ
ンタが存在しないことを指定できるため、実際にはポイ
ンタによる参照を含んでいても、その参照先を自動的に
回収することができ、かつ、回収時に呼び出す関数によ
って参照を外すことができる。これにより、メモリの利
用効率の良いプログラムを容易に作成することができる
ようになる。
【0052】(第2の実施例)図13から図18に、本
発明の第2の実施例を示す。図13は本発明のオブジェ
クト管理方法を適用したオブジェクト指向データベース
管理システムの機能ブロックである。同図において、二
次記憶装置134は永続オブジェクト1342とオブジ
ェクトテーブル1341を記憶するために用いられる。
各永続オブジェクト1342には論理的な識別子OID
が付与され、永続オブジェク卜間の参照は識別子OID
により表現される。オブジェクトテーブル1341には
識別子OIDとその識別子OIDが付与されている永続
オブジェクトの格納場所(DiskAddress)の
組が記憶される。主記憶装置131は、二次記憶装置1
34によって記憶されている永続オブジェクト1342
を読み出し、一時的に記憶するために用いられる。さら
に主記憶装置131には応用プログラム332の実行環
境として、その大域変数3121や局所変数313など
も記憶される。
【0053】永続オブジェクト管理モジュール132
は、オブジェクトテーブル1341とオブジェクトテー
ブルキャッシュ13111の管理と、オブジェクトテー
ブルキャッシユ13111を用いた永続オブジェクトハ
ンドラ13112の生成、参照、永続オブジェクトの変
更などの処理を行う。これらの処理は、たとえば前記特
開平5−225034号公報に説明されているような従
来公知の方法で行うことができる。これらに加え、永続
オブジェクト管理モジュール132は、応用プログラム
から参照されていない永続オブジェクトハンドラの領域
の回収、再利用の処理を行う。
【0054】図14は図13のキャッシユ1311の詳
細な構成を示す図である。同図においてオブジェクトテ
ーブルキャッシユ13111は二次記憶装置134に記
憶されているオブジェクトテープル1341の内容とし
て、OID欄13111a,Disk Adddres
s欄13111bに加えて、永続オブジェクトハンドラ
13112へのボインタMemory Address
の欄13111cと、その永続オブジェクトハンドラ1
3112が応用プログラムから参照されているか否かを
検査するためのマークを記憶するmark欄13111
dがある。
【0055】永続オブジェクトハンドラ13112は、
永続オブジェクトの内容の参照、変更を高速に行うため
にその内容を一時的にキャッシュ内に保持するために用
いられる。また、永続オブジェクトハンドラ13112
はその永続オブジェクトの識別子OIDなどの情報を保
持しているオブジェクトテーブルキャッシュ13111
のエントリを指し示すポインタを保持する。
【0056】空き領域リスト3113は永続オブジェク
トハンドラのための領域として利用可能な領域を保持す
るために用いられる。空き領域リスト13113は、キ
ャッシユ中で未使用となっている領域をリスト上に結合
して保持する。
【0057】図15に永続オブジェクト管理モジュール
132における永続オブジェクトハンドラの生成の処理
の流れを示す。ステップ(4−1)で、オブジェクトテ
ーブルキャッシユ13111の中から、与えられた識別
子OIDと同じ識別子OIDを保持するエントリを探
す。
【0058】ステップ(4−2)でエントリがあるか否
かを確認し、エントリがなければステップ(4−9)で
NULLを返す。エントリがあればステップ(4−3)
でそのエントリのMemory Addressの欄1
3111がNULLか否かを確認し、NULLでなけれ
ばステップ(4−8)で、そのMemory Addr
essの欄13111の値を応用プログラムに返す。
【0059】オブジェクトテーブルキャッシュ1311
1のMemory Addressの欄13111cが
NULLであればステップ(4−4)で新しい永続オブ
ジェクトハンドラのための領域を確保する。ステップ
(4−5)でエントリと永続オブジェクトハンドラの双
方向のポインタを設定する。即ち、エントリのMemo
ry Address欄13111cに、新たに確保さ
れた永続オブジェクトハンドラのアドレスを設定し、永
続オブジェクトハンドラの先頭の領域13112にエン
トリへのアドレスを設定する。
【0060】ステップ(4−6)で永続オブジェクトの
内容を永続オブジェクトハンドラ13112に読み込
み、ステップ(4−7)で永続オブジェクトハンドラの
アドレスを返す。
【0061】図16に永続オブジェクト管理モジュール
331における永続オブジェクトハンドラの領域を確保
する処理(図15のステップ4−4)の流れを示す。ス
テップ(5−1)で、変数nに空き領域リストの先頭ア
ドレス、変数sに確保する領域の大きさを代入する。
【0062】ステップ(5−2)で変数nがNULLか
否かを確認する。変数nがNULLであるときは、すべ
ての領域が使用中となっているか、未使用の領域に十分
な大きさがない場合である。この時には、ステップ(5
−10)で領域の回収の処理を行い、処理を最初からや
り直す。
【0063】ステップ(5−2)で変数nがNULLで
ない場合にはステップ(5−3)でnの指す先の領域の
大きさsizeがs以上か否かを確認する。nのサイズ
(size)がsよりも小さい時には、ステップ(5−
9)でnの次のノードのアドレスをnに代入し、ステッ
プ(5−2)に戻る。
【0064】ステップ(5−3)でnのsizeがs以
上である場合には、さらに、nのsizeからsと空き
領域リストのノードのヘッダの大きさの和を減じた値が
0よりも大きいか否かを確認する。ステップ(5−4)
の確認の結果がyesである場合には、ステップ(5−
5)でnの指すノードをsの大きさの領域と残りの領域
に分割し、ステップ(5−6)で、残りの領域を空き領
域リストに追加する。ステップ(5−7)でnを空き領
域リストから削除し、ステップ(5−8)でnを、確保
した領域として返す。
【0065】永続オブジェクト管理モジュール132が
領域を回収する手順(図16のステップ2−10の詳細
処理)を図17に示す。ステップ(6−1)で、オブジ
ェクトテーブルキャッシュ13111のすべてのエント
リのマークmarkをクリアする。
【0066】続いて、ステップ(6−2)からステップ
(6−4)で、応用プログラム中の大域変数、局所変数
に格納されているすべてのデータを取り出し、そのデー
タに対してマークを付ける処理を呼び出す。応用プログ
ラムの大域変数、局所変数の内容は、そのプログラムが
UNIXなど一般的なOSで動作している場合には、デ
ータ領域とスタック、レジスタから取り出すことができ
る。ステップ(6−2)ですべてのデータについてマー
クを付ける処理が終了したと判定されると、ステップ
(6−5)に進む。
【0067】ステップ(6−5)からステップ(6−l
0)まででで、オブジェクトテーブルキヤツシユのすべ
てのエントリについて、領域の回収の処理を行う。ステ
ップ(6−7)はi番目のエントリにマークが付いてい
るか否かを判定する。マークが付いていれば、その領域
の回収はしないので、ステップ(6−10)でiを1だ
け増加させ、ステップ(6−6)に戻り、次の領域の回
収の処理を行う。マークが付いていなければ、ステップ
(6−8)でそのエントリのMemory Addre
ssの指す領域を空き領域リストB1に迫加する。これ
により、この領域は次回以降の領域の確保の際に使用可
能となる。
【0068】続いてステップ(6−9)でi番目のエン
トリのMemory AddressにNULLを設定
する。これにより、このエントリに対応する永続オブジ
ェクトへの参照が必要となれば、図15のステップ(4
−4)により再びその領域が確保される。ステップ(6
−6)でオブジェクトテープルキヤツシユのすべてのエ
ントリについての回収の処理が終了したと判断されれ
ば、処理全体を終了する。
【0069】図18は、図17のステップ(6−4)で
呼び出される、永続オブジェクトハンドラにマークを付
ける手順を示している。ステップ(7−1)でまず与え
られたデータpがキャッシュ内のアドレスであるか否か
を確認する。pがキャッシュ内のアドレスでなければこ
の処理はここで終了する。
【0070】pがキャッシュ内のアドレスであれば、ス
テップ(7−2)でpの指す先の内容を変数eに代入す
る。ステップ(7−3)で変数eがオブジェクトテーブ
ルキャッシユ内のアドレスでかつ変数eの指す先のエン
トリのMemory Addressの値がpであるか
確認する。ステップ(7−3)の結果がyesであれば
pは使用中の永続オブジェクトハンドラを指しており、
応用プログラムから直接または間接的に参照されている
とみなされる。よって、ステップ(7−3)の結果がy
esであれば、ステップ(7−4)でこのエントリのm
arkに1が設定される。続いてステップ(7−5)か
らステップ(7−8)で、pの指す領域内のデータの指
す先の領域にマークを付ける。
【0071】永続オブジェクトハンドラの領域を確保す
る処理において、十分な空き領域がない場合に、応用プ
ログラムからの参照のない永続オブジェクトハンドラの
領域を回収し、再利用できるため、キャッシュの大きさ
を限定でき、限られたメモリ資源でも応用プログラムが
動作可能となる。
【0072】(第3の実施例)図18に示した、永続オ
ブジェクトハンドラにマークを付ける手順では、マーク
された永続オブジェクトハンドラから参照している永続
オブジェクトハンドラにもマークを付けていた。しかし
ながら、永続オブジェクトハンドラが保持するデータの
内容は二次記憶装置に記憶されたものを読み込んだもの
であるので、内容を消去しても必要に応じて再読み込み
することで復元できる。図19では、永続オブジェクト
ハンドラにマークを付ける処理で、永続オブジェクトハ
ンドラの内容を消去した実施例を示している。ステップ
(8−1)からステップ(8−5)までは図18のステ
ップ(7−1)からステップ(7−5)と同じである。
図18との大きな違いはステップ(8−7)で変数の内
容を消去していることと、ステップ(8−9)で永続オ
ブジェクトハンドラの状態を「無効」にしていることで
ある。状態が「無効」になっている永続オブジェクトハ
ンドラの内容を復元する処理は、前記特開平5−225
034号公報の図12に記載されている方法で行うこと
ができる。即ち、永続オブジェクトハンドラにある状態
情報を表すフラグを調べ、状態が無効であったときに
は、二次記憶装置から永続オブジェクトを読み込むと共
に、フラグを有効を表す状態情報に変更する。
【0073】この実施例によれば、永続オブジェクトハ
ンドラのみから参照されている永続オブジェクトハンド
ラにはマークが付けられないため、図17の処理により
その領域が回収される。よって、領域の回収率が高まる
ため、メモリの使用効率が高くなる。
【0074】(第4の実施例)本実施例は、文献3に記
載のような二次記憶装置内の永続オブジェクトおよび管
理テーブルをメモリ管理空間に読み込んで利用するオブ
ジェクト指向データベース管理システムのキャッシュ領
域の回収を可能にする実施例であり、図20に示すとお
り、基本的な構成は第1の実施例と同じであり、永続オ
ブジェクト管理モジュール203、およびその永続オブ
ジェクトを記憶する二次記憶装置205が付加された点
が異なる。キャッシュ領域の回収は第1の実施例のメモ
リ管理モジュール12によるガーベージコレクションと
同様の手順を用い、応用プログラム204からの永続オ
ブジェクト20122へのキャッシュを利用するアクセ
スの方法は、第2の実施例の永続オブジェクト管理モジ
ュールと同様である。第2の実施例は永続オブジェクト
管理モジュールがキャッシュ領域の回収の機能を有して
いたが、本実施例の永続オブジェクト管理モジュール2
03ではその機能は削除され、第1の実施例のメモリ管
理モジュールによる回収方法が用いられている。
【0075】図21は、本実施例のメモリ空間のデータ
構造を示すもので、二次記憶装置205から読み込まれ
た永続オブジェクトの登録や削除を管理するオブジェク
トテーブルキャッシュ20121と、永続オブジェクト
20122とが、オブジェクトとして存在する。第1の
実施例と同様に、これらのオブジェクトはオブジェクト
ホルダ211、211’の領域に保持される構造となっ
ており、それらのオブジェクトホルダに対応する管理情
報としてオブジェクトホルダヘッダ212、212’が
ある。オブジェクトホルダヘッダ212、212’の情
報の設定は、図12に示したものと同じ例としている。
オブジェクトテーブルキャッシュ20121は、文献3
に記載されたオブジェクトテーブルと同じ構造を有し、
各オブジェクトの3つの属性、即ち、オブジェクト識別
子(OID)、永続オブジェクトの二次記憶装置での位
置(DiskAddress)、および永続オブジェク
トの主記憶装置上での位置(Memory Addre
ss)の情報を対応させて保持するエントリを有する。
これは第2の実施例のオブジェクト管理テーブルからm
arkの項を省いたものと同じとなる。
【0076】応用プログラム204からの要求によるオ
ブジェクトテーブルキャッシュ20121、および永続
オブジェク20122のための各オブジェクトホルダの
主記憶装置のメモリ管理空間2012の領域内への生成
は、メモリ管理モジュール202により第1の実施例の
図5および図6のフローチャートに示す手順alloc
ate_objectにより行う。なお、応用プログラ
ムがオブジェクト識別子OIDを持たないデータを必要
とするときには、メモリ管理空間2012とは別の領域
2013にコマンドmallocにより割り当てられ
る。図22はその関係を示すものである。
【0077】第2の実施例における、図15の永続オブ
ジェクトハンドラの生成の処理および図16の永続オブ
ジェクトハンドラの領域を確保する処理は、本第4の実
施例の永続オブジェクト管理モジュール203にも共通
する処理である。応用プログラム204が永続オブジェ
クトにアクセスするときには、永続オブジェクトのオブ
ジェクト識別子OIDを永続オブジェクト管理モジュー
ル203に渡し、それに応じて永続オブジェクト管理モ
ジュール203は、その渡されたオブジェクト識別子O
IDによりオブジェクトテーブルキャッシュを探索し
て、同じOIDを有するエントリを特定し、対応する永
続オブジェクトハンドラの主記憶装置上での位置Mem
ory addressが登録されているか否かを調べ
る。登録されていれば、その位置情報Memory a
ddressを応用プログラムに返す。この処理は第2
の実施例の図15のフローチャートにおけるステップ
(4−1)(4−2)(4−3)(4−8)により行わ
れる処理と同じである。応用プログラムはこのようにし
て得た位置情報Memory addressにより、
主記憶装置上のキャッシュ領域の永続オブジェクトホル
ダに保持された永続オブジェクトを得ることができる。
【0078】応用プログラムの要求する永続オブジェク
トがキャッシュ領域になかったとき即ちステップ(4−
3)でオブジェクトテーブルキャッシュ20121のエ
ントリのMemory Address=NULLであ
ったときには、第1の実施例において説明した図5〜図
7のフローチャートに示す処理と同様の処理により、永
続オブジェクトの領域を確保する。また、ステップ(1
−11)の領域の回収は、メモリ管理モジュール202
により、第1の実施例の図8〜図11のフローチャート
によって示される処理により行う。領域が回収されると
きに呼び出す処理として、オブジェクトテーブルキャッ
シュ20121の対応するMemoryaddress
をリセットする即ちNULLにする手続を指定する。
【0079】なお、第1の実施例と同様に、どこからも
参照されていない即ちマークの付いていないオブジェク
トが、メモリ管理空間のキャッシュ領域2012とは別
に管理されている領域2013や2014にあるオブジ
ェクトlarge_textへのポインタを持つ場合に
は、そのポインタの指すlarge_textの領域を
コマンドfreeにより解放する。また、同様に、オブ
ジェクト識別子OID持たないオブジェクトがメモリ管
理空間112とは別に管理されている領域2013や2
014にあって、そのOID持たないオブジェクトを前
記マークの付いていないオブジェクトが参照している場
合には、その参照されているOID持たないオブジェク
トをコマンドfreeにより解放する。そのためのステ
ップを回収時に呼び出す手続deallocFuncに
いれておく。このように、領域を確保する時にオブジェ
クトホルダヘッダにおいて指定した手続きdeallo
cFuncが、領域を回収する際に図9のステップ(2
−12)で呼び出されるため、その領域が参照している
他の領域や、資源を解放することができ、また、オブジ
ェクトテーブルキャッシュの更新をすることでがきる。
【0080】
【発明の効果】本発明のメモリ管理方法は、管理の対象
となる各データ領域に対応してデータ領域内のポインタ
の含まれている場所を記憶しておき、あるデータ領域へ
の参照が存在するか否かの判定において管理の対象とな
る各データ領域についてはポインタが含まれていると指
定された場所のみを参照元として検査するようにしたの
で、他のデータ領域から参照されているデータ領域につ
いても自動的に回収することがでるようになる。
【0081】また、本発明のメモリ管理方法では、管理
の対象となる各データ領域に対応して手続きのアドレス
を付与しておき、あるデータ領域への参照が存在しない
と判断されると、そのデータ領域を回収の際に、そのデ
ータ領域に対応する前記手続きを呼び出し実行すること
ができるので、回収されるデータ領域ごとに異なる処理
を設定でき、そのデータ領域に関連する資源の解放、管
理情報の更新など、回収に関連して有用な処理を適切に
行うことができる。
【0082】また、本発明のオブジェクト管理方法は、
二次記憶装置に記憶されている永続オブジェクトを主記
憶装置に取り込むオブジェクト指向データベース管理シ
ステムにおいて、主記憶装置内の永続オブジェクトで応
用プログラムの大域変数、局所変数から直接または間接
的に参照されているか否かを調べることによりによりキ
ャッシュ領域における回収可能な領域を判定する仕組み
を導入したので、従来技術ではできなかった領域の回収
と再利用が可能となった。
【0083】また、本発明のオブジェクト管理方法は、
二次記憶装置に記憶されている永続オブジェクトを主記
憶装置にキャッシュして利用するオブジェクト指向デー
タベース管理システムにおいて、管理テーブル中の永続
オブジェクトへのポインタに対しては、すべて非ポイン
タ情報を指定するようにしたので、管理テーブル中のポ
インタはすべて回収のための参照の有無の検査において
は参照元として無効であるとみなされる。従って、従来
のメモリ領域の回収方法ではできなかったキャッシュ領
域の回収が可能となった。また、回収の際に呼び出す手
続が、回収される永続オブジェクトに対応する前記管理
テーブルのポインタ(メモリアドレス)をヌルにする処
理を含むので、回収に伴う管理テーブルの更新も行うこ
とができる。
【図面の簡単な説明】
【図1】 本発明の第1の実施例のメモリ管理方法を実
施するためのシステムの機能ブロック図、
【図2】 第1の実施例におけるメモリ管理空間の構造
を示す図、
【図3】 第1の実施例の応用プログラムの記述例を示
す図、
【図4】 永続オブジェクトの領域の確保の処理の流れ
を示す図、
【図5】 第1の実施例における領域を確保する処理の
動作を示すフローチャート(その1)、
【図6】 第1の実施例における領域を確保する処理の
動作を示すフローチャート(その2)、
【図7】 第1の実施例における領域を確保する処理の
動作を示すフローチャート(その3)、
【図8】 実施例における領域を回収する処理の動作を
示すフローチャート(その1)、
【図9】 実施例における領域を回収する処理の動作を
示すフローチャート(その2)、
【図10】 第1の実施例における領域にマークを付け
る処理の動作を示すフローチャート(その1)、
【図11】 第1の実施例における領域にマークを付け
る処理の動作を示すフローチャート(その2)、
【図12】 メモリ管理空間のデータの例、
【図13】 本発明の第2の実施例によるオブジェクト
管理方法を実施するためのオブジェクト指向データベー
スとその応用プログラムの機能を含むシステムの機能ブ
ロック図、
【図14】 第2の実施例におけるキャッシュの構造を
示す図、
【図15】 第2の実施例における永続オブジェクトハ
ンドラを生成する処理の動作を示すフローチャート、
【図16】 第2の実施例における永続オブジェクトハ
ンドラの領域を確保する処理の動作を示すフローチャー
ト、
【図17】 第2の実施例における永続オブジェクトハ
ンドラの領域を回収する処理の動作を示すフローチャー
ト、
【図18】 第2の実施例における永続オブジェクトハ
ンドラの領域にマークを付ける処理の動作を示すフロー
チャート、
【図19】 第3の実施例における永続オブジェクトハ
ンドラの領域にマークを付ける処理の動作を示すフロー
チャート。
【図20】 本発明の第4の実施例のメモリ管理方法を
実施するためのシステムの機能ブロック図、
【図21】 第4の実施例におけるメモリ管理空間の構
造を示す図、
【図22】 メモリ領域の確保の際の、オブジェクトの
違いによる確保方法の違いを説明する図、
【図23】 オブジェクト指向データベース管理システ
ムにおける応用プログラムからのデータの利用の仕方を
示す図。
【符号の説明】
11、131、201…主記憶装置、 111、201
1…管理情報、 112、2012…メモリ管理空間、
113、1312、2013…大域変数、114、1
313、2014…局所変数、 12、202…メモリ
管理モジュール、 13、2031…応用プログラム、
132、2032…永続オブジェクト管理モジュー
ル、 134、209…二次記憶装置。

Claims (11)

    (57)【特許請求の範囲】
  1. 【請求項1】 データを記憶する所定単位のデータ領域
    を管理情報を用いて管理する電子計算機のメモリ管理方
    法において、 ・前記管理情報に、データ領域内のデータのうち、ポィ
    ンタを示すデータの場所を示す情報を付与しておき、 ・ガーベージコレクションを行う際に、前記データ領域
    からの参照のうち、ポインタを示すデータの場所からの
    参照のみを参照元として有効なものとして扱うことを特
    徴とするメモリ管理方法。
  2. 【請求項2】 前記管理情報に、データ領域を回収する
    際に呼び出す手続きのアドレス情報を付与しておき、 ・当該データ領域の回収の際に、前記アドレス情報によ
    り手続を呼び出して実行することを特徴とする請求項l
    記載のメモリ管理方法。
  3. 【請求項3】 前記回収するデータ領域のデータがファ
    イルの管理情報を示すファイルディスクリプタであり、
    前記手続きが当該ファイルを閉じる処理を示すものであ
    り、当該ファイルディスクリプタのデータ領域の回収の
    際に、前記アドレス情報により、ファイルを閉じる処理
    を示す手続きを読み出して実行することを特徴とする請
    求項2記載のメモリ管理方法。
  4. 【請求項4】 前記データ領域を回収する際に呼び出す
    手続きが、前記回収されるデータ領域が、別に管理され
    るデータ領域への参照がある時には、明示的にそのデー
    タ領域を解放する処理を行うものであることを特徴とす
    る請求項2記載のメモリ管理方法。
  5. 【請求項5】 前記所定単位のデータ領域に記憶される
    データとして、応用プログラムからの参照の対象となる
    オブジェクトと、そのオブジェクトを管理する管理テー
    ブルとを有し、 ・前記管理テーブルは、少なくとも、オブジェクトへの
    ポインタを含み、 ・前記管理テーブルに対応する前記管理情報における前
    記ポインタを示すデータの場所を示す情報として、前記
    オブジェクトへのポインタのすべてが、ガーベージコレ
    クションのための参照の有無の検査においては参照元と
    して無効であるとみなす非ポインタ情報を設定したこと
    を特徴とする請求項1記載のメモリ管理方法。
  6. 【請求項6】 二次記憶装置から永続オブジェクトを読
    み出して主記憶装置のキャッシュ領域に保持して管理す
    るオブジェクト指向データベース管理システムにおい
    て、 ・前記主記憶装置上に、応用プログラムが前記キャッシ
    ュ領域の永続オブジェクトの領域の参照アドレスを含む
    値を保持する変数領域を設けておき、 ・前記キャッシュ領域の各永続オブジェクトの領域につ
    いて、少なくとも前記変数領域から参照されていない場
    合には、当該永続オブジェクトの領域を回収して新たな
    永続オブジェクトの領域として再利用することを特徴と
    するオブジェクト管理方法。
  7. 【請求項7】 前記キャッシュ領域の永続オブジェクト
    の領域を生成する際に、永続オブジェクトの領域の管理
    情報として、永続オブジェクトの識別子、二次記憶装置
    の格納アドレス、およびキャッシュ領域上の記憶アドレ
    スの対応関係を示す情報を記憶し、かつ記憶アドレスが
    示す永続オブジェクトの領域には、対応する永続オブジ
    ェクトの識別子または、対応する各記憶アドレスの記憶
    場所を示す情報を記憶することを特徴とする請求項6記
    載のオブジェクト管理方法。
  8. 【請求項8】 二次記憶装置から永続オブジェクトを読
    み出して主記憶装置のキャッシュ領域に保持して管理す
    るオブジェクト指向データベース管理システムにおい
    て、 ・前記キャッシュ領域に、 永続オブジェクトの識別子、二次記憶装置の格納アドレ
    ス、キャッシュ領域上の永続オブジェクトハンドラへの
    ポインタ、およびその記憶アドレスの永続オブジェクト
    についての応用プログラムからの参照の有無を表すマー
    クを対応させたエントリを持つ永続オブジェクト管理テ
    ーブルと、永続オブジェクト管理テーブル上の対応する
    エントリへのポインタを有し二次記憶装置から読み込ま
    れた永続オブジェクトを保持する永続オブジェクトハン
    ドラとを設け、 ・永続オブジェクトの回収処理において、応用プログラ
    ムの保持するデータをすべてポインタとみなして、それ
    により指される永続オブジェクトハンドラを探し、それ
    により見つかった永続オブジェクトハンドラが永続オブ
    ジェクト管理テーブルのいずれかのエントリと相互に参
    照されているとき、その永続オブジェクトハンドラの永
    続オブジェクトは応用プログラムからの参照があると判
    定し、その判定結果を対応するエントリの前記マークに
    設定し、その設定されたマークに基づき応用プログラム
    からの参照があると判定されなかった永続オブジェクト
    を回収することを特徴とするオブジェクト管理方法。
  9. 【請求項9】 二次記憶装置から永続オブジェクトを読
    み出して主記憶装置のキャッシュ領域に保持して管理す
    るオブジェクト指向データベース管理システムにおい
    て、 ・前主記憶装置上に応用プログラムが前記キャッシュ領
    域の永続オブジェクトの領域の参照アドレスを含む値を
    保持する変数領域を設けておき、 ・前記キャッシュ領域の回収処理を行う際に、当該キャ
    ッシュ領域の各永続オブジェクトの領域について、前記
    変数領域から参照されている永続オブジェクトの領域に
    ついては、内容を削除し、かつ状態情報として無効を付
    与し、少なくとも前記変数領域から参照されている永続
    オブジェクトの領域を除く永続オブジェクトの領域につ
    いては、その領域を回収して新たな永続オブジェクトの
    領域として再利用することを特徴とするオブジェクト管
    理方法。
  10. 【請求項10】 二次記憶装置から読み出した永続オブ
    ジェクトとその永続オブジェクトに対するアクセスの管
    理をする管理テーブルとをそれぞれオブジェクトとして
    主記憶装置のキャッシュ領域に記憶し、かつ、前記永続
    オブジェクトおよび前記管理テーブルのためのキャッシ
    ュ領域の確保および回収を行うための管理情報を主記憶
    装置の前記キャッシュ領域外に記憶して、永続オブジェ
    クトの管理をするオブジェクト指向データベース管理シ
    ステムのメモリ管理方法であって、 ・前記管理テーブルは、永続オブジェクトの識別子、永
    続オブジェクトの二次記憶装置の格納アドレス、および
    キャッシュ領域上の永続オブジェクトへのポインタを対
    応させた情報を保持し、 ・前記管理情報は、回収のための参照の有無の検査にお
    いて参照元として無効であるとみなす非ポインタ情報
    と、回収の際に呼び出す手続のアドレス情報とを有し、
    かつ、前記管理テーブルの前記ポインタに対しては、す
    べて非ポインタ情報を指定し、また、回収の際に呼び出
    す手続は回収される永続オブジェクトに対応する前記管
    理テーブルの前記ポインタをヌルにする処理を含み、 ・キャッシュ領域の永続オブジェクトの回収処理におい
    ては、応用プログラムの変数を保持する主記憶装置上の
    データ領域である変数領域からの参照の有無および前記
    管理情報の非ポインタ情報に基づき、回収する永続オブ
    ジェクトを決定するとともに、前記ポインタをヌルにす
    る手続を呼び出して実行することを特徴とするメモリ管
    理方法。
  11. 【請求項11】 前記管理情報により指定される前記永
    続オブジェクトの領域を回収する際に呼び出す手続き
    が、前記回収される永続オブジェクトが別に管理される
    キャッシュ領域外のデータ領域への参照がある時には、
    明示的にそのデータ領域を解放する処理を含むことを特
    徴とする請求項10記載のメモリ管理方法。
JP7107780A 1995-04-10 1995-04-10 メモリ管理方法およびオブジェクト管理方法 Expired - Fee Related JP2924705B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP7107780A JP2924705B2 (ja) 1995-04-10 1995-04-10 メモリ管理方法およびオブジェクト管理方法
US08/623,991 US5799185A (en) 1995-04-10 1996-03-29 Method and system for managing system memory reclamation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7107780A JP2924705B2 (ja) 1995-04-10 1995-04-10 メモリ管理方法およびオブジェクト管理方法

Publications (2)

Publication Number Publication Date
JPH08286969A JPH08286969A (ja) 1996-11-01
JP2924705B2 true JP2924705B2 (ja) 1999-07-26

Family

ID=14467838

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7107780A Expired - Fee Related JP2924705B2 (ja) 1995-04-10 1995-04-10 メモリ管理方法およびオブジェクト管理方法

Country Status (2)

Country Link
US (1) US5799185A (ja)
JP (1) JP2924705B2 (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6070168A (en) * 1997-12-31 2000-05-30 Nortel Networks Corporation Platform-independent object memory manager
US6272504B1 (en) * 1998-05-07 2001-08-07 International Business Machines Corporation Flexibly deleting objects in a resource constrained environment
US6178423B1 (en) * 1998-06-23 2001-01-23 Microsoft Corporation System and method for recycling numerical values in a computer system
US6327701B2 (en) 1998-09-15 2001-12-04 Sun Microsystems, Inc. Method and apparatus for finding bugs related to garbage collection in a virtual machine
US6324631B1 (en) * 1999-06-17 2001-11-27 International Business Machines Corporation Method and system for detecting and coalescing free areas during garbage collection
US6349314B1 (en) 1999-09-29 2002-02-19 Motorola, Inc. Adaptive scheduler for mark and sweep garbage collection in interactive systems
US6986052B1 (en) 2000-06-30 2006-01-10 Intel Corporation Method and apparatus for secure execution using a secure memory partition
US6757890B1 (en) 2000-12-28 2004-06-29 Sun Microsystems, Inc. Methods and apparatus for enabling local Java object allocation and collection
US6820101B2 (en) * 2000-12-28 2004-11-16 Sun Microsystems, Inc. Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects
US6654773B2 (en) * 2001-02-27 2003-11-25 Tajea Corporation Method of deterministic garbage collection
US6742082B1 (en) * 2001-06-12 2004-05-25 Network Appliance Pre-computing streaming media payload method and apparatus
US6813690B1 (en) * 2001-06-12 2004-11-02 Network Appliance, Inc. Caching media data using content-sensitive identifiers
US7076560B1 (en) 2001-06-12 2006-07-11 Network Appliance, Inc. Methods and apparatus for storing and serving streaming media data
US7945688B1 (en) 2001-06-12 2011-05-17 Netapp, Inc. Methods and apparatus for reducing streaming media data traffic bursts
US7054911B1 (en) 2001-06-12 2006-05-30 Network Appliance, Inc. Streaming media bitrate switching methods and apparatus
US7155531B1 (en) 2001-06-12 2006-12-26 Network Appliance Inc. Storage methods and apparatus for streaming media data
US7237237B2 (en) * 2001-07-24 2007-06-26 The Mathworks, Inc. Designating an object for destruction
US7412531B1 (en) 2002-01-29 2008-08-12 Blue Coat Systems, Inc. Live stream archiving method and apparatus
US7386627B1 (en) 2002-01-29 2008-06-10 Network Appliance, Inc. Methods and apparatus for precomputing checksums for streaming media
US7657644B1 (en) 2002-05-10 2010-02-02 Netapp, Inc. Methods and apparatus for streaming media multicast
US7127710B2 (en) * 2002-06-24 2006-10-24 Intel Corporation Identifying pure pointers to disambiguate memory references
US7120751B1 (en) 2002-08-09 2006-10-10 Networks Appliance, Inc. Dynamic streaming buffer cache algorithm selection
US7991905B1 (en) 2003-02-12 2011-08-02 Netapp, Inc. Adaptively selecting timeouts for streaming media
US6934827B2 (en) * 2003-03-13 2005-08-23 Sun Microsystems, Inc. Method and apparatus for avoiding cache line collisions between an object and corresponding object table entries
US7818444B2 (en) 2004-04-30 2010-10-19 Move Networks, Inc. Apparatus, system, and method for multi-bitrate content streaming
US7752325B1 (en) 2004-10-26 2010-07-06 Netapp, Inc. Method and apparatus to efficiently transmit streaming media
JP4648751B2 (ja) * 2005-05-02 2011-03-09 株式会社日立製作所 記憶制御システム及び記憶制御方法
US7496678B2 (en) * 2005-05-11 2009-02-24 Netapp, Inc. Method and system for unified caching of media content
KR101634118B1 (ko) * 2010-03-22 2016-06-29 삼성전자주식회사 메모리 관리 장치 및 방법
US8521972B1 (en) 2010-06-30 2013-08-27 Western Digital Technologies, Inc. System and method for optimizing garbage collection in data storage
US9189392B1 (en) 2011-06-30 2015-11-17 Western Digital Technologies, Inc. Opportunistic defragmentation during garbage collection
US8819375B1 (en) 2011-11-30 2014-08-26 Western Digital Technologies, Inc. Method for selective defragmentation in a data storage device
US8788778B1 (en) 2012-06-04 2014-07-22 Western Digital Technologies, Inc. Garbage collection based on the inactivity level of stored data

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4989132A (en) * 1988-10-24 1991-01-29 Eastman Kodak Company Object-oriented, logic, and database programming tool with garbage collection
US5321834A (en) * 1989-11-28 1994-06-14 Xerox Corporation Method and system for reclaiming unreferenced computer memory space
US5426747A (en) * 1991-03-22 1995-06-20 Object Design, Inc. Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system
US5355483A (en) * 1991-07-18 1994-10-11 Next Computers Asynchronous garbage collection
US5485613A (en) * 1991-08-27 1996-01-16 At&T Corp. Method for automatic memory reclamation for object-oriented systems with real-time constraints
US5392432A (en) * 1991-08-27 1995-02-21 At&T Corp. Method for automatic system resource reclamation for object-oriented systems with real-time constraints
JPH05173869A (ja) * 1991-12-26 1993-07-13 Ricoh Co Ltd リスト型データ表現におけるセルの記憶管理方法
JP3475429B2 (ja) * 1992-02-13 2003-12-08 富士ゼロックス株式会社 オブジェクト指向データベースおよび検索方法
JPH05274152A (ja) * 1992-03-27 1993-10-22 Hitachi Ltd オブジェクト管理方式
US5398334A (en) * 1992-04-06 1995-03-14 General Electric Company System for automatic garbage collection using strong and weak encapsulated pointers
GB2269033A (en) * 1992-07-22 1994-01-26 Ibm Controlling data storage to enable garbage collection
WO1995004960A2 (en) * 1993-08-02 1995-02-16 Persistence Software, Inc. Method and apparatus for managing relational data in an object cache
US5535390A (en) * 1994-07-22 1996-07-09 Hildebrandt; Thomas H. Method for reusing temporaries and reclaiming shared memory
US5604902A (en) * 1995-02-16 1997-02-18 Hewlett-Packard Company Hole plugging garbage collection for a data storage system

Also Published As

Publication number Publication date
US5799185A (en) 1998-08-25
JPH08286969A (ja) 1996-11-01

Similar Documents

Publication Publication Date Title
JP2924705B2 (ja) メモリ管理方法およびオブジェクト管理方法
US6304949B1 (en) Data processor with localized memory reclamation
JP2564483B2 (ja) 接続されたユ−ザのプロセツサとは独立の並列ガ−ベツジコレクシヨン機能を有するコンピユ−タ記憶装置
US6557091B2 (en) Data processor with localized memory reclamation
US6424977B1 (en) Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6415302B1 (en) Train-algorithm-based garbage collector employing farthest-forward-car indicator
JP4130481B2 (ja) ポインタ依存擬似命令置換機構を含むライトバリアシステム及び方法
US6185581B1 (en) Train-algorithm-based garbage collector employing fixed-size remembered sets
US4660130A (en) Method for managing virtual memory to separate active and stable memory blocks
US6571259B1 (en) Preallocation of file system cache blocks in a data storage system
US6434576B1 (en) Popular-object handling in a train-algorithm-based garbage collector
US6862674B2 (en) Methods and apparatus for performing a memory management technique
US6449626B1 (en) Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
JP4299555B2 (ja) キャッシュ制御プログラム
Dion The Cambridge file server
JP2000047931A (ja) コンピュ―タメモリの世代動的管理のための方法及び装置
US8397045B2 (en) Memory management device, memory management method, and memory management program
JPH05210584A (ja) 改善されたぺージングを有するディジタルデータプロセッサ
US7653793B1 (en) Use of memory protection to implement replicating collection in an incremental, copying garbage collector
Lomet Scheme for invalidating references to freed storage
JPH11203193A (ja) 共有メモリ管理装置及び方法
Munro et al. Incremental garbage collection of a persistent object store using PMOS
Keedy et al. Implementing Databases in the MONADS Virtual Memory
JPH03186949A (ja) 参照されないコンピュータ記憶スペースを再活用する方法およびシステム
Wiseman The SMITE object oriented backing store

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090507

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100507

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110507

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110507

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120507

Year of fee payment: 13

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130507

Year of fee payment: 14

LAPS Cancellation because of no payment of annual fees