JP2000099351A - プログラム制御装置とメモリ割当装置および方法 - Google Patents

プログラム制御装置とメモリ割当装置および方法

Info

Publication number
JP2000099351A
JP2000099351A JP11200345A JP20034599A JP2000099351A JP 2000099351 A JP2000099351 A JP 2000099351A JP 11200345 A JP11200345 A JP 11200345A JP 20034599 A JP20034599 A JP 20034599A JP 2000099351 A JP2000099351 A JP 2000099351A
Authority
JP
Japan
Prior art keywords
memory
area
thread
data
program
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.)
Granted
Application number
JP11200345A
Other languages
English (en)
Other versions
JP3826626B2 (ja
Inventor
Mitsuaki Hirono
光明 廣野
Kazuyuki Inui
和志 乾
Yoshiharu Konaka
義治 小中
Hiroshi Kuribayashi
博 栗林
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.)
Omron Corp
Original Assignee
Omron Corp
Omron Tateisi Electronics Co
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 Omron Corp, Omron Tateisi Electronics Co filed Critical Omron Corp
Priority to JP20034599A priority Critical patent/JP3826626B2/ja
Publication of JP2000099351A publication Critical patent/JP2000099351A/ja
Application granted granted Critical
Publication of JP3826626B2 publication Critical patent/JP3826626B2/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
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

(57)【要約】 【課題】 マーク&スイープ法でありながらインクリメ
ンタルなGCを実現する。コンパクションを不要とし、
且つメモリの使用効率を向上させる。オブジェクトごと
の寿命を考慮してフラグメントを低減し、メモリの使用
効率を向上させ、CPUパワーの無駄を削減する。 【解決手段】 メモリのヒープ領域内の、どのオブジェ
クトからも参照されないオブジェクトを検出し、そのメ
モリ領域を他のオブジェクトのメモリ割り当て可能なフ
リー領域として解放するガベージコレクションスレッド
をインクリメンタルに行う手段と、スレッドの優先度に
応じて各スレッドを時分割に実行するためのスケジュー
リングを行う手段と、前記ガベージコレクションスレッ
ドの優先度をガベージコレクションスレッド以外のスレ
ッドの優先度より高い状態と低い状態とに交互に変更す
る手段とを設ける。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、コンピュータの
プログラム制御装置、メモリ割当装置およびそれらの方
法に関する。
【0002】
【従来の技術】先ず、本願発明の明細書において用いる
各種用語の定義を以下に示す。尚、出典記号は次のとお
りである。
【0003】JIS:JIS工業用語大辞典第4版(日
本規格協会刊) 参1:情報技術用語事典(オーム社刊) 参2:情報処理用語大事典(オーム社刊) 参3:先端ソフトウエア用語事典(オーム社刊) 参A:SUPER ASCII Glossary Help on Internet (1) プロセス(process) :処理や過程を意味する一般用
語(参2) (2) スレッド(thread):プロセスまたはタスクと呼ばれ
る1つの実行環境の中で並列実行可能な処理を複数に分
割した場合に、プロセッサのスケジュール対象となる実
行単位または制御フローのこと。(参3) (3) コンテキスト(context) :(オブジェクト指向シス
テムに関連して)メソッドを実行するために必要な情報
を蓄えるオブジェクトをいう。コンテキストは、呼び出
し先のコンテキスト、プログラムの入ったメソッドオブ
ジェクト、プログラムカウンタ、スタックポインタとい
う情報、引数や一時変数を取るところ、および評価スタ
ックから成立する。このような実行環境をオブジェクト
としてとるが、プロセスなどをサポートする高級言語の
特徴でヒープ言語と呼ばれる。他方PASCALやAL
GOL60では実行環境はスタックにとられFORTR
ANでは固定領域にとられる。(参1) (4) タスク(task):多重プログラミング又は多重プロセ
ッシングの環境において、計算機によって実行されるべ
き仕事の要素として制御プログラムによって取り扱われ
る命令の1つ以上の列(JIS) (5) ガベージ(garbage) :どこからも参照されていない
が、生成されてしまったオブジェクト。ガベージはガー
ベジコレクタで回収する。(参1) (6) ガベージコレクション(Garbage Collection):(オ
ブジェクト指向システムに関連して)メモリ管理の中心
となるプログラムを言う。主記憶を使いきるとメインの
計算を止め、ガーベジコレクタを動かして、もはや使わ
れていないオブジェクトを全部集める方法である。この
方法でガーベジコレクタが働くと、計算が止まってしま
うため入出力が全く反応しなくなり、実時間の応答が必
要な用途には使えない。(参1) (7) インタプリタ(interpreter) :解釈実行を行う翻訳
プログラム(JIS) (8) リアルタイム(real time) :計算機外部の他の処理
との関係をもちながら、かつ外部の処理によって定めら
れる時間要件に従って、計算機の行うデータの処理に関
する用語。実時間。(JIS) (9) オブジェクト(object):プロシジュア(定義した手
続き)とデータの特性を結合させるエンティティ(実
体)であり、これにより計算が行われ、局部的状態が蓄
えられる。(参1) (10) クラス(class) :同一の手続き群とデータ構造を
持つオブジェクトの集合。(参3) (11) ヒープ領域(heap area) :プログラム実行時に必
要に応じて使用されるような作業領域。(参2) (12) スケジュールする(scheduling):ディスパッチさ
れるべきジョブ又はタスクを選択すること。(JIS) (13) イベント(event) :ハードウエア/ソフトウエア
が、自分自身の状態の変化を他のハードウエア/ソフト
ウエアに通知すること。一般にこの際の通知では、イベ
ントの種類やハードウエア/ソフトウエアの状態を表す
各種パラメータをメッセージとしてまとめ、相手に送信
する。そしてイベントの通知を受けた側では、メッセー
ジのパラメータなどから適切な処理を行う。(参A) (14) イベントフラグ(event flag):タスクが1つまた
は複数の事象の発生を待ち合わせるための機能とその事
象を通知する機能とからなるタスク間同期通信機構。
(参3) (15) セマフォ(semaphore) :複数のプロセスやタスク
を並列に処理するシステムで、各プロセス間,タスク間
の同期やメッセージ制御、割込処理を行うための仕組
み。(参3) (16) 仮想マシーン(仮想機械)(virtual mathine) :
複数の特定のプラットホーム(OSやハードウエア)に
組み込まれた、特定のプラットホームに依存しないアプ
リケーションプログラムを実行する環境。同じ仮想マシ
ンさえ提供されていれば、プラットホームが変わっても
同じアプリケーションプログラムが実行できる。
【0004】(17) Java VM(Java Virtual Machine) :
オペレーティングシステムに組み込まれた、Javaア
プリケーションプログラムを実行するための環境。一般
的なプログラムは、ソースコードをコンパイルして、そ
れぞれのオペレーティングシステムに最適化した実行コ
ードを生成する、というスタイルを採る。Javaで書
かれたプログラムも同様の手順で作成するが、コンパイ
ル後のコードは、特定のオペレーティングシステムに依
存しない中間コードの形をとる。これをロードし、各オ
ペレーティングシステムに合わせたコードに変換しなが
ら実行するのがJava仮想マシンの役目であり、同じ
仮想マシンさえ提供されていれば、プラットホームが変
わっても同じコードが実行できるようになっている。
【0005】(18) フリー領域(free area) :ヒープ領
域上の使用可能な領域、未使用領域。
【0006】(19) ノーマルスレッド(normal thread)
:リアルタイム性が要求されない処理を行うスレッ
ド。
【0007】(20) マークテーブル(mark table):オブ
ジェクトがどこからも参照されないか否かを調べるため
に存在するオブジェクトに1対1に対応する表。或るオ
ブジェクトに参照があることが確かめられた場合、その
オブジェクトに対応する表の欄にマークを付ける。全て
の参照関係を調べたときマークの無いオブジェクトは不
要であるので取り除くことができる。
【0008】(21) オブジェクトの寿命(life time of t
he object) :オブジェクトが生成され、消去されるま
での時間。
【0009】(22) ライトバリア(write barrier) :オ
ブジェクトへの参照関係の変更をチェックし、書き替え
が起こった場合に何らかの処理をすること。本件の場合
は、書き替えが起きたとき、書き替える参照が指してい
るオブジェクトに対応するマークテーブルの欄にマーク
を付ける。
【0010】(23) スイープ(sweeping):ヒープ領域上
の不要なオブジェクトを取り除く処理。
【0011】(24) オブジェクト生成(create the objec
t) :新しいオブジェクトを生成すること。具体的に
は、ヒープ領域の一部をオブジェクトに割り当て、内容
を初期化すること。
【0012】(25) オブジェクト消去(delete the objec
t) :不要なオブジェクトを取り除くこと。具体的に
は、ヒープ領域に確保してある領域を解放すること。
【0013】(26) 参照(reference) :或るオブジェク
トAが別の特定のオブジェクトBにアクセスするために
オブジェクトBを特定する情報。具体的には、オブジェ
クトBを指すポインタまたはインデックス。
【0014】(27) 参照変更(chenge the reference /
reconnect the reference) :参照を現在のオブジェク
トBから別のオブジェクトCに変更すること。
【0015】さて、従来のシングルプロセッサのコンピ
ュータシステムにおいて、オペレーティングシステム上
で複数のスレッドを並行処理する場合、共有メモリを用
いて排他制御するために、また複数のタスク間で同期を
とるために、従来よりセマフォやイベントフラグなどを
用いて排他制御が行われている。
【0016】また、例えばプログラムを少量のメモリ環
境下で動作させることなどを目的として、仮想記憶を行
わないで単一のアドレス空間のメモリをプログラムの実
行時に動的に割り当てる、いわゆる動的記憶管理が従来
より行われている。このような動的記憶管理によれば、
プログラムにより明示的にメモリ領域の解放を行わなけ
れば、プログラムの実行過程において使用されなくなっ
たメモリ領域が発生する。その結果、プログラムが使用
できるフリー領域が次第に不足する。こうした問題を回
避するために、使用されなくなったメモリ領域(ガベー
ジ)を抽出し、これらを集めて(コレクトして)再び使
用可能なフリー領域とする、ガベージコレクションと呼
ばれる処理を自動的に行うようにしている。
【0017】ここで従来のガベージコレクションの処理
手順をフローチャートとして図54に示す。ガベージコ
レクションのアルゴリズムにはマーク&スイープ法、複
写法、参照カウント法などの各種方法が考えられている
が、ここではマーク&スイープ法について例示する。図
54に示すように、まずガベージコレクションの途中で
ガベージコレクションスレッド以外の他のスレッドが実
行されないように割り込みを禁止し、シングルスレッド
モードにする(s201)。続いてメモリ上のガベージコレク
ションの対象となる領域(以下「ヒープ領域」とい
う。)に割り当てられているオブジェクトにそれぞれ対
応するマークの記憶領域(以下「マークテーブル」とい
う。)をクリアする(s202)。続いてヒープ領域内に割り
当てられているオブジェクトの参照関係を示す情報を基
に何れかのオブジェクから参照されているオブジェクト
を検出し、それらに対応するマークテーブル上の位置に
マークを付ける処理を行う(s203)。この処理により、何
れのオブジェクトからも参照されていないオブジェクト
はもはや使われなくなったオブジェクトであり、それに
相当するマークテーブルにはマークが付けられないこと
になる。従ってそのマークしていないオブジェクトを新
たなオブジェクトの割当可能な領域、すなわちフリー領
域として抽出する(s204)。例えばこのフリー領域をリス
ト構造のデータとして生成する。その後、割り込み禁止
を解除し、マルチスレッドのモードに戻す(s205)。
【0018】従来はこのようなガベージコレクション
が、メモリのフリー領域が所定量まで減少した時点で自
動的に起動されるようにしていた。
【0019】また、ガベージコレクションを行ったと
き、任意の大きさ(メモリサイズ)のオブジェクトが任
意に解放されるのでフラグメントが発生する。そこで、
連続したサイズの大きな領域がとれるように、オブジェ
クトの割当領域を例えば先頭から順次詰めるメモリコン
パクション(以下単に「コンパクション」という。)を
実行していた。
【0020】
【発明が解決しようとする課題】上述した排他制御の機
能をセマフォやイベントフラグなどのコンピュータ資源
を用いることで実現している従来のシステムにおいて
は、その資源が他のスレッドなどで使用されている場合
には、他のスレッドはその資源が解放されるのを待たな
ければならない。このような資源待ちの時間が生じる
と、リアルタイム性の要求されるシステムにおいては大
きな障害となる。すなわち、資源待ち状態にあるスレッ
ドは、その資源が解放されるまで、処理できずリアルタ
イムな応答が不可能となる。
【0021】例えば上記従来のガベージコレクション
(以下「GC」という。)の方法によれば、メモリ空間
が広いほど、ガベージとしてコレクトしてもよい領域を
見つけ出すのに時間がかかり、例えば64〜128MB
のヒープ領域で数秒間を要し、且つGCはフリー領域が
ある程度減少した時点で不定期に行われるので、リアル
タイム性の要求されるシステムには用いることができな
かった。
【0022】リアルタイム性の要求されるシステムで
は、あるタスクを実行中に何らかのイベント(割り込
み)が発生すれば、そのイベントに応じた他のスレッド
を処理することになるが、そのスレッドの切替に要する
時間は、最悪値として例えば数十μsec以下であるこ
とが要求される。ところが、上述したようにGCが何時
起動されるか予測できず、一旦起動されれば、CPUは
数秒間GCに専念することになるため、その間リアルタ
イム処理は不可能となる。
【0023】上述の問題はGCの場合に限らず、長時間
の資源待ち状態が生じるシステムに共通の問題である。
【0024】この発明の目的はセマフォやイベントフラ
グなどのコンピュータ資源をロックのメカニズムとして
使用せずに、処理の排他性を保証することにより、上述
の問題を解消することにある。
【0025】GCの他の方法として、従来の複写法をイ
ンクリメンタルに行うようにして、リアルタイム性を確
保する方法が情報処理Vol.35 No.11 pp1008 〜pp1010に
示されている。この方法によれば、GCの途中で中断を
許すことができるので、時分割的に他のスレッドと並行
処理することが一応はできる。しかし、この複写法をイ
ンクリメンタルに行うようにする方法では、複写中に他
のスレッドがメモリを使用する訳にはいかないので、メ
モリを使用しない極一部のスレッドしか並行処理できな
い。また、複写法では、複写元と複写先のメモリ領域を
確保しておかなければならないので、メモリの使用効率
が低く、少量のメモリ環境下で動作させるシステムには
向かない。
【0026】また、マーク&スイープ法でマルチスレッ
ドに対応するために参照関係が変更される度にマークを
付与する方法は、「On-the-fly GC 」という名前で、G
C専用のCPUに処理を割り当てるマルチCPU化のた
めの方法が情報処理Vol.35 No.11 pp1006 〜pp1008に示
されている。しかし、この方法では、オブジェクトが常
に作成されて、且つ参照関係が変更されている場合に、
既にマークしているツリーを何回も辿り直して新しいノ
ードを見つけてマークしなければならず、マーク作業が
いつまでも終わらない場合が生じたり、非常に長い時間
がかかる、という問題があった。また、この方法ではス
イープ中にシステムをロックする必要があった。
【0027】そこで、この発明の他の目的はマーク&ス
イープ法でありながらGCスレッドを他のスレッドと実
質的に並行処理可能とし、GCの任意の時点で中断して
も短時間に確実にGCを完了できるようにしたインクリ
メンタルなGCを可能とすることにある。
【0028】また、従来のマーク&スイープ法等のGC
によるフラグメントを解消するためにコンパクションを
行う際、多大なCPUパワーを必要としていた。また、
このコンパクションを行わなければメモリの使用効率が
低下するという問題があった。
【0029】この発明の他の目的はコンパクションを不
要とし、且つメモリの使用効率を向上させることにあ
る。
【0030】さらに、従来のオブジェクト指向システム
においては、永続的に存在する寿命の長いオブジェクト
と短時間で消滅する寿命の短いオブジェクトがヒープ領
域内に混在していたため、GCを行うと、短寿命のオブ
ジェクトから消去されて確実にフラグメントが生じてメ
モリ使用効率が急に低下する。また、GCを行う場合
に、永続的に存在するオブジェクトに対してもガベージ
であるか否かの判定を毎回行わなければならないので、
このことがCPUパワーの無駄となっていた。これに対
して、一定期間存在していたオブジェクトを永久に存在
するものと見なして、そのオブジェクトを存在調査から
外す、いわゆる世代別ガベージコレクションという方法
も従来から考えられているが、このような方法でも不要
なオブジェクトが存続したり、それぞれのオブジェクト
について一定期間の存続調査をしなければならないとい
う欠点があった。
【0031】この発明の他の目的はオブジェクトごとの
寿命を考慮してフラグメントを低減し、メモリの使用効
率を向上させ、CPUパワーの無駄を削減することにあ
る。
【0032】ここで、先行技術調査を行った際に発見し
た文献と本願発明との関係について示しておく。
【0033】(1) Incremental Garbage Collection of
Concurrent Objects for Real-TimeApplication この論文はBaker が書いたという1978年のリアルタイム
GCに対して、全体の処理時間から必要なGCの処理時
間の割合を求めるものである。本願発明に係る課題を解
決するものではない。
【0034】(2) Distributed Garbage Collection for
the Parallel Inference Machine:PIE64 GCを行う領域を細かく分けることにより、個々の処理
時間を短くしてリアルタイム性を向上する方法である。
本願発明のように全ての領域を対象にするものとは基本
的に異なる。また、スケジューリングについては述べら
れていない。
【0035】(3) Garbage Collection in Distributed
Enviroment Baker の考えを発展させ、ネットワークの分散環境に適
応したもの。ネットワーク固有の問題を解決しようとす
るものであり、本願発明とは異なる。この分散環境の考
え方に、本願発明のスケジューラを組み合わせることに
より、分散環境でより高度なリアルタイムCGを実現す
ることも可能となる。
【0036】(4) 特開平1−220039号 システムコール発行時に、そのシステムコールにより起
動されるタスクの優先度を制御するもの。優先度制御と
いう点で共通点があるだけ。
【0037】(5) 特開平3−231333号 オブジェクトのサイズを検出し、そのサイズに応じてワ
ークエリアをメモリに確保することが一応示されてい
る。
【0038】(6) 電子情報通信学会誌Vol.80 No.6 pp58
6-592 マルチメディアオペレーティングシステムのコンセプト
が示されている。
【0039】(7) 日本ソフトウェア科学会第12回D7
−4 スタック上のオブジェクトの一番上にオブジェクトの大
きさを書いておくことが示されている。すなわちオブジ
ェクトのサイズを記憶しておく、という点でのみ関連が
ある。
【0040】(8) 11TH Real-Time System Symposium "I
ncremental Garbage Collection ofConcurrent Object
for Real-Time Applications" オブジェクト間の参照ツリーに類似の考え方が示されて
いる。
【0041】(9) 情報処理学会第38回全国大会5U-7 オブジェクトの寿命に関連してメモリ割当を行うことが
示されている。
【0042】(10)Lecture Notes in Computer Science
259 "Garbage Collection in a Distributed Environme
nt" アプリケーションプログラムインタフェースの呼出に応
じてGCを制御することと、オブジェクト参照に関する
技術思想が示されている。
【0043】
【課題を解決するための手段】請求項1,18,25に
係る発明は、或るスレッドからの、指定メモリ領域に対
するデータの書き込み有無検出の開始を依頼するアプリ
ケーションプログラムインタフェースの呼び出しに応答
して、その書き込み有無を示すフラグを書き込み無しの
状態に設定し、前記指定メモリ領域に対するデータの書
き込みがあったとき、前記フラグを書き込み有りの状態
に設定する。そして前記スレッドからの、指定メモリ領
域に対するデータの書き込み有無検出の終了を依頼する
アプリケーションプログラムインタフェースの呼び出し
に応答して、前記フラグの状態に応じた値を前記スレッ
ドに返す。
【0044】これにより、コンピュータ資源をロックの
メカニズムとして使用せずに、処理の排他性が保証され
る。すなわち指定メモリ領域に対するデータの書き込み
有無検出の開始を依頼するAPIの呼び出しから指定メ
モリ領域に対するデータの書き込み有無検出の終了を依
頼するAPIの呼び出しまでの間で行われたスレッドA
の処理の途中で、他のスレッドによる指定メモリ領域に
対する書き込みがあったか否かが、そのスレッドAで分
かる。書き込みが行われていなければ、指定メモリ領域
の排他性が保たれている。もし書き込みが行われていれ
ば、スレッドAのその間の処理を無効にして、例えばそ
の処理を再度実行するなどの方法によって高い応答性を
保ちながら、排他制御を行うことができるようになる。
【0045】請求項2,19,26に係る発明は、メモ
リのヒープ領域内の、どのオブジェクトからも参照され
ないオブジェクトを検出し、当該オブジェクトのメモリ
領域を他のオブジェクトのメモリ割り当て可能なフリー
領域として解放するGCスレッドをインクリメンタルに
行うスレッドを、他のスレッドの優先度より高い状態と
低い状態とに交互に変更する。
【0046】このようにGCスレッドの優先度を交互に
切り替えることによって、GCスレッドの優先度が低い
状態では、他のスレッドによるアプリケーションが優先
され、動作するアプリケーションが無い場合にはGCス
レッドが自動的に動かされ、メモリのフリー領域が自動
的に拡大される。GCスレッドの優先度が高い状態で
は、他のスレッドは実行されないが、優先度の低い状態
で、他のスレッドにより、GCが継続して行われないこ
とによってフリー領域が慢性的に不足状態となることが
防止され、常に高いパフォーマンスを維持することがで
きる。
【0047】請求項3に係る発明は、前記ガベージコレ
クションスレッドの優先度の高い状態の時間をアプリケ
ーションプログラムインタフェースの呼び出しによって
設定する。これにより、APIを呼び出す側で、たとえ
ばシステムの応答性を重視する場合には優先度の高い状
態の時間を短くし、システム全体のスループットを重視
する場合には優先度の高い状態の時間を長くする、とい
った設定が可能となり、システムのニーズに応じて性能
を変えることができるようになる。
【0048】請求項4に係る発明は、前記ガベージコレ
クションスレッドの優先度の高い状態と低い状態による
周期をアプリケーションプログラムインタフェースの呼
び出しによって設定する。これにより、たとえば連続的
なパルスを処理するような、連続してCPU資源が必要
なアプリケーションプログラムの場合には、周期を短く
し、通常のアプリケーションプログラムのような断続的
にCPU資源を利用するアプリケーションプログラムで
は周期を長くすることによって、コンテキストスイッチ
などのオーバヘッドを小さくすることができる。
【0049】請求項5に係る発明は、前記フリー領域の
容量の時間変化を検出し、前記フリー領域の容量が低下
傾向のとき、前記ガベージコレクションスレッドの優先
度の高い状態の時間を長くする。これにより、動的にガ
ベージコレクションの優先度の高い状態の時間を調整す
ることになり、どのようなアプリケーションプログラム
でもフリー領域が足りなくなるといった状況を回避する
ことができ、且つフリー領域が十分確保できるシステム
やアプリケーションプログラムでは、ガベージコレクシ
ョンを最低限に抑えることができる。
【0050】請求項6,20,27に係る発明は、イベ
ントの発生に応じてリアルタイムスレッドを実行させ、
該リアルタイムスレッドの中断時または終了時に非リア
ルタイムスレッドを実行させるようにし、GCスレッド
以外の非リアルタイムスレッドの実行によりフリー領域
が所定の値まで減少したとき、非リアルタイムスレッド
の1つであるGCを実行させる。
【0051】一般にリアルタイム性の要求されるシステ
ムではリアルタイム性の必要なスレッドとそうでないス
レッドが存在していて、一般にリアルタイム性が要求さ
れるプログラムは生成するオブジェクトの量が少なく、
その量を予測して設計することができる。一方、リアル
タイム性の要求されないプログラムは、生成されるオブ
ジェクトの量の予測が困難である。そこで、リアルタイ
ム性の要求されるプログラムが生成すると予想されるオ
ブジェクトの量を定義し、リアルタイム性の要求されな
いスレッドがオブジェクトを生成して、メモリのフリー
領域の量が例えば上記定義したオブジェクトの量の近傍
にまで減少した時に、その時点でスケジューリングを行
い、GCスレッドを実行させる。このことによって、フ
リー領域が直ちに確保され、リアルタイム性の要求され
るスレッドの実行可能な環境を常に維持することができ
る。
【0052】請求項7,21,28に係る発明は、メモ
リのヒープ領域内の、どのオブジェクトからも参照され
ないオブジェクトを検出し、当該オブジェクトのメモリ
領域を他のオブジェクトのメモリ割り当て可能なフリー
領域として解放するとともに、前記フリー領域または前
記オブジェクトの使用領域の量に基づいて、手順の異な
る複数通りのガベージコレクションスレッドを選択的に
実行するようにする。
【0053】一般に、GCを行う場合、そのアルゴリズ
ムに応じて、CPUに要求されるパワー、メモリの使用
量、GCに要する時間などがそれぞれ異なる。そのた
め、フリー領域の量に応じて、適切なGCの手順は異な
る。上述したように、フリー領域または使用領域の量に
応じてGCの手順を切り替えることによって、常に効率
的なGCが可能となる。
【0054】請求項8,22,29に係る発明は、メモ
リのヒープ領域内に割り当てられるオブジェクトのサイ
ズの分布を検知し、その分布中心より大きな固定サイズ
の整数倍を前記ヒープ領域に対する新たなオブジェクト
の割り当てサイズとする。
【0055】一般に、オブジェクト指向のシステムにお
いては、プログラムの実行時に生成されるオブジェクト
の大きさ(メモリ上のサイズ)の発生頻度分布は正規分
布を示す。一方、新たなオブジェクトを生成する際、メ
モリ上のフリー領域から割り当て可能な領域を抽出する
が、上述のようにオブジェクトのサイズの分布中心よ
り、大きなサイズを新たなオブジェクトの割り当てサイ
ズとしておくことによって、その割り当てられたオブジ
ェクトが消去された後、新たなオブジェクトが割り当て
られるとき、上記割り当てサイズより小さなオブジェク
トであれば再利用できる。上記割り当てサイズは正規分
布の分布中心より大きなサイズであるため、多くのオブ
ジェクトが先に使用されていたメモリ領域を再利用でき
ることになる。また、このことにより、コンパクション
を行わなくてもメモリの使用効率が向上することにな
る。また、コンパクションのためのCPUパワーが不要
となり、小規模のCPUで応答性の高いシステムを構成
することができる。
【0056】請求項9に係る発明は、前記オブジェクト
のサイズの分布を検知する手段は、システムの使用開始
時にシステムに組み込まれ、前記オブジェクトのサイズ
の分布を検知した後にシステムから切り離されるプログ
ラムモジュールによるものとする。また、請求項10に
係る発明は、前記オブジェクトの割り当てサイズを決定
する手段は、システムの使用開始時にシステムに組み込
まれ、前記オブジェクトの割り当てサイズが決定された
後にシステムから切り離されるプログラムモジュールに
よるものとする。
【0057】これにより、一度オブジェクトのサイズの
分布が検知された後は、また、オブジェクトの割り当て
サイズが決定された後は、メモリ領域とCPUパワーの
無駄がなくなる。
【0058】請求項11,30に係る発明は、メモリの
ヒープ領域内にオブジェクトを生成する手段を備えたプ
ログラム制御装置において、前記ヒープ領域内を予め複
数のサイズに分割し、オブジェクト生成時に当該オブジ
ェクトのサイズより大きく且つ最も小さなサイズの領域
を割り当てる。
【0059】請求項12に係る発明は、前記複数のサイ
ズの分割数と各サイズを引数とするアプリケーションプ
ログラムインタフェースの呼び出しによって、前記ヒー
プ領域を分割する。
【0060】請求項13,31に係る発明は、メモリの
ヒープ領域内にオブジェクトを生成する手段を備えたプ
ログラム制御装置において、固定サイズの整数倍を前記
ヒープ領域内に対するオブジェクトの割り当てサイズに
決定し、アプリケーションプログラムインタフェースの
呼び出しによって前記固定サイズを設定する。
【0061】また、請求項14,32に係る発明は、メ
モリのヒープ領域内にオブジェクトを生成する手段を備
えたプログラム制御装置において、固定サイズの整数倍
を前記ヒープ領域内に対するオブジェクトの割り当てサ
イズに決定するものとし、前記ヒープ領域内に割り当て
られるオブジェクトのサイズの分布をアプリケーション
プログラムインタフェースの呼び出しによって設定し、
該アプリケーションプログラムインタフェースの呼び出
しに応答して、前記分布の中心より大きな値を前記固定
サイズとして設定する。
【0062】これにより、別の装置、システム、および
アルゴリズムで、メモリのヒープ領域内に割り当てられ
るオブジェクトのサイズの分布を測定して、決定したオ
ブジェクトの割り当てサイズの基になる固定サイズを登
録することができ、CPUパワーとメモリの使用効率を
向上させることができる。
【0063】請求項15,23,33に係る発明は、テ
ンプレートとしてのクラスと該クラスにより生成される
オブジェクトをメモリのヒープ領域内に割り当てる際、
前記クラスからオブジェクトが生成された時刻に相当す
るデータを記憶し、前記オブジェクトを削除する際に、
当該オブジェクトの寿命を検出し、該寿命のデータをク
ラスに設け、当該クラスからオブジェクトを生成する際
に、前記寿命のデータに基づいて、前記ヒープ領域に対
するオブジェクトの生成領域を分ける。
【0064】一般にオブジェクト指向のシステムにおい
ては、クラスをテンプレートとしてオブジェクトが生成
されるため、同一のクラスから生成されたオブジェクト
は略同一の寿命を持つ。そこで、或るクラスからオブジ
ェクトが生成された時刻に相当するデータを記憶し、そ
のオブジェクトが削除された際に、当該オブジェクトの
寿命を検出して、これをそのオブジェクトを生成したク
ラスの寿命データとして記憶し、そのクラスからオブジ
ェクトを生成する際に、寿命データに基づいて、異なっ
たヒープ領域にオブジェクトを生成することによって、
長寿命のオブジェクトと短寿命のオブジェクトが異なっ
た領域に生成される。これにより、長寿命領域でのフラ
グメントが大幅に低下し、メモリの使用効率が向上す
る。また、GCを行う場合に、短寿命のオブジェクトが
生成される領域を重点的に処理することによって、GC
に消費されるCPUパワーを低減することができるよう
になる。
【0065】請求項16,24,34に係る発明は、メ
モリのヒープ領域内の、他のオブジェクトから参照され
るオブジェクトを検出して当該参照の有無状態を記憶
し、当該記憶内容を基に、どのオブジェクトからも参照
されないオブジェクトのメモリ領域を他のオブジェクト
のメモリ割り当て可能な領域として解放するが、オブジ
ェクトの生成時にオブジェクトの参照関係を表すツリー
構造の第1のデータ(この第1のデータは、たとえばオ
ブジェクトの参照関係を示す、オブジェクト内に設けら
れる1つの変数である。)を記憶し、参照関係の変更時
に、オブジェクトの参照関係の変更された部分のオブジ
ェクトを示す第2のデータを記憶し、第1のデータを探
索して参照されているオブジェクトを検出し、第2のデ
ータを読み出すとともに該データを基に第1のデータを
探索して、参照されているオブジェクトを検出する。
【0066】このように構成することにより、スイープ
やマークテーブルのクリアを行うときに、他のスレッド
を止めなくても、スイープ中またはマークテーブルのク
リア中に他のスレッドにより新たなオブジェクトが生成
されたり、オブジェクト間の参照関係が変更されても、
マークテーブルを基にスイープを行う際に、上記の新た
に生成されたオブジェクトを消去してしまうことがな
い。そのため、インクリメンタルにGCを行うことがで
き、また、自由に中断ができるので、リアルタイム性が
向上する。また、常にバックグラウンドでGCスレッド
を動作させておくことが可能となり、メモリの使用効率
を常に高く維持できる。しかも、ツリー探索によるマー
ク付与に要する時間が短縮化され、割込によって、いつ
までもマーク付与が完了しない、といった不都合が防止
でき、GCを確実に実行できる。
【0067】請求項17に係る発明は、前記参照オブジ
ェクト検出手段は、前記オブジェクトの参照関係の変更
時の参照先が前記第1のデータの探索により初めて検出
されたオブジェクトであるときにのみ、参照先の当該オ
ブジェクトを前記第2のデータとして記憶する。
【0068】これにより、オブジェクトの参照関係の変
更時の参照先が既にマークされている場合に、第2のデ
ータを重ねて記憶することがなくなり、第1のデータの
探索およびマークに要する時間をその分短縮化できる。
【0069】
【発明の実施の形態】この発明の実施形態であるプログ
ラム制御装置およびメモリ割り当て装置の構成を図1〜
図53を参照して順次説明する。
【0070】〔第1の実施形態〕図1は装置のハードウ
エアの構成を示すブロック図である。装置は基本的にC
PU1とオブジェクト群を生成するヒープ領域およびマ
ークテーブル等を記憶するメモリ2、および外部との入
出力を行うI/O3とから構成する。また、外部から必
要なプログラムをメモリにロードする場合は、CD−R
OM読取インタフェース4を用い、プログラムが予め書
き込まれたCD−ROM5を読み取るようにする。この
CD−ROMが本願発明に係るプログラム記録媒体に相
当する。
【0071】図2はソフトウエアの構成を示すブロック
図である。同図において、カーネル部分はCPUやメモ
リを資源として管理し、時分割によるマルチスレッドの
機能を実現する。VM(仮想マシーン)部分はプログラ
ムとカーネルとのインタフェースを行うソフトウエアで
あり、ここではアプリケーションプログラムから見てV
M以下の階層全体が例えばJava仮想マシンとして作
用させる。(JavaはSun Microsystems社の商標)こ
の場合、カーネルとVM部分がJavaOSを構成す
る。このVMにはプログラムがバイトコード等の中間コ
ードで与えられるとき、これを解釈するインタプリタと
その解釈に応じて呼び出されるプログラムモジュール等
を含む。同図におけるプログラムは中間コードによる各
種スレッドであり、上記インタプリタを介して、内部の
プログラムモジュールを実行する。
【0072】図3はメモリのヒープ領域に生成されるオ
ブジェクトの参照関係およびスタックとの関係を示す図
である。ヒープ領域に対してオブジェクトを生成した
際、或るオブジェクトから他のオブジェクトへの参照関
係は同図に示すようにルートノードから延びるツリー構
造を成す。例えばグローバル変数を宣言すれば、その変
数に対応するオブジェクトが生成される。またスレッド
毎に引き数領域、戻り番地、ローカル変数、作業領域等
の情報を記憶するスタックが生成され、例えば図中矢印
で示すようなスタック上のローカル変数からツリー上の
グローバル変数への参照関係なども記憶される。これら
のスタックはヒープ領域外の所定領域に格納される。
【0073】図4は図2に示したソフトウエアの構成を
ブロック図として詳細に示したものである。同図におい
て、GCモジュール10はGCを行うための各種処理の
プログラムモジュールであり、GCスレッド11はこれ
らのモジュールを呼び出すことによって、GCを実行さ
せる。また、インタプリタ12は、この例で、「スレッ
ド4」からオブジェクト生成依頼があったとき、GCモ
ジュール10の「オブジェクト生成」を呼び出し、また
オブジェクト間の参照関係の変更依頼があったとき、G
Cモジュール10の「マーク付与」を呼び出す。
【0074】なお、図4に示した例では、各スレッドが
中間コード(例えばJavaアプレットの場合バイトコ
ード)で表されているが、中間コードをVMに対するネ
イティブコードに変換するコンパイラを設けてもよい。
(例えばJavaの場合、JIT(Just-In-Time コンパ
イラ)等を設ける。)この場合、ネイティブコードで記
述したスレッドであるので、図4に示したインタプリタ
12を介さずにGCモジュール10を直接アクセスする
ことになる。
【0075】図5はGCを行うことによって、ヒープ領
域内に生じるフラグメントを解消するためのコンパクシ
ョンを行った例を示す図である。図中ハッチング部分が
オブジェクトであり、これをコンパクションすることに
よって、(B)に示すようにフラグメントが解消され
て、連続したメモリ空間が広がることになる。
【0076】上記コンパクションは図4に示したGCモ
ジュールの「コンパクション」のプログラムにより行
う。
【0077】図6はコンテキストスイッチ発生有無を検
出するためのAPIの使用例を示す図である。同図の
(A)に示すように、処理1を実行する前にコンテキス
トスイッチ発生有無の検出開始を依頼するAPI#Aを
発行してから処理1を実行する。処理1の終了後、コン
テキストスイッチ発生有無検出の終了を依頼するAPI
#Bを発行する。(A)に示す例ではこの間にコンテキ
ストスイッチが発生していないので、そのまま次の処理
2を行う。もし、(B)に示すように、処理1の途中で
スレッド#2の処理が行われれば、すなわちコンテキス
トスイッチが発生していれば、API#Bの発行後、処
理1を破棄する。たとえばメモリの領域Aの内容を領域
Bにコピーするような処理で、コピー処理中にコンテキ
ストスイッチが発生した場合、領域Aの内容が変わって
領域AとBの内容が不一致となる場合がある。不一致で
はコピーしたことにならないので、領域Bを無効にす
る。このことは、最初から処理が行われなかったのと同
じであり、処理自体を破棄したことに他ならない。
【0078】図7は上記の処理をフローチャートとして
示したものである。まず、API#Aを発行してから処
理1を実行する(s1→s2)。この処理1が終了した
後、API#Bを発行して、その戻り値を取得する(s
3)。戻り値がコンテキストスイッチの発生を表す場
合、処理1を破棄して、再び処理1を実行する(s4→
s5→s1→s2)。戻り値がコンテキストスイッチの
非発生を表す場合、処理を終了する。このように所定の
期間内でのコンテキストスイッチの発生有無が分かるの
で、コンテキストスイッチが発生すれば、その間の処理
を破棄し無効とすることによって、システムを現実には
ロックしていないにも拘らず排他的制御を行うことが可
能となる。
【0079】図8は上記API#AおよびAPI#Bの
カーネルにおける処理手順を示すフローチャートであ
る。API#Aの発行(システムコール)があれば、コ
ンテキストスイッチの発生有無を示すフラグをクリアす
る。また、API#Bが発行されると、上記フラグの状
態を戻り値としてスレッドに返す。
【0080】図9はコンテキストスイッチの処理手順を
示すフローチャートである。コンテキストスイッチがス
ケジューラによって行われると、上記フラグをセットし
てからコンテキストスイッチを実行する。すなわちスイ
ッチ前のスレッドの実行状態をコンテキストとして格納
するとともに、スイッチ後のスレッドのコンテキストを
読み出してCPUのレジスタ等に設定する。
【0081】図10は上記コンパクションの処理手順を
示すフローチャートである。先ず、ヒープ領域内の先頭
のオブジェクトを指定し(s11)、そのオブジェクト
をヒープ領域の先頭にコピーするための領域を確保し
(s12)、コピー中に他のスレッドによってその領域
に何らかのデータが書き込まれないようにしてから上記
API#Aを発行する(s13)。そして、図5に示し
たように、ヒープ領域内のオブジェクトを先頭から順次
空き領域へコピーすることによって詰めていく(s1
4)。1つのオブジェクトについてのコピーが終われ
ば、上記API#Bを発行する(s15)。このことに
より、API#Aを発行してから、API#Bを発行す
るまでの期間にコンテキストスイッチが発生したか否か
がAPI#Bの戻り値として得られる。もしコンテキス
トスイッチが発生していれば、今回コピーを行ったオブ
ジェクトを既に確保している領域に再びコピーする(s
16→s13→・・・)。もしコンテキストスイッチが
発生していなければ、次のオブジェクトについて同様に
処理を行う(s16→s17→s18→・・・)。この
ようにシステムをロックすることなく、しかも他のスレ
ッドとともに、コンパクションを同時に行うことが可能
となる。
【0082】上述の例ではマーク&スイープ法によるG
Cにおけるコンパクションに適用したが、複写法による
GCに適用する場合、図11および図12に示す処理を
行う。
【0083】図11は上記複写法によるGCのフローチ
ャートである。先ず、オブジェクトの参照関係を表すツ
リー構造のデータのルートノードへポインタを移動し
(s21)、そのルートノードに相当する、From領
域にあるオブジェクトをTo領域に複写する(s2
2)。(ヒープ領域はFrom領域とTo領域に分けら
れ、From領域内の残すべきオブジェクトのみをTo
領域に複写することによってTo領域にガベージのない
オブジェクトだけを再構成する。次回は現在のFrom
領域をTo領域とし、To領域をFrom領域として、
その操作を交互に繰り返すのが、複写法によるガベージ
コレクションである。)その後、ツリーを辿って、参照
関係にある次のオブジェクトへポインタを移動させ(s
23)、そのオブジェクトをTo領域に複写する(s2
4)。この処理をツリーで辿れるすべてのオブジェクト
について行う。
【0084】図12は図11における複写処理の内容を
示すフローチャートである。先ず、複写すべきオブジェ
クトをTo領域内の所定位置にコピーするための領域を
確保し、コピー中に他のスレッドによってその領域に何
らかのデータが書き込まれないようにし、上記API#
Aを発行してから(s31)、オブジェクトをFrom
領域からTo領域に複写する(s32)。その後、上記
API#Bを発行する(s33)。このことにより、A
PI#Aを発行してから、API#Bを発行するまでの
期間にコンテキストスイッチが発生したか否かがAPI
#Bの戻り値として得られる。もしコンテキストスイッ
チが発生していれば、今回複写を行ったオブジェクトを
既に確保している領域に再び複写する(s34→s31
→・・・)。
【0085】図13および図14はコンテキストスイッ
チの発生有無を検出して排他性を確保するのではなく、
複写しようとするオブジェクトが複写前に書き替えられ
たか否かを検出して排他性を確保する場合の処理手順を
示すフローチャートである。
【0086】複写を行う場合、先ず複写すべきオブジェ
クトをTo領域内の所定位置にコピーするための領域を
確保し、コピー中に他のスレッドによってその領域に何
らかのデータが書き込まれないようにしてから、図13
に示すようにAPI#Cを発行する(s41)。このA
PIは指定したメモリ領域ない対する書き込みが発生し
たか否かの検出を依頼するアプリケーションプログラム
インタフェースである。続いてオブジェクトをFrom
領域からTo領域に複写する(s42)。その後、上記
API#Dを発行する(s43)。このAPIは上記A
PI#Cが呼び出されてから、このAPI#Dが呼び出
されるまでの間に指定メモリ領域に何らかのデータの書
き込みが発生したか否かが戻り値として返されるアプリ
ケーションプログラムインタフェースである。したがっ
て、複写しようとするオブジェクトのメモリ領域を指定
してAPI#Cを発行し、API#Dも戻り値を見れ
ば、そのオブジェクトが参照されたか否かが判る。オブ
ジェクトが参照されていれば、内容が書き変わっている
可能性があるので、そのオブジェクトの複写をやり直す
(s44→s41→・・・)。
【0087】図14は上記API#CおよびAPI#D
のカーネルにおける処理手順を示すフローチャートであ
る。API#Cの発行(システムコール)があれば、所
定にワークエリアをクリアし、API#Cのパラメータ
で指定された領域がライトされたときに例外が発生する
ようにMMU(Memory Management Unit) を設定する。
また、API#Dが発行されると、上記パラメータで指
定された領域がライトされたときに例外が発生しないよ
うに、MMUに対する上記設定を解除する。そして上記
ワーク領域にセットされるフラグの状態を戻り値として
スレッドに返す。
【0088】図15は上記例外発生時のMMUの処理内
容を示すフローチャートである。例外が発生すると、上
記ワーク領域内の参照フラグをセットする。
【0089】なお、上述の例では複写法によるGCの場
合について示したが、マーク&スイープ法におけるコン
パクションの場合にも同様に適用できる。
【0090】〔第2の実施形態〕図16および図17は
インクリメンタルにガベージコレクションできるGCス
レッドの優先度を自動的に切り替えるようにした場合の
例を示す図である。
【0091】図16の(A)に示すように、GCスレッ
ドの優先度を、高優先度時間は高め(例えば最高優先度
にし)、低優先度時間は低く(例えば最低優先度)する
動作を交互に行う。
【0092】同図の(B)はGCスレッド以外の中程度
の優先度のスレッドを同時に行った場合の例について示
している。すなわちGCスレッドの優先度が低いとき、
それより優先度の高いスレッドがReady状態となれ
ば、コンテキストがスイッチされ、そのスレッドの実行
中にGCスレッドの優先度が高くなれば、そのGCスレ
ッドにコンテキストがスイッチされ、そのGCスレッド
の処理が中断すると、上記のGCスレッド以外のスレッ
ドの処理を行うことになる。このようにすれば、一定周
期で必ずGCスレッドが実行されるため、フリー領域が
慢性的に不足状態となることが防止され、常に高いパフ
ォーマンスを維持することができる。
【0093】図17はスレッドの優先度の切替に関する
カーネルの行う処理手順を示すフローチャートである。
優先度の値は複数段階あり、その値の設定は対応するA
PIの発行により行えるようにしている。ここでは、G
Cスレッドの2つの優先度を設定する際、高優先度の値
を設定するAPIが発行されると、図17の(A)に示
すように、その値をGCスレッドの高優先度の値として
設定する。同様に、低優先度の値を設定するAPIが発
行されると、(B)に示すように、その値をGCスレッ
ドの低優先度の値として設定する。また、GCスレッド
の高優先度の時間を設定するAPIが発行されると、同
図の(C)に示すように、その値を設定し、同様に低優
先度の時間を設定するAPIが発行されると、同図の
(D)に示すように、その値を設定する。
【0094】図17の(E)は、カーネルのスケジュー
ラに対する処理手順を示すフローチャートである。ここ
では、初期状態で、高優先度のキューにGCスレッドが
資源の割当を受けようとする待ち行列に入っているもの
とし、先ず、そのデータ(GCスレッドを識別するデー
タ)を高優先度のキューから取り出して低優先度のキュ
ーに挿入する(s51)。そしてスケジューラは、既に
設定されている低優先度時間だけ時間待ちを行い(s5
2)、続いて低優先度のキューからGCスレッドを識別
するデータを取り出して高優先度のキューに挿入する
(s53)。そしてスケジューラは、既に設定されてい
る高優先度時間だけ時間待ちを行う(s54)。以上の
処理を繰り返すことによって、スケジューラの動作によ
り図16(A)に示したようにGCスレッドの優先度が
交互に切り替わる。GCスレッド以外のスレッドについ
ては、そのスレッドの優先度に対応するキューの待ち行
列に応じて従来と同様のスケジューリングが行われ、図
16の(B)に示したように、コンテキストスイッチが
なされる。
【0095】図18は上記のGCスレッドの高優先度時
間をAPIによって設定可能とした場合について示して
いる。また、図19はそのAPIの呼び出しに応じたカ
ーネルにおける処理手順を示すフローチャートである。
このAPIの発行(システムコール)があれば、上記の
高優先度時間をそのAPIのパラメータによって設定
(登録)する。
【0096】図20は上記のGCスレッドの高優先度時
間を設定可能とするAPIを使うプログラムの例を示す
フローチャートである。先ず、ループの1回目の示すフ
ラグの状態を見る(s61)。最初はOFF状態である
ので、このフラグをONし(s62)、現在のフリー領
域を調べ、それを記録する(s63)。初めはGCの高
優先度時間と低優先度時間は予め定められたデフォルト
値である。スケジューラにより、一定時間停止した後
(s64)、今度は、前回に調べたフリー領域の容量と
現在のフリー領域の容量との大小比較を行い(s6
5)、フリー領域の容量が増加していれば、GCスレッ
ドの高優先度時間を短くし(s66→s67)、フリー
領域の容量が減少していれば、GCスレッドの高優先度
時間を長くする(s68)。以上の処理を繰り返す。こ
のことによって、GCの優先度が動的に自動調整され
る。
【0097】図21はGCスレッドの高優先度時間と低
優先度時間とによる周期を設定可能とした場合について
示している。(A)は周期が長い場合、(B)は短い場
合である。
【0098】図22は上記周期を設定可能とする周期設
定APIの呼び出しに応じたカーネルにおける処理手順
を示すフローチャートである。この周期設定APIの発
行があれば、現在設定されている高優先度時間および低
優先度時間の値を読み取り、その割合(比率)を計算す
る(s71→s72→s73)。その後、この周期設定
APIのパラメータで指定された周期の値に応じて高・
低優先度時間を再計算する(s74)。そして、その高
優先度時間および低優先度時間を設定更新する(s75
→s76)。
【0099】たとえば連続的なパルスを処理するよう
な、連続してCPU資源が必要なアプリケーションプロ
グラムの場合には、GCスレッドの周期が短くなるよう
に周期設定APIを発行し、通常のアプリケーションプ
ログラムのように断続的にCPU資源を利用するアプリ
ケーションプログラムでは周期が長くなるように周期設
定APIを発行する。
【0100】〔第3の実施形態〕図23および図24は
必要な時点でGCスレッドを実行し、且つリアルタイム
性を確保するようにした例であり、図23に示す例で
は、スレッド1とスレッド3がリアルタイム性の要求さ
れるスレッド、スレッド2がリアルタイム性の要求され
ないスレッド(ノーマルスレッド)である。また、スレ
ッド3がGCスレッドである。メモリのフリー領域が多
い通常状態で、スレッド2が実行されているときにイベ
ント1が発生すれば処理がスレッド1に移され、イベン
ト1の処理に起因するスレッド1の処理が終了すればス
レッド2へ戻る。同様に、イベント2が発生すればスレ
ッド3に処理が移る。もしスレッド2の処理によってフ
リー領域が予め定めた警告レベルまで低下したとき、ス
レッド2の処理を中断して、スレッド3のGCスレッド
を実行する。この処理によってフリー領域が確保される
とスレッド2の処理へ戻る。もしGCスレッドの処理途
中でイベント1が発生すれば、GCの途中であってもス
レッド1へ処理が移る。このようにリアルタイム性の要
求されるスレッドでは、一般に生成されるオブジェクト
の量が少なく、大体の予測が可能であるので、それに応
じて上記警告レベルを設定しておけば、スレッド2に処
理によって、フリー領域が大幅に減少してスレッド1や
スレッド3のリアルタイム性の要求される処理が実行で
きなくなるといった、不都合が回避できる。
【0101】図24は上記コンテキストスイッチの処理
を行うスケジューラの処理手順を示すフローチャートで
ある。先ずイベントの発生有無を検知し(s81)、イ
ベントが発生していれば、対応するリアルタイムスレッ
ドにコンテキストをスイッチする(s82)。イベント
が発生していなくて、フリー領域が警告レベルより多け
れば、ノーマルスレッドのうち優先度の最も高いもの
(図23に示した例ではスレッド2)にコンテキストを
スイッチする(s83→s84)。もしフリー領域が警
告レベルより少なくなれば、GCスレッドにコンテキス
トをスイッチする(s85)。
【0102】〔第4の実施形態〕図25はコンテキスト
スイッチの検出を依頼するAPIにおける強制コンテキ
ストスイッチの例を示している。先に示した例では、A
PI#Aを発行してから、API#Bを発行するまでの
間にコンテキストスイッチが発生したか否かが判るよう
にしたものであったが、この図25に示す例は、GCの
優先度を高・低交互に切り替える場合に、上記の排他制
御のためのAPIを発行している間にコンテキストスイ
ッチが発生することを予測して、無駄な処理を行わない
ようにしたものである。すなわち、高優先度GCスレッ
ドを実行中にAPI#A′を発行した際、API#A′
は高優先度時間が終了するまでに、必要な処理が完了す
るか否かを判定して、もし完了しなければ、その時点で
GCスレッドの優先度を低くする。図25に示した例で
は、GCスレッドの優先度が低くなったことにより、G
Cスレッド以外の中優先度のスレッドにコンテキストス
イッチされることになる。このことにより無駄な処理が
避けられる。
【0103】図26は上記API#A′の呼び出しに応
じたカーネルにおける処理手順を示すフローチャートで
ある。このAPIの呼び出しがあれば、コンテキストス
イッチフラグをクリアし(s91)、GCスレッドの高
優先度時間の残時間を取得する(s92)。そして、こ
のAPI#A′のパラメータである排他時間(API#
A′を発行してから、API#Bを発行するまでの時
間)と上記残時間との大小比較を行う(s93)。も
し、残時間が排他時間より短ければGCスレッドの優先
度を強制的に低くする(s94)。なお、API#B呼
び出しによる処理内容とコンテキストスイッチの処理内
容は図8および図9に示したものと同様である。
【0104】〔第5の実施形態〕図27はメモリ(ヒー
プ領域)使用量に応じてGCのアルゴリズムを切り替え
るための処理手順を示すフローチャートである。先ず、
メモリ使用量の値とそれに応じてどのアルゴリズムでG
Cを行うかを示すしきい値を設定し(s101)、メモ
リ使用量を取得する(s102)。これはヒープ領域内
に生成されたオブジェクトのメモリサイズの合計値であ
る。メモリ使用量がしきい値th1を超えた場合、GC
アルゴリズム(1)の手順でGCを行う(s103→s
104)。メモリ使用量がしきい値th2を超えたな
ら、GCアルゴリズム(2)の手順でGCを行う(s1
05→s106)。以下同様である。ここで、しきい値
th1はしきい値th2より小さく、GCアルゴリズム
(1)としては図16に示した、GCスレッドの優先度
の高低を交互に繰り返す処理を行う。しきい値の高いと
きに行うGCアルゴリズムとしては、図23に示した不
定期のGCを実行する。ここでGC自体は例えばマーク
&スイープ法により行う。通常、前者の場合にはCPU
負荷が軽く、専らこの方法によりGCが行われるが、ノ
ーマルスレッドによって短時間に大量のメモリが使用さ
れた場合には、図23に示した方法によりGCを重点的
に行う。このことによって常に広いフリー領域を確保
し、且つリアルタイム性を維持する。
【0105】〔第6の実施形態〕図28〜図30はオブ
ジェクト生成時のヒープ領域に対する新たなオブジェク
トの割り当てサイズを定めるための処理に関する図であ
る。一般にプログラムの実行により生成されるオブジェ
クトのサイズの分布は図28に示すように略正規分布を
示す。その中心値は32と64バイトの間に納まる程度
である。そこで、図29の(A)に示すように、この中
心値より大きなサイズで、且つ2の巾乗バイトの整数倍
のサイズをオブジェクトの割り当てサイズとする。従来
は同図の(B)に示すように、生成すべきオブジェクト
のサイズの量だけ任意に割り当てられていたため、その
オブジェクトの消去の際、不揃いのサイズのフラグメン
トが生じる。本願発明によれば、新たに生成されるオブ
ジェクトのサイズが上記固定値の整数倍であるため、メ
モリ領域の再利用性が高まり、メモリ使用効率が全体に
高まる。しかも場合によってはコンパクションが不要と
なる。
【0106】図30はそのオブジェクト生成時の処理手
順を示すフローチャートである。先ず、これまでに生成
したオブジェクトのサイズの発生頻度の分布データを求
める(s111)。既に前回までに分布データを求めて
いる場合には、それを更新する。続いて、今回割り当て
るべきメモリの空いている領域で、且つ生成しようとす
るオブジェクトのサイズより大きな領域を探し、上記の
固定サイズの整数倍のメモリ領域にオブジェクトを割り
当てる(s112→s113→s114→s115)。
上記2の巾乗バイトはシステム定数であるが、必ずしも
この値を固定サイズとする必要はなく、任意である。固
定サイズをもし大き過ぎる値に採れば、サイズの大きな
領域に小さなオブジェクトが割り当てられる場合が増え
ることになり、逆に、固定サイズを小さ過ぎる値に採れ
ば、オブジェクトの生成に再利用できない領域が増える
ことになる。分布データを基に上記固定サイズを決定す
る場合には、メモリの使用効率が最適となるように決定
すればよい。また、最適値でなくても、例えば2の巾乗
の値を採れば、アドレス決定がやり易くなるという効果
を奏する。
【0107】図31は上記オブジェクトのサイズの発生
頻度分布データを求めるプログラムモジュール、および
オブジェクトの割り当てサイズを決定するプログラムモ
ジュールの処理内容を示すフローチャートである。先
ず、オブジェクトのサイズの発生頻度分布データを求め
るプログラムモジュールをロードし(s121)、その
プログラムモジュールを起動する。すなわち一定時間が
経過するまで(たとえばアプリケーションプログラムの
起動・終了が10回行われるまで、またたとえば24時
間経過するまで)、生成された各オブジェクトのサイズ
をサイズ毎に計数し、その分布データを求める(s12
2→s123)。その後、その分布データをシステムに
登録し(s124)、オブジェクトのサイズの発生頻度
分布データを求めるプログラムモジュールをアンロード
する(s125)。続いて固定サイズを決定するプログ
ラムモジュールをロードし(s126)、そのプログラ
ムモジュールを実行する。すなわちシステムの登録され
た分布データを取得し、その分布中心値より大きなサイ
ズで、且つたとえば2の巾乗バイトを固定サイズとして
決定し、その値をシステムに登録する(s127→s1
28)。その後、固定サイズを決定するプログラムモジ
ュールをアンロードする(s129)。
【0108】このように、一度オブジェクトのサイズの
分布が検知された後、および固定サイズが決定された後
は、それらのためのプログラムモジュールをアンロード
することによって、メモリ領域とCPUパワーの無駄を
無くす。
【0109】〔第7の実施形態〕図49は上記固定サイ
ズをAPIによって設定する例を示している。図に示す
ように、固定サイズ設定処理では、固定サイズを引数と
して固定サイズ設定APIを呼び出す。呼び出されたA
PIでは、引数を固定サイズとしてシステムに登録す
る。オブジェクト生成時にはオブジェクトのサイズと固
定サイズを比較し(s211)、固定サイズ以下であれ
ば、ヒープ上の固定サイズの空き領域を探し、見つかっ
た領域をオブジェクトに割り当てる(s212→s21
3)。固定サイズを超える場合は、ヒープ上のオブジェ
クトサイズより大きな空き領域を探し、見つかった領域
をオブジェクトに割り当てる(s214→s215)。
【0110】〔第8の実施形態〕図50は上記固定サイ
ズをAPIによって設定する他の例を示している。図5
0に示すように、この例では、まずオブジェクトサイズ
の分布データをオブジェクトサイズ分布設定APIを呼
び出して設定する。この分布データは予め所定時間所定
のアプリケーションを実行して測定したものである。オ
ブジェクトサイズ分布設定APIは呼び出しに応答し
て、引数をオブジェクトサイズ配列変数にセットする。
続いて、その中心値より大きなサイズで、且つ2の巾乗
バイトを固定サイズとして決定し、これを固定サイズ変
数にセットする。
【0111】〔第9の実施形態〕図51〜図53はオブ
ジェクトの割り当てサイズを予めいくつかのサイズに定
めておく例を示す図である。図51は事前に所定のアプ
リケーションを所定時間実行して測定したオブジェクト
サイズの分布および分割領域の集合を表している。予め
ヒープ領域を分割する場合、実際のオブジェクトサイズ
の分布を測定し、その分布に近くなるように、分割サイ
ズと数を定める。たとえば、ヒープ領域が2MBの場
合、分割サイズ指定変数を 集合No.n バイトk 個数m 1 64 5000 2 256 10000 3 1k 10000 4 4k 5000 5 32k 500 とする。
【0112】上記分割サイズを設定する場合、図52に
示すように、分割サイズ設定APIを呼び出して行う。
呼び出された分割サイズ設定APIは図53に示すよう
に、引数を分割サイズ指定変数にセットし、それに応じ
てヒープ領域を分割する。すなわち、まずループカウン
タnを0とし(s221)、n番目の分割サイズ指定変
数からサイズkと個数mを取得する(s222)。続い
てヒープ領域からサイズkの領域をm個に分割し(m個
分確保し)、リストに登録する(s223)。この処理
をループカウンタnを1インクリメントしながら繰り返
し、全てのサイズの分割を行う(s225→s222→
・・・)。なお、上記の例で、サイズが32kバイトを
超えるオブジェクトを生成する場合は、ヒープ領域内の
上記分割された領域以外の領域に割り当てる。
【0113】〔第10の実施形態〕図32〜図34はオ
ブジェクトの寿命を考慮してGCの効率を高めるための
処理を行う例を示す図である。図32の(A)に示す例
では、ヒープ領域として、短寿命のオブジェクトを生成
する領域と長寿命のオブジェクトを生成する領域とに分
け、クラスは長寿命領域に確保する。尚、クラスはその
他の固定領域に確保してもよい。そして、クラスにはオ
ブジェクトを生成するためのテンプレートとしての定義
情報以外に、生成するオブジェクトの寿命を示す寿命フ
ラグを持たせる。この寿命フラグはクラスの生成時に自
動的に生成する。同図の(B)は従来のヒープ領域に対
するオブジェクトの割り当て例を示す図である。
【0114】図33はオブジェクトの消去の手順を示す
フローチャートである。同図に示すようにオブジェクト
を消去した際に、そのオブジェクトの寿命が長いか短い
かを判定し、寿命が短ければ、そのオブジェクトのクラ
スの寿命フラグを短寿命にセットする。例えばオブジェ
クトの領域内にそのオブジェクトが生成された時刻を格
納しておき、そのオブジェクトを消去する時刻との差に
よって、そのオブジェクトの寿命を求める。上記時刻は
例えばGCの回数を単位としてもよい。
【0115】図34はオブジェクトの生成の処理手順を
示すフローチャートである。クラスの寿命フラグが短寿
命を示していれば、短寿命領域にオブジェクトを生成
し、そうでなけば、長寿命領域にオブジェクトを生成す
る。
【0116】このようにオブジェクトの寿命に応じてメ
モリの割り当て領域を区分することによって、長寿命領
域ではフラグメントを大幅に低下でき、メモリの使用効
率が向上する。また、例えば寿命領域についてGCを重
点的に行うことにより、GCに消費されるCPUパワー
を小さくすることができる。
【0117】〔第11の実施形態〕次に、マーク&スイ
ープ法によるインクリメンタルGCについて図35〜4
8を参照して説明する。
【0118】図35はマーク&スイープ法によるGCの
全体の処理手順を示すフローチャートである。このGC
はマークテーブルのクリア、上記ツリー探索によるマー
ク付与およびオブジェクトの消去(スイープ)を繰り返
し行う。
【0119】図36は図35における「マーククリア」
の処理内容を示すフローチャートである。この処理はマ
ークテーブルの内容を一旦クリアするものであり、まず
マークテーブルの先頭にポインタを移動し(s13
1)、その位置のマークをクリアし(s132)、次の
マークの位置までポインタを移動させる(s133)。
この処理を全てのマークについて繰り返す(s134→
s132→・・・)。
【0120】図37は図35における「オブジェクトの
消去」の処理内容を示すフローチャートである。先ず、
マークテーブルの先頭にポインタを移動させ(s14
1)、マークの有無を検出し、マークされていなけれ
ば、そのマークテーブル上の位置に相当するオブジェク
トのヒープ領域内の位置を計算し、該当のオブジェクト
を消去する(s142→s143→s144)。続い
て、マークテーブルのポインタを次に移動して、同様の
処理を繰り返す(s145→s146→s142→・・
・)。これによりマークテーブルにマークされているオ
ブジェクトを残し、その他のオブジェクトをヒープ領域
から消去する。
【0121】説明を容易にするために、先ず前提となる
マーク&スイープ法におけるマーク付与について説明す
る。
【0122】図38はツリー探索によるマーク付与の手
順を示す図である。(A)に示すように、ルートノード
10から各ノードへ、ツリー構造で表される参照関係を
辿って、参照関係にあるノード(オブジェクト)にマー
クを付与する。具体的にはマークテーブル上の該当位置
のビットをセットする。このツリー構造は、たとえば或
るオブジェクトが他のどのオブジェクトを参照している
かを示す、オブジェクト内に設けられる変数の内容によ
って構成され、このオブジェクトの参照関係を辿ること
が、すなわちツリーを辿ることである。
【0123】(A)のように、ノード番号3までマーク
付与を行った時点で割込が発生し、その割込処理によっ
て、(B)のように、ルートノードからノード番号7で
表されるオブジェクトへの参照関係が絶たれて、ノード
番号2で表されるオブジェクトからノード番号7で表さ
れるオブジェクトが参照される関係となれば、割込処理
が終了してGCスレッドに戻って、マーク付与を再開し
たとき、ルートノードからノード番号7で表されるオブ
ジェクトへの参照関係が絶たれているので、(C)に示
すようにポインタをルートノードに戻して次の参照関係
にあるノード番号8に進むことになる。この時点ではノ
ード番号5,6に対してはマーク付与されない。そこ
で、参照関係の変更のあったオブジェクトについては、
そのオブジェクトからツリーを辿ってそのオブジェクト
から参照されているオブジェクトについてマークを付与
する必要がある。
【0124】図39は「オブジェクトの生成」の処理内
容を示すフローチャートである。まずカーネルに対して
システムのロックを起動し(s151)、ヒープ領域内
の空いている領域を探し(s152)、生成しようとす
るオブジェクトのサイズより大きな領域に対して必要な
サイズを割り当て(s153→s154)、参照変更の
マーク付与(ライトバリア)を行い(s155)、シス
テムをアンロックする(s156)。
【0125】図40は上記「参照変更のマーク付与」の
処理手順を示すフローチャートである。先ず、参照変更
されたオブジェクトからマークテーブル上の位置を計算
し、該当のマークがWhite であるか否かを判定する。こ
のWhite マークはたとえば00の2ビットで表され、未だ
マークされていない状態を意味する。もし、White マー
クでなければ、すでにマークされているので、そのまま
処理を終了する。White マークであれば、それをGrayに
マークする。このGrayマークはたとえば01の2ビットで
表され、参照変更のあったオブジェクトであることを意
味する。なお、オブジェクトからマークの位置を計算す
る際、たとえばオブジェクトのアドレスを1/8してオ
フセットを加えることによって行うか、オブジェクトの
通し番号により計算する。
【0126】図41は「ツリー探索によるマーク付与」
の処理手順を示すフローチャートである。まず、ツリー
を辿るためのポインタをツリーのルートノードに移動さ
せ(s161)、新たに生成するオブジェクトに対応す
るマークを付与する(s162)。続いてツリーを辿っ
て、ポインタを次のオブジェクトへ移動させ(s16
3)、この処理をツリーの最後まで繰り返す(s164
→s162→・・・)。その後、各スレッドスタックの
先頭へポインタを移動させ(s165)、スタックにあ
るオブジェクトに対応するマークを付与する(s16
6)。その後、ポインタをスタックの次に移動させて
(s167)、この処理をツリーの最後まで繰り返す
(s168→s166→・・・)。その後、スレッドス
タックの次に移り(s169)、同様の処理をスレッド
スタックの最後まで繰り返す(s170→s166→・
・・)。さらにこのスレッドスタックについての処理を
すべてのスレッドスタックについて行う(s171→s
172→s165→・・・)。この一連のツリー探索に
おいて、Grayマークが途中で1度でも検出された場合、
もう一度ルートノードから探索およびマーク付与を行う
(s173→s161→・・・)。
【0127】図42は図41における「オブジェクトに
対応するマーク付与」の処理手順を示すフローチャート
である。この処理は、生成されているオブジェクトから
マークテーブル上の位置を計算し、Black マークを付与
する。このBlack マークはたとえば1xの2ビットで表さ
れ、マークされている状態を意味する。
【0128】上述したようなマーク付与の方法では、そ
の途中で割込がかかってオブジェクトの参照関係が変化
すると、Grayマークが付与されるので、ツリー探索を繰
り返さなければならない。場合によってはいつまでたっ
てもマーク付与が完了せずに、GCがいつまでも行われ
ないといった事態に陥る。
【0129】図43は上記の問題を解消するための「ツ
リー探索によるマーク付与」の手順を示す図である。
(A)は図38に示した(A)の状態で割込がかかって
参照関係が変化したときの状態を示す。このように、ノ
ード番号3までマーク付与を行った時点で割込が発生
し、その割込処理によって、ルートノードからノード番
号7で表されるオブジェクトへの参照関係が絶たれて、
ノード番号2で表されるオブジェクトからノード番号7
で表されるオブジェクトが参照される関係となれば、参
照先のノード番号7表すデータをマークスタックに積
む。その後、割込処理が終了してGCスレッドに戻っ
て、マーク付与を再開したとき、ルートノードからノー
ド番号7で表されるオブジェクトへの参照関係が絶たれ
ているので、(B)に示すようにポインタをルートノー
ドに戻して次の参照関係にあるノード番号8をマークす
る。この時点で一通りのツリー探索を終了し、その後
は、(C)に示すようにマークスタックの内容によって
示されるノードからツリーを辿って参照関係にあるオブ
ジェクトについてマークを付与する。これにより(D)
に示すように、参照関係にある全てのオブジェクトにつ
いてのマーク付与が完了する。
【0130】図44は「参照変更のマーク付与」の処理
手順を示すフローチャートである。このように、参照変
更されたオブジェクトを示すデータを上記マークスタッ
クに積む。なお、オブジェクトの生成の処理は図39に
示したもの変わらない。
【0131】図45は、「ツリー探索によるマーク付
与」の処理手順を示すフローチャートである。ステップ
s161〜s172の部分は図41に示したフローチャ
ートのステップs161〜s172と同じである。この
図45に示す例では、全スレッドスタックについてのツ
リー探索を完了した後、マークスタックからデータを取
り出し(s181→s182)、そのデータで示される
オブジェクトに対応するマーク付与を行い(s18
3)、そのオブジェクトからツリーを辿ってツリーの最
後まで、参照関係にあるオブジェクトのマーク付与を行
う(s184→s185→s183→・・・)。この処
理をマークスタックが空になるまでマークスタックのポ
インタを更新しながら繰り返す(s181→s182→
・・・)。
【0132】図46は図45における「オブジェクトに
対応するマーク付与」の処理手順を示すフローチャート
である。この処理は、生成されているオブジェクトから
マークテーブル上の位置を計算し、マークを付与する。
【0133】このようにマークスタックを用いることに
よって、ツリー探索をルートノードから再開する必要が
なくなり、マーク付与に要する全体の処理時間を大幅に
短縮化できる。
【0134】図47および図48は上記マークスタック
を用いてマーク付与を行う場合に、更に無駄な処理時間
を無くすようするフローチャートである。図47は上記
「参照変更のマーク付与」の処理手順を示すフローチャ
ートである。先ず、参照変更されたオブジェクトからマ
ークテーブル上の位置を計算し、該当のマークがWhite
であるか否かを判定する(s191→s192)。この
White マークは上述したように未だマークされていない
状態を意味する。もし、White マークでなければ、すで
にマークされているので、そのまま処理を終了する。Wh
ite マークであれば、それをGrayにマークする(s19
3)。上述したようにこのGrayマークは参照変更のあっ
たオブジェクトであることを意味する。続いてマークス
タックに参照先のオブジェクトを示すデータを積む(s
194)。
【0135】図48は上記「オブジェクトに対応するマ
ーク付与」の処理手順を示すフローチャートである。こ
の処理は、生成されているオブジェクトからマークテー
ブル上の位置を計算し、Black マークを付与する。この
Black マークは上述したように、マークされている状態
を意味する。なお、「オブジェクトの生成」の処理は図
39に示したものと同様である。
【0136】このように、参照変更のあったオブジェク
トについてマークを付与する場合、そのオブジェクトが
初めて検出されたオブジェクトである場合にのみマーク
を付与するようにしたため、マークスタックの内容によ
るツリー探索に要する時間およびマークスタックの読み
出しに要する時間を短縮化できる。
【0137】なお、参照変更のあったオブジェクトにつ
いてのマークを記憶するのはスタックでなくてもよく、
FIFOのバッファを用いてもよい。
【0138】また、実施形態ではマークテーブルにマー
クを付与するようにしたが、オブジェクトの内部にマー
ク用の情報を設けて、オブジェクトに直接マークを付与
するようにしてもよい。
【0139】
【発明の効果】請求項1,18,25に係る発明によれ
ば、コンピュータ資源をロックのメカニズムとして使用
せずに、処理の排他性が保証される。すなわち指定メモ
リ領域に対するデータの書き込み有無検出の開始を依頼
するAPIの呼び出しから指定メモリ領域に対するデー
タの書き込み有無検出の終了を依頼するAPIの呼び出
しまでの間で行われたスレッドAの処理の途中で、他の
スレッドによる指定メモリ領域に対する書き込みがあっ
たか否かが、そのスレッドAで分かる。書き込みが行わ
れていなければ、指定メモリ領域の排他性が保たれてい
る。もし書き込みが行われていれば、スレッドAのその
間の処理を無効にして、例えばその処理を再度実行する
などの方法によって高い応答性を保ちながら、排他制御
を行うことができるようになる。
【0140】請求項2,19,26に係る発明によれ
ば、GCスレッドの優先度を交互に切り替えることによ
って、GCスレッドの優先度が低い状態では、他のスレ
ッドによるアプリケーションが優先され、動作するアプ
リケーションが無い場合にはGCスレッドが自動的に動
かされ、メモリのフリー領域が自動的に拡大される。G
Cスレッドの優先度が高い状態では、他のスレッドは実
行されないが、優先度の低い状態で、他のスレッドによ
り、GCが継続して行われないことによってフリー領域
が慢性的に不足状態となることが防止され、常に高いパ
フォーマンスを維持することができる。
【0141】請求項3に係る発明によれば、APIを呼
び出す側で、たとえばシステムの応答性を重視する場合
には優先度の高い状態の時間を短くし、システム全体の
スループットを重視する場合には優先度の高い状態の時
間を長くする、といった設定が可能となり、システムの
ニーズに応じて性能を変えることができるようになる。
【0142】請求項4に係る発明によれば、たとえば連
続的なパルスを処理するような、連続してCPU資源が
必要なアプリケーションプログラムの場合には、周期を
短くし、通常のアプリケーションプログラムのような断
続的にCPU資源を利用するアプリケーションプログラ
ムでは周期を長くすることによって、コンテキストスイ
ッチなどのオーバヘッドを小さくすることができる。
【0143】請求項5に係る発明によれば、動的にガベ
ージコレクションの優先度の高い状態の時間を調整する
ことになり、どのようなアプリケーションプログラムで
もフリー領域が足りなくなるといった状況を回避するこ
とができ、且つフリー領域が十分確保できるシステムや
アプリケーションプログラムでは、ガベージコレクショ
ンを最低限に抑えることができる。
【0144】請求項6,20,27に係る発明によれ
ば、リアルタイム性の要求されないスレッドがオブジェ
クトを生成して、メモリのフリー領域の量が例えばリア
ルタイム性の要求されるスレッドが生成するオブジェク
トの量の近傍にまで減少した時に、その時点でスケジュ
ーリングが行われ、GCスレッドが実行されるため、フ
リー領域が直ちに確保され、リアルタイム性の要求され
るスレッドの実行可能な環境を常に維持することができ
る。
【0145】請求項7,21,28に係る発明によれ
ば、フリー領域または使用領域の量に応じてGCの手順
を切り替えることによって、常に効率的なGCが可能と
なる。
【0146】請求項8,22,29に係る発明によれ
ば、多くのオブジェクトが先に使用されていたメモリ領
域を再利用できることになり、このことにより、コンパ
クションを行わなくてもメモリの使用効率が向上するこ
とになる。また、コンパクションのためのCPUパワー
が不要となり、小規模のCPUで応答性の高いシステム
を構成することができる。
【0147】請求項9,10に係る発明によれば、一度
オブジェクトのサイズの分布が検知された後は、また、
オブジェクトの割り当てサイズが決定された後は、メモ
リ領域とCPUパワーの無駄がなくなる。
【0148】請求項11,12,30に係る発明によれ
ば、多くのオブジェクトがメモリのヒープ領域を無駄な
く再利用できることになり、コンパクションを行わなく
てもメモリの使用効率が向上する。また、コンパクショ
ンのためのCPUパワーが不要となり、小規模のCPU
で応答性の高いシステムを構成することができる。
【0149】請求項13,14,31,32に係る発明
によれば、別の装置、システム、およびアルゴリズム
で、メモリのヒープ領域内に割り当てられるオブジェク
トのサイズの分布を測定して、決定したオブジェクトの
割り当てサイズの基になる固定サイズを登録することが
でき、CPUパワーとメモリの使用効率を向上させるこ
とができる。
【0150】請求項15,23,33に係る発明によれ
ば、寿命データに基づいて、異なったヒープ領域にオブ
ジェクトを生成することによって、長寿命のオブジェク
トと短寿命のオブジェクトが異なった領域に生成される
ため、長寿命領域でのフラグメントが大幅に低下し、メ
モリの使用効率が向上する。また、GCを行う場合に、
短寿命のオブジェクトが生成される領域を重点的に処理
することによって、GCに消費されるCPUパワーを低
減することができるようになる。
【0151】請求項16,24,34に係る発明によれ
ば、スイープやマークテーブルのクリアを行うときに、
他のスレッドを止めなくても、スイープ中またはマーク
テーブルのクリア中に他のスレッドにより新たなオブジ
ェクトが生成されたり、オブジェクト間の参照関係が変
更されても、マークテーブルを基にスイープを行う際
に、上記の新たに生成されたオブジェクトを消去してし
まうことがない。そのため、インクリメンタルにGCを
行うことができ、また、自由に中断ができるので、リア
ルタイム性が向上する。また、常にバックグラウンドで
GCスレッドを動作させておくことが可能となり、メモ
リの使用効率を常に高く維持できる。しかも、ツリー探
索によるマーク付与に要する時間が短縮化され、割込に
よって、いつまでもマーク付与が完了しない、といった
不都合が防止でき、GCを確実に実行できる。
【0152】請求項17に係る発明によれば、オブジェ
クトの参照関係の変更時の参照先が既にマークされてい
る場合に、第2のデータを重ねて記憶することがなくな
り、第1のデータの探索およびマークに要する時間をそ
の分短縮化できる。
【図面の簡単な説明】
【図1】実施形態に係る装置のハードウエアの構成を示
すブロック図
【図2】同装置のソフトウエアの構成を示すブロック図
【図3】オブジェクト間の参照関係を示すツリーおよび
各スレッドのスタックとの関係を示す図
【図4】ソフトウエアの機能ブロック図
【図5】コンパクションの作用を説明するための図
【図6】コンテキストスイッチの有無によるスレッドの
処理内容の変化の例を示す図
【図7】排他制御の処理手順を示すフローチャート
【図8】コンテキストスイッチ発生有無検出のAPIに
関する処理手順を示すフローチャート
【図9】コンテキストスイッチの処理手順を示すフロー
チャート
【図10】コンパクションの処理手順を示すフローチャ
ート
【図11】複写法によるGCの処理手順を示すフローチ
ャート
【図12】複写法GCにおける排他制御の処理手順を示
すフローチャート
【図13】複写法GCにおける他の排他制御の処理手順
を示すフローチャート
【図14】図13における排他制御用APIに関する処
理手順を示すフローチャート
【図15】図13における排他制御用APIに関する処
理手順を示すフローチャート
【図16】GCスレッドの優先度の自動切替の例を示す
【図17】スレッドの優先度値および優先度時間の切替
に関するフローチャート
【図18】GCスレッドの高優先度時間を変更した例を
示す図
【図19】GCスレッドの高優先度時間を変更可能とす
るためのフローチャート
【図20】GCスレッドの高優先度時間を自動変更する
例を示すフローチャート
【図21】GCスレッドの高・低優先度時間の切り替え
周期を変更した例を示す図
【図22】GCスレッドの高・低優先度時間の切り替え
周期を変更するためのフローチャート
【図23】不定期なGC処理の例を示す図
【図24】図21に対応するフローチャート
【図25】排他制御APIによるGCスレッドの優先度
の強制変更の例を示す図
【図26】排他制御APIによるGCスレッドの優先度
を強制変更するためのフローチャート
【図27】GCのアルゴリズムを切り替える処理手順を
示すフローチャート
【図28】生成されるオブジェクトのサイズの分布の例
を示す図
【図29】オブジェクトのメモリの割り当てサイズの例
を示す図
【図30】オブジェクト生成の処理手順を示すフローチ
ャート
【図31】オブジェクトサイズの分布検知および固定サ
イズの決定処理に関するフローチャート
【図32】ヒープ領域の構成を示す図
【図33】オブジェクト消去の手順を示すフローチャー
【図34】オブジェクト生成の手順を示すフローチャー
【図35】マーク&スイープ法によるGCの手順を示す
フローチャート
【図36】マーククリアの処理手順を示すフローチャー
【図37】オブジェクト消去の処理手順を示すフローチ
ャート
【図38】ツリー探索によるマーク付与の例を示す図
【図39】図38に対応するフローチャート
【図40】図38に対応するフローチャート
【図41】図38に対応するフローチャート
【図42】図38に対応するフローチャート
【図43】ツリー探索によるマーク付与の例を示す図
【図44】図43に対応するフローチャート
【図45】図43に対応するフローチャート
【図46】図43に対応するフローチャート
【図47】参照変更のマーク付与の他の処理手順を示す
フローチャート
【図48】オブジェクトに対応するマーク付与の他の処
理手順を示すフローチャート
【図49】固定サイズの設定とオブジェクト生成に関す
る処理手順を示すフローチャート
【図50】オブジェクトサイズ分布設定に関する処理手
順を示すフローチャート
【図51】オブジェクトサイズの分布と分割サイズの例
を示す図
【図52】ヒープ領域を所定サイズで分割する処理とオ
ブジェクト生成に関する処理手順を示すフローチャート
【図53】ヒープ領域を所定サイズで分割する処理に関
する処理手順を示すフローチャート
【図54】従来のマーク&スイープ法によるGCの手順
を示すフローチャート
───────────────────────────────────────────────────── フロントページの続き (72)発明者 小中 義治 京都府京都市右京区花園土堂町10番地 オ ムロン株式会社内 (72)発明者 栗林 博 京都府京都市右京区花園土堂町10番地 オ ムロン株式会社内

Claims (34)

    【特許請求の範囲】
  1. 【請求項1】 或るスレッドからの、指定メモリ領域に
    対するデータの書き込み有無検出の開始を依頼するアプ
    リケーションプログラムインタフェースの呼び出しに応
    答して、その書き込み有無を示すフラグを書き込み無し
    の状態に設定する手段と、 前記指定メモリ領域に対するデータの書き込みがあった
    とき、前記フラグを書き込み有りの状態に設定する手段
    と、前記スレッドからの、指定メモリ領域に対するデー
    タの書き込み有無検出の終了を依頼するアプリケーショ
    ンプログラムインタフェースの呼び出しに応答して、前
    記フラグの状態に応じた値を前記スレッドに返す手段と
    を備えたことを特徴とするプログラム制御装置。
  2. 【請求項2】 メモリのヒープ領域内の、どのオブジェ
    クトからも参照されないオブジェクトを検出し、当該オ
    ブジェクトのメモリ領域を他のオブジェクトのメモリ割
    り当て可能なフリー領域として解放するガベージコレク
    ションスレッドをインクリメンタルに行う手段と、スレ
    ッドの優先度に応じて各スレッドを時分割に実行するた
    めのスケジューリングを行う手段と、前記ガベージコレ
    クションスレッドの優先度をガベージコレクションスレ
    ッド以外のスレッドの優先度より高い状態と低い状態と
    に交互に変更する手段とを設けたことを特徴とするプロ
    グラム制御装置。
  3. 【請求項3】 前記ガベージコレクションスレッドの優
    先度の高い状態の時間をアプリケーションプログラムイ
    ンタフェースの呼び出しによって設定する手段を設けた
    ことを特徴とする請求項2に記載のプログラム制御装
    置。
  4. 【請求項4】 前記ガベージコレクションスレッドの優
    先度の高い状態と低い状態による周期をアプリケーショ
    ンプログラムインタフェースの呼び出しによって設定す
    る手段を設けたことを特徴とする請求項2に記載のプロ
    グラム制御装置。
  5. 【請求項5】 前記フリー領域の容量の時間変化を検出
    する手段と、前記フリー領域の容量が低下傾向のとき、
    前記ガベージコレクションスレッドの優先度の高い状態
    の時間を長くする手段を設けたことを特徴とする請求項
    2または3に記載のプログラム制御装置。
  6. 【請求項6】 イベントの発生に応じてリアルタイムス
    レッドを実行させ、該リアルタイムスレッドの中断時ま
    たは終了時に非リアルタイムスレッドを実行させる手段
    を備えたプログラム制御装置において、 前記非リアルタイムスレッドの1つは、メモリのヒープ
    領域内の、どのオブジェクトからも参照されないオブジ
    ェクトを検出し、当該オブジェクトのメモリ領域を他の
    オブジェクトのメモリ割り当て可能なフリー領域として
    解放するガベージコレクションをインクリメンタルに行
    うガベージコレクションスレッドであり、当該ガベージ
    コレクションスレッド以外の非リアルタイムスレッドの
    実行によりヒープ領域内の前記フリー領域が所定の値ま
    で減少したとき、前記ガベージコレクションスレッドを
    実行する手段を設けたことを特徴とするプログラム制御
    装置。
  7. 【請求項7】 メモリのヒープ領域内の、どのオブジェ
    クトからも参照されないオブジェクトを検出し、当該オ
    ブジェクトのメモリ領域を他のオブジェクトのメモリ割
    り当て可能なフリー領域として解放する、手順の異なる
    複数通りのガベージコレクションスレッドを選択的に実
    行する手段と、前記フリー領域または前記オブジェクト
    の使用領域の量に基づいて、前記複数通りの手順のうち
    1つの手順のガベージコレクションスレッドを実行する
    手段を設けたことを特徴とするプログラム制御装置。
  8. 【請求項8】 メモリのヒープ領域内に割り当てられる
    オブジェクトのサイズの分布を検知する手段と、前記分
    布の中心より大きな固定サイズの整数倍を前記ヒープ領
    域に対する新たなオブジェクトの割り当てサイズに決定
    する手段とを設けたことを特徴とするメモリの割り当て
    装置。
  9. 【請求項9】 前記オブジェクトのサイズの分布を検知
    する手段は、システムの使用開始時にシステムに組み込
    まれ、前記オブジェクトのサイズの分布を検知した後に
    システムから切り離されるプログラムモジュールによる
    ものである請求項8に記載のメモリの割り当て装置。
  10. 【請求項10】 前記固定サイズを決定する手段は、シ
    ステムの使用開始時にシステムに組み込まれ、前記固定
    サイズが決定された後にシステムから切り離されるプロ
    グラムモジュールによるものである請求項8に記載のメ
    モリの割り当て装置。
  11. 【請求項11】 前記ヒープ領域内を予め複数のサイズ
    に分割するヒープ領域分割手段と、オブジェクト生成時
    に当該オブジェクトのサイズより大きく且つ最も小さな
    サイズの領域を割り当てる手段を設けたことを特徴とす
    る請求項8に記載のメモリの割り当て装置。
  12. 【請求項12】 前記ヒープ領域分割手段は、前記複数
    のサイズの分割数と各サイズを引数とするアプリケーシ
    ョンプログラムインタフェースの呼び出しによって、前
    記ヒープ領域を分割するものである請求項11に記載の
    メモリの割り当て装置。
  13. 【請求項13】 メモリのヒープ領域内にオブジェクト
    を生成する手段を備えたプログラム制御装置において、 固定サイズの整数倍を前記ヒープ領域内に対するオブジ
    ェクトの割り当てサイズに決定する手段と、アプリケー
    ションプログラムインタフェースの呼び出しによって前
    記固定サイズを設定する手段とを設けたことを特徴とす
    るメモリの割り当て装置。
  14. 【請求項14】 メモリのヒープ領域内にオブジェクト
    を生成する手段を備えたプログラム制御装置において、 固定サイズの整数倍を前記ヒープ領域内に対するオブジ
    ェクトの割り当てサイズに決定する手段と、 前記ヒープ領域内に割り当てられるオブジェクトのサイ
    ズの分布をアプリケーションプログラムインタフェース
    の呼び出しによって設定する手段と、該アプリケーショ
    ンプログラムインタフェースの呼び出しに応答して、前
    記分布の中心より大きな値を前記固定サイズとして設定
    する手段とを設けたことを特徴とするメモリの割り当て
    装置。
  15. 【請求項15】 テンプレートとしてのクラスと該クラ
    スにより生成されるオブジェクトをメモリのヒープ領域
    内に割り当てるメモリの割り当て装置において、 前記クラスからオブジェクトが生成された時刻に相当す
    るデータを記憶し、前記オブジェクトを削除する際に、
    当該オブジェクトの寿命を検出し、該寿命のデータをク
    ラスに設け、当該クラスからオブジェクトを生成する際
    に、前記寿命のデータに基づいて、前記ヒープ領域に対
    するオブジェクトの生成領域を分ける手段を設けたこと
    を特徴とするメモリの割り当て装置。
  16. 【請求項16】 メモリのヒープ領域内の、他のオブジ
    ェクトから参照されるオブジェクトを検出して当該参照
    の有無状態を記憶する参照情報記憶手段と、当該参照情
    報記憶手段の記憶内容を基に、どのオブジェクトからも
    参照されないオブジェクトのメモリ領域を他のオブジェ
    クトのメモリ割り当て可能な領域として解放するオブジ
    ェクト消去手段を設けたメモリ割り当て装置において、 前記参照情報記憶手段は、オブジェクトの参照関係を表
    すツリー構造の第1のデータと、オブジェクトの参照関
    係の変更された部分のオブジェクトを示す第2のデータ
    とを記憶し、第1のデータを探索して参照されているオ
    ブジェクトを検出し、第2のデータを読み出すとともに
    該データを基に第1のデータを探索して、参照されてい
    るオブジェクトを検出する、参照オブジェクト検出手段
    を設けたことを特徴とするメモリの割り当て装置。
  17. 【請求項17】 前記参照オブジェクト検出手段は、前
    記オブジェクトの参照関係の変更時の参照先が前記第1
    のデータの探索により初めて検出されたオブジェクトで
    あるときにのみ、参照先の当該オブジェクトを前記第2
    のデータとして記憶するものである請求項16に記載の
    メモリの割り当て装置。
  18. 【請求項18】 或るスレッドからの、指定メモリ領域
    に対するデータの書き込み有無検出の開始を依頼するア
    プリケーションプログラムインタフェースの呼び出しに
    応答して、その書き込み有無を示すフラグを書き込み無
    しの状態に設定するステップと、 前記指定メモリ領域に対するデータの書き込みがあった
    とき、前記フラグを書き込み有りの状態に設定するステ
    ップと、前記スレッドからの、指定メモリ領域に対する
    データの書き込み有無検出の終了を依頼するアプリケー
    ションプログラムインタフェースの呼び出しに応答し
    て、前記フラグの状態に応じた値を前記スレッドに返す
    ステップとから成るプログラム制御方法。
  19. 【請求項19】 メモリのヒープ領域内の、どのオブジ
    ェクトからも参照されないオブジェクトを検出し、当該
    オブジェクトのメモリ領域を他のオブジェクトのメモリ
    割り当て可能なフリー領域として解放するガベージコレ
    クションスレッドをインクリメンタルに行うステップ
    と、スレッドの優先度に応じて各スレッドを時分割に実
    行するためのスケジューリングを行うステップと、前記
    ガベージコレクションスレッドの優先度をガベージコレ
    クションスレッド以外のスレッドの優先度より高い状態
    と低い状態とに交互に変更するステップとから成るプロ
    グラム制御方法。
  20. 【請求項20】 イベントの発生に応じてリアルタイム
    スレッドを実行させ、該リアルタイムスレッドの中断時
    または終了時に非リアルタイムスレッドを実行させるス
    テップを備えたプログラム制御方法において、 前記非リアルタイムスレッドの1つは、メモリのヒープ
    領域内の、どのオブジェクトからも参照されないオブジ
    ェクトを検出し、当該オブジェクトのメモリ領域を他の
    オブジェクトのメモリ割り当て可能なフリー領域として
    解放するガベージコレクションをインクリメンタルに行
    うガベージコレクションスレッドであり、当該ガベージ
    コレクションスレッド以外の非リアルタイムスレッドの
    実行によりヒープ領域内の前記フリー領域が所定の値ま
    で減少したとき、前記ガベージコレクションスレッドを
    実行するステップを備えたことを特徴とするプログラム
    制御方法。
  21. 【請求項21】 メモリのヒープ領域内の、どのオブジ
    ェクトからも参照されないオブジェクトを検出し、当該
    オブジェクトのメモリ領域を他のオブジェクトのメモリ
    割り当て可能なフリー領域として解放するとともに、前
    記フリー領域または前記オブジェクトの使用領域の量に
    基づいて、手順の異なる複数通りのガベージコレクショ
    ンスレッドを選択的に実行することを特徴とするプログ
    ラム制御方法。
  22. 【請求項22】 メモリのヒープ領域内に割り当てられ
    るオブジェクトのサイズの分布を検知し、その分布中心
    より大きな固定サイズの整数倍を前記ヒープ領域に対す
    る新たなオブジェクトの割り当てサイズとすることを特
    徴とするメモリの割り当て方法。
  23. 【請求項23】 テンプレートとしてのクラスと該クラ
    スにより生成されるオブジェクトをメモリのヒープ領域
    内に割り当てるメモリの割り当て方法において、 前記クラスからオブジェクトが生成された時刻に相当す
    るデータを記憶し、前記オブジェクトを削除する際に、
    当該オブジェクトの寿命を検出し、該寿命のデータをク
    ラスに設け、当該クラスからオブジェクトを生成する際
    に、前記寿命のデータに基づいて、前記ヒープ領域に対
    するオブジェクトの生成領域を分けることを特徴とする
    メモリの割り当て方法。
  24. 【請求項24】 メモリのヒープ領域内の、他のオブジ
    ェクトから参照されるオブジェクトを検出して当該参照
    の有無状態を記憶し、当該記憶内容を基に、どのオブジ
    ェクトからも参照されないオブジェクトのメモリ領域を
    他のオブジェクトのメモリ割り当て可能な領域として解
    放するメモリ割り当て方法において、 オブジェクトの生成時にオブジェクトの参照関係を表す
    ツリー構造の第1のデータを記憶し、参照関係の変更時
    に、オブジェクトの参照関係の変更された部分のオブジ
    ェクトを示す第2のデータを記憶し、第1のデータを探
    索して参照されているオブジェクトを検出し、第2のデ
    ータを読み出すとともに該データを基に第1のデータを
    探索して、参照されているオブジェクトを検出すること
    を特徴とするメモリの割り当て方法。
  25. 【請求項25】 或るスレッドからの、指定メモリ領域
    に対するデータの書き込み有無検出の開始を依頼するア
    プリケーションプログラムインタフェースの呼び出しに
    応答して、その書き込み有無を示すフラグを書き込み無
    しの状態に設定する処理プログラムと、 前記指定メモリ領域に対するデータの書き込みがあった
    とき、前記フラグを書き込み有りの状態に設定するステ
    ップと、前記スレッドからの、指定メモリ領域に対する
    データの書き込み有無検出の終了を依頼するアプリケー
    ションプログラムインタフェースの呼び出しに応答し
    て、前記フラグの状態に応じた値を前記スレッドに返す
    処理プログラムとを記録して成るプログラム記録媒体。
  26. 【請求項26】 メモリのヒープ領域内の、どのオブジ
    ェクトからも参照されないオブジェクトを検出し、当該
    オブジェクトのメモリ領域を他のオブジェクトのメモリ
    割り当て可能なフリー領域として解放するガベージコレ
    クションスレッドをインクリメンタルに行う処理プログ
    ラムと、スレッドの優先度に応じて各スレッドを時分割
    に実行してスケジューリングを行う処理プログラムと、
    前記ガベージコレクションスレッドの優先度をガベージ
    コレクションスレッド以外のスレッドの優先度より高い
    状態と低い状態とに交互に変更する処理プログラムとを
    記録して成るプログラム記録媒体。
  27. 【請求項27】 イベントの発生に応じてリアルタイム
    スレッドを実行し、該リアルタイムスレッドの中断時ま
    たは終了時に非リアルタイムスレッドを実行するプログ
    ラム制御装置に用いられるプログラム記録媒体であっ
    て、 前記非リアルタイムスレッドの1つを、メモリのヒープ
    領域内の、どのオブジェクトからも参照されないオブジ
    ェクトを検出し、当該オブジェクトのメモリ領域を他の
    オブジェクトのメモリ割り当て可能なフリー領域として
    解放するガベージコレクションをインクリメンタルに行
    うガベージコレクションスレッドとし、当該ガベージコ
    レクションスレッド以外の非リアルタイムスレッドの実
    行によりヒープ領域内の前記フリー領域が所定の値まで
    減少したとき、前記ガベージコレクションスレッドを実
    行する処理プログラムを記録したことを特徴とするプロ
    グラム記録媒体。
  28. 【請求項28】 メモリのヒープ領域内の、どのオブジ
    ェクトからも参照されないオブジェクトを検出し、当該
    オブジェクトのメモリ領域を他のオブジェクトのメモリ
    割り当て可能なフリー領域として解放する、手順の異な
    る複数通りのガベージコレクションスレッドを選択的に
    実行する処理プログラムと、前記フリー領域または前記
    オブジェクトの使用領域の量に基づいて、前記複数通り
    の手順のうち1つの手順のガベージコレクションスレッ
    ドを実行する処理プログラムとを記録して成るプログラ
    ム記録媒体。
  29. 【請求項29】 プログラムの実行時にメモリのヒープ
    領域内にオブジェクトを生成するコンピュータに用いら
    れるプログラム記録媒体であって、 メモリのヒープ領域内に割り当てられるオブジェクトの
    サイズの分布を検知し、その分布の中心より大きな固定
    サイズの整数倍を前記ヒープ領域に対する新たなオブジ
    ェクトの割り当てサイズとする処理プログラムを記録し
    て成るプログラム記録媒体。
  30. 【請求項30】 前記ヒープ領域内を予め複数のサイズ
    に分割し、オブジェクト生成時に当該オブジェクトのサ
    イズより大きく且つ最も小さなサイズの領域を割り当て
    る処理プログラムを記録して成る請求項29に記載のプ
    ログラム記録媒体。
  31. 【請求項31】 メモリのヒープ領域内にオブジェクト
    を生成する手段を備えたプログラム制御装置に用いられ
    るプログラム記録媒体であって、 アプリケーションプログラムインタフェースの呼び出し
    によって前記固定サイズを設定する処理プログラムと、
    前記固定サイズの整数倍を前記ヒープ領域内に対するオ
    ブジェクトの割り当てサイズに決定する処理プログラム
    を記録して成るプログラム記録媒体。
  32. 【請求項32】 メモリのヒープ領域内にオブジェクト
    を生成する手段を備えたプログラム制御装置に用いられ
    るプログラム記録媒体であって、 前記ヒープ領域内に割り当てられるオブジェクトのサイ
    ズの分布をアプリケーションプログラムインタフェース
    の呼び出しによって設定し、該アプリケーションプログ
    ラムインタフェースの呼び出しに応答して、前記分布の
    中心より大きな値を前記固定サイズとして設定する処理
    プログラムと、前記固定サイズの整数倍を前記ヒープ領
    域内に対するオブジェクトの割り当てサイズに決定する
    処理プログラムを記録して成るプログラム記録媒体。
  33. 【請求項33】 プログラムの実行時にテンプレートと
    してのクラスによりメモリのヒープ領域にオブジェクト
    を生成するコンピュータに用いられるプログラム記録媒
    体であって、 前記クラスからオブジェクトが生成された時刻に相当す
    るデータを記憶し、前記オブジェクトを削除する際に、
    当該オブジェクトの寿命を検出し、該寿命のデータをク
    ラスに設け、当該クラスからオブジェクトを生成する際
    に、前記寿命のデータに基づいて、前記ヒープ領域に対
    するオブジェクトの生成領域を分ける処理プログラムを
    記録して成るプログラム記録媒体。
  34. 【請求項34】 メモリのヒープ領域内の、他のオブジ
    ェクトから参照されるオブジェクトを検出して当該参照
    の有無状態を記憶し、当該記憶内容を基にオブジェクト
    を消去するコンピュータに用いられるプログラム記録媒
    体であって、 オブジェクトの生成時にオブジェクトの参照関係を表す
    ツリー構造の第1のデータを記憶し、参照関係の変更時
    に、オブジェクトの参照関係の変更された部分のオブジ
    ェクトを示す第2のデータを記憶し、第1のデータを探
    索して参照されているオブジェクトを検出し、第2のデ
    ータを読み出すとともに該データを基に第1のデータを
    探索して、参照されているオブジェクトを検出する処理
    プログラムを記録して成るプログラム記録媒体。
JP20034599A 1997-11-21 1999-07-14 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体 Expired - Fee Related JP3826626B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP20034599A JP3826626B2 (ja) 1997-11-21 1999-07-14 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP32176697 1997-11-21
JP9-321766 1997-11-21
JP20034599A JP3826626B2 (ja) 1997-11-21 1999-07-14 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP10260427A Division JP3027845B2 (ja) 1997-11-21 1998-09-14 プログラム制御装置および方法

Related Child Applications (3)

Application Number Title Priority Date Filing Date
JP2006021497A Division JP4345748B2 (ja) 1997-11-21 2006-01-30 メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
JP2006021496A Division JP4333676B2 (ja) 1997-11-21 2006-01-30 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
JP2006021495A Division JP4265610B2 (ja) 1997-11-21 2006-01-30 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体

Publications (2)

Publication Number Publication Date
JP2000099351A true JP2000099351A (ja) 2000-04-07
JP3826626B2 JP3826626B2 (ja) 2006-09-27

Family

ID=26512125

Family Applications (1)

Application Number Title Priority Date Filing Date
JP20034599A Expired - Fee Related JP3826626B2 (ja) 1997-11-21 1999-07-14 プログラム制御装置、プログラム制御方法、およびプログラム記録媒体

Country Status (1)

Country Link
JP (1) JP3826626B2 (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004030310A (ja) * 2002-06-26 2004-01-29 Nec Corp オブジェクト検索装置、オブジェクト検索システム、オブジェクト検索方法及びオブジェクト検索プログラム
JP2004295889A (ja) * 2003-03-26 2004-10-21 Arm Ltd データ処理システム内での処理タスクの実行を制御する方法および装置
JP2005209214A (ja) * 2002-07-23 2005-08-04 Samsung Electronics Co Ltd メタデータのインデックス構造と、メタデータのインデックスの提供方法、メタデータのインデックスを利用したメタデータの検索方法及び検索装置
JP2008505405A (ja) * 2004-06-30 2008-02-21 グレネイル エレクトロニクス インコーポレイテッド 分散型通信プラットフォームにおけるロードバランシング
JP2008217786A (ja) * 2007-03-02 2008-09-18 Internatl Business Mach Corp <Ibm> コンピューティング環境内のメモリ管理方法、メモリ管理システム及びコンピュータ・プログラム
JP2010113585A (ja) * 2008-11-07 2010-05-20 Internatl Business Mach Corp <Ibm> 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
JP2011081610A (ja) * 2009-10-07 2011-04-21 Internatl Business Mach Corp <Ibm> オブジェクト最適配置装置、オブジェクト最適配置方法、及びオブジェクト最適配置プログラム
CN111406007A (zh) * 2017-11-29 2020-07-10 株式会社爱德克斯 车辆的制动控制装置
CN116661985A (zh) * 2022-10-25 2023-08-29 荣耀终端有限公司 一种垃圾回收的守护线程的管理方法、装置及电子设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449601B2 (en) * 2020-01-08 2022-09-20 Red Hat, Inc. Proof of code compliance and protected integrity using a trusted execution environment

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004030310A (ja) * 2002-06-26 2004-01-29 Nec Corp オブジェクト検索装置、オブジェクト検索システム、オブジェクト検索方法及びオブジェクト検索プログラム
US7979437B2 (en) 2002-07-23 2011-07-12 Samsung Electronics Co., Ltd. Method of searching an index structure for TV-anytime forum metadata having location information expressed as a code for defining a key
JP2005209214A (ja) * 2002-07-23 2005-08-04 Samsung Electronics Co Ltd メタデータのインデックス構造と、メタデータのインデックスの提供方法、メタデータのインデックスを利用したメタデータの検索方法及び検索装置
JP2004295889A (ja) * 2003-03-26 2004-10-21 Arm Ltd データ処理システム内での処理タスクの実行を制御する方法および装置
US8176286B2 (en) 2003-03-26 2012-05-08 Edward Colles Nevill Memory recycling in computer systems
JP2008505405A (ja) * 2004-06-30 2008-02-21 グレネイル エレクトロニクス インコーポレイテッド 分散型通信プラットフォームにおけるロードバランシング
JP2008217786A (ja) * 2007-03-02 2008-09-18 Internatl Business Mach Corp <Ibm> コンピューティング環境内のメモリ管理方法、メモリ管理システム及びコンピュータ・プログラム
US8201178B2 (en) 2008-11-07 2012-06-12 International Business Machines Corporation Preventing delay in execution time of instruction executed by exclusively using external resource
JP2010113585A (ja) * 2008-11-07 2010-05-20 Internatl Business Mach Corp <Ibm> 外部資源を排他使用しながら実行される命令の実行時間の遅延を防ぐためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
JP2011081610A (ja) * 2009-10-07 2011-04-21 Internatl Business Mach Corp <Ibm> オブジェクト最適配置装置、オブジェクト最適配置方法、及びオブジェクト最適配置プログラム
US9009715B2 (en) 2009-10-07 2015-04-14 International Business Machines Corporation Object optimal allocation device, method and program
US10296388B2 (en) 2009-10-07 2019-05-21 International Business Machines Corporation Object optimal allocation device, method and program
US11086680B2 (en) 2009-10-07 2021-08-10 International Business Machines Corporation Object optimal allocation device, method and program
CN111406007A (zh) * 2017-11-29 2020-07-10 株式会社爱德克斯 车辆的制动控制装置
CN116661985A (zh) * 2022-10-25 2023-08-29 荣耀终端有限公司 一种垃圾回收的守护线程的管理方法、装置及电子设备

Also Published As

Publication number Publication date
JP3826626B2 (ja) 2006-09-27

Similar Documents

Publication Publication Date Title
JP3027845B2 (ja) プログラム制御装置および方法
JP4265610B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US7167881B2 (en) Method for heap memory management and computer system using the same method
US7454447B1 (en) Declarative pinning
JP4043528B2 (ja) 部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法
US6842759B2 (en) Single-instance class objects across multiple JVM processes in a real-time system
EP2175370A1 (en) System and method of using pooled thread-local character arrays
EP1659496B1 (en) Garbage collection system
US20080140954A1 (en) System for page-out and page-in of stale objects in memory
JP2002506550A (ja) 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法
JP4333676B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
EP3577567A1 (en) Multiple stage garbage collector
EP3577565B1 (en) Garbage collector
US20090037501A1 (en) Method and system for managing memory for a program using area
US7620943B1 (en) Using class properties to segregate objects in a generation managed by the train algorithm
US8966212B2 (en) Memory management method, computer system and computer readable medium
US7062518B2 (en) Efficiently supporting the existence of long trains in a generation managed by the train algorithm
JP2000099351A (ja) プログラム制御装置とメモリ割当装置および方法
JP5051961B2 (ja) モジュール式ガーベッジコレクタを実現するための方法および装置
JP4345748B2 (ja) メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
US20090228537A1 (en) Object Allocation System and Method
CN114051610A (zh) 基于arena的存储器管理
Higuera-Toledano et al. Analyzing the performance of memory management in RTSJ
US7024437B2 (en) Better placement of objects reachable from special objects during collection based on the train algorithm
US11188460B2 (en) Arena-based memory management

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20051129

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060130

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060307

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060508

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20060524

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060613

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060626

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees