JP2004234546A - プログラム実行方法および装置 - Google Patents
プログラム実行方法および装置 Download PDFInfo
- Publication number
- JP2004234546A JP2004234546A JP2003024880A JP2003024880A JP2004234546A JP 2004234546 A JP2004234546 A JP 2004234546A JP 2003024880 A JP2003024880 A JP 2003024880A JP 2003024880 A JP2003024880 A JP 2003024880A JP 2004234546 A JP2004234546 A JP 2004234546A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- garbage collection
- program
- execution
- collection process
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】ガーベッジコレクションにはコンテキストスイッチが伴っていたので、オーバーヘッドによるパフォーマンス低下が見られていた。
【解決手段】デジタルテレビジョン受像器10のJava仮想機械36内において、インタプリタ処理部26がJavaプログラムをスレッド単位で実行し、各スレッドが1対1でタスクと対応づけられ、カーネル20によりスケジューリングの対象となる。生成処理部28がスレッド内でオブジェクトを生成し、メモリ管理部30が各オブジェクトにヒープ領域を割り当てる。実時間管理部32は、スレッドごとの実時間度を管理し、その実時間度に基づく中断期間にGC処理部34がGC処理を実行する。
【選択図】 図2
【解決手段】デジタルテレビジョン受像器10のJava仮想機械36内において、インタプリタ処理部26がJavaプログラムをスレッド単位で実行し、各スレッドが1対1でタスクと対応づけられ、カーネル20によりスケジューリングの対象となる。生成処理部28がスレッド内でオブジェクトを生成し、メモリ管理部30が各オブジェクトにヒープ領域を割り当てる。実時間管理部32は、スレッドごとの実時間度を管理し、その実時間度に基づく中断期間にGC処理部34がGC処理を実行する。
【選択図】 図2
Description
【0001】
【発明の属する技術分野】
本発明は、プログラム実行方法および装置に関する。本発明は特に、Javaプログラムを実行する仮想機械の技術に関する。
【0002】
【従来の技術】
Java(登録商標)プログラムを実行する環境であるJava仮想機械(Java Virtual Machine)がもつ特徴の一つとして、ガーベッジコレクション(以下、単にGCという。)がある。これは、実行中のプログラムによって利用されなくなったオブジェクトに割り当てられているメモリ領域を回収して再利用可能な状態に遷移させる機能であり、メモリ解放の命令をあらかじめプログラムに明示しなくともJava仮想機械側が自動的に処理するので、プログラマからメモリ管理の手間を省きの負担を軽減できる機能である。このGCにはいくつかの方式が知られている(例えば、特許文献1および非特許文献1参照。)。
【0003】
【特許文献1】
特開2000−99351号公報 (全文)
【非特許文献1】
湯浅太一、「実時間ごみ集め」、情報処理1994年11月、Vol.35
No.11
【0004】
【発明が解決しようとする課題】
上記従来技術においては、GCを処理するためのスレッドをあらかじめ起動しておき、そのスレッドの実行優先度を周期的に切り替えながらGC以外のスレッドと交互に実行させている。また、実時間性の高い他のスレッドの割り込みがあったときは、その割り込みのあったスレッドへ即座に処理を移譲させていた。
【0005】
しかしながら、実行するスレッドを切り替えるにはコンテキストスイッチが伴うためオーバーヘッドが大きくなり、全体的なパフォーマンス低下を招きやすい。また、実時間性の高いスレッドの割り込みがあったときに無条件にGCスレッドから割り込みスレッドへ処理を移譲してしまうと、結果的に空きヒープ領域が枯渇してしまうおそれがある。
【0006】
本発明はこうした状況に鑑みなされたものであり、その目的はスレッドの実時間性を最大限に担保しつつ適切なメモリ管理を実現する点にある。別の目的は、コンテキストスイッチを伴わないGCを実現する点にある。さらに別の目的は、最低限必要なGC処理進行を確保してヒープ領域の枯渇を防止する点にある。
【0007】
【課題を解決するための手段】
本発明のある態様はプログラム実行方法である。この方法は、プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を、実行中のスレッドに設定された実時間度に応じてそのスレッドの処理を中断する間に、そのスレッド内で実行する。ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、他のスレッドの実時間度に応じたタイミングでガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越してもよい。
【0008】
ここでは、GCの処理をそのスレッド内で実行しており、別個の独立したスレッドでGCを実行する構成ではないので、コンテキストスイッチを伴わずにGCを実行できる。
【0009】
「実時間度」は、そのスレッドをリアルタイムに実行すべき必要性の度合いを示し、あらかじめスレッドごとまたはオブジェクトごとにその度合いを設定しておく。例えば即時実行の必要性が高いスレッドほど実時間度を高く設定しておく。スレッドの実時間度は、その処理の中断期間を決定するときと、割り込み時の実行開始タイミングを決定するときに参照される。複数のスレッドが並列処理されるときは、それぞれの実時間度の高低をもとにGCの実行時間を判定してもよい。このように、スレッドを即時実行する必要性とGCを実行する必要性との調停を図り、最適なGC実行時間を確保する。これにより、スレッドの実時間性を担保しつつ、最低限必要なGCを実行してヒープ領域の枯渇を防止できる。
【0010】
本発明の別の態様はプログラム実行装置である。この装置は、プログラムをスレッド単位で実行するインタプリタ処理部と、スレッド内でオブジェクトを生成する生成処理部と、オブジェクトにメモリ領域の一部を割り当てるメモリ管理部と、スレッドに設定された実時間度を管理する実時間管理部と、メモリ領域のうちどのオブジェクトにも割り当てられていない空き領域が所定値を下回ったときに、実行中のスレッドの実時間度に応じた期間、そのスレッドの処理を中断し、プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を前記中断する期間にそのスレッド内で実行するGC処理部と、を有する。
【0011】
GC処理部は、ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、他のスレッドの実時間度に応じたタイミングでガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越してもよい。
【0012】
本態様においても、スレッドを即時実行する必要性とGCを実行する必要性との調停を図り、最適なGC実行時間を確保する。これにより、スレッドの実時間性を担保しつつ、最低限必要なGCを実行してヒープ領域の枯渇を防止できる。
【0013】
なお、以上の構成要素の任意の組合せや、本発明の構成要素や表現を方法、装置、システム、コンピュータプログラム、プログラムを格納した記録媒体、データ構造などの間で相互に置換したものもまた、本発明の態様として有効である。
【0014】
【発明の実施の形態】
(第1実施形態)
本実施形態においては、本発明のプログラム実行装置をデジタルテレビジョン受像器として実現した例を説明する。デジタルテレビジョン受像器は、デジタル衛星放送やデジタル地上波放送の放送波をデコードして画面に表示するとともに、放送信号に付随して受信するデータ放送を用いて番組以外の情報を画面に表示する点に特徴がある。画面の表示制御にJavaプログラムが用いられ、その実行環境としてのプログラム実行装置をJava仮想機械の形で実現する。
【0015】
図1は、デジタルテレビジョン受像器10の基本構成図である。デジタルテレビジョン受像器10は、デジタル放送の放送信号を受信する受信部12と、放送信号を復号して映像信号に変換するデコード部14と、放送番組およびデータ放送を画面に表示させる表示処理部16と、デジタルテレビジョン受像器10の動作を制御する制御部18と、を有する。制御部18は、受信部12、デコード部14、表示処理部16に対して動作を指示する。例えば、リモートコントローラからの信号を受けて、放送信号の受信、放送信号の復号、画面への表示処理などを指示する。制御部18を中心とした各構成の制御には、それぞれ即時実行の必要性に応じてあらかじめ実時間度が設定されている。
【0016】
制御部18を中心としたデジタルテレビジョン受像器10の各構成の制御は、ハードウェア的には、CPU、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされた表示処理機能や制御機能のあるプログラムなどによって実現される。図2では特にソフトウェアに着目して機能ブロックを描いているが、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せと連携によっていろいろな形で実現できることは、当業者には理解されるところである。
【0017】
図2は、デジタルテレビジョン受像器10において実行されるソフトウェアのモジュール構成図である。デジタルテレビジョン受像器10を制御するOSは、リアルタイムマルチタスクカーネル(以下、単にカーネルという)20を中心として動作し、各プログラムの複数のタスクを並列的に処理する。実行するプログラムは、このOS向けに機械語へコンパイルされたアプリケーションプログラム22と、Java仮想機械36向けに中間コードへコンパイルされたJavaプログラム24とがある。
【0018】
Java仮想機械36は、Javaプログラム24をスレッド単位で実行するインタプリタ処理部26と、スレッド内でオブジェクトを生成する生成処理部28と、各オブジェクトにメモリ領域の一部をヒープ領域として割り当てるメモリ管理部30と、各スレッドに設定された実時間度を管理する実時間管理部32と、GCを実行するGC処理部34と、を含む。Java仮想機械36において実行されるスレッドに1対1でタスクが対応づけられることを前提とする。
【0019】
GC処理部34は、実行中のスレッドの実時間度を実時間管理部32から取得し、その実時間度に応じてGC処理による中断時間を決定する。GC処理部34は、GC処理中に他のスレッドの割り込みがあったとき、そのスレッドの実時間度に応じてGC処理の停止または続行を決定する。GC処理の詳細は後述する。
【0020】
図3は、複写式GCの過程を模式的に示す。まず、メモリ領域のうち各オブジェクトに割り当て可能な領域を二つに分割する。そのうちいずれか一方の領域をヒープ領域としての割り当てに使用する。図のように左側のメモリ領域40を使用する場合に、順次複数のオブジェクト50にヒープ領域を割り当てていき、左側のメモリ領域40から使用中のヒープ領域42を引いた空きヒープ領域44が所定値(以下、「GC起動閾値」という。)を下回るまで続ける。ルート領域46には、各オブジェクト50へのポインタが格納されている。
【0021】
空きヒープ領域44がGC起動閾値を下回ったとき、ルート領域46を走査し、ポインタをもとに辿ることのできるオブジェクト50を順次右側のメモリ領域52へ複写する。複写したオブジェクトのポインタは新たなアドレスに更新する。ルート領域46の走査とオブジェクトの複写が完了した後、左側のメモリ領域40をすべて消去する。これにより、プログラムの実行に必要なオブジェクトがすべて右側のメモリ領域52へ移動する反面、不要なオブジェクトは右側のメモリ領域52へ移動しないので、右側の使用中のヒープ領域54は左側の使用中のヒープ領域42よりも容量が小さくなる。こうして左側のメモリ領域40と右側のメモリ領域52とをGC処理しながら交互に使用する。
【0022】
図4は、Java仮想機械36を起動してから終了するまでの全体的な過程を示すフローチャートである。まずヒープ領域の初期化として、メモリ領域内にヒープ領域を確保し(S10)、空きヒープ領域44の値を初期化し(S12)、GC起動閾値を設定する(S14)。GC処理のスケジューリングに用いるパラメータとして、まず保証される基準中断時間に相当する基準仕事量を決定する(S16)。この保証される基準中断期間は、GC処理中に他のスレッドの割り込みがあったときの反応時間に基づいて定まる。すなわち、他のスレッドの割り込み有無にかかわらず、この基準中断期間が最低限のGC処理期間として保証される基準値となる。そして、各スレッドの実時間度に応じたこの基準中断期間の倍数の期間、GC処理が実行される。基準仕事量は、基準中断期間だけGC処理を実行した場合にその処理によって走査されるオブジェクトの総データサイズである。
【0023】
次に、スレッドの実時間度に応じて実行すべきGC処理量を示す目標仕事量を決定し(S18)、GC処理の実行中であることを示すGC処理中フラグを初期化する(S20)。以上の各初期化作業が終わったところでプログラムを実行する(S22)。そのプログラムの終了とともにJava仮想機械36も終了する。
【0024】
図5は、図4において実時間度ごとの目標仕事量を決定するS18の詳細を示すフローチャートである。ここでは、実時間度のレベルの数だけ目標仕事量の決定を繰り返す。繰り返し変数iに最大実時間度を代入し(S30)、基準仕事量に基づいて目標仕事量を決定する(S32)。目標仕事量は、最大実時間度をMAXRとすると次式で示される。
目標仕事量=基準仕事量×(MAXR+1−i)
目標仕事量を決定後、繰り返し変数iをデクリメントし(S34)、繰り返し変数iが最小実時間度になるまでS32およびS34の処理を繰り返す(S36N)。繰り返し変数iが最小実時間度になると(S36Y)、図4のS20へ続く。これにより、実時間度ごとの目標仕事量が得られる。例えば、実時間度が高いほど目標仕事量は小さく、実時間度が低いほど目標仕事量は大きい。
【0025】
図6は、オブジェクト生成からGC処理までの過程を示すフローチャートである。まずオブジェクト生成にあたり、ヒープ確保のためにメモリ領域のロックをカーネル20から獲得し(S40)、GC処理中フラグがオンになっている場合は(S42Y)、後述するS50までスキップする。GC処理中フラグがオンになっておらずGC処理中でない場合(S42N)、空きヒープ領域44から実行するオブジェクトのサイズを引いた値がGC起動閾値を下回るならば(S44Y)、GC処理中フラグをオンにして(S46)、繰越仕事量の値を初期化する(S48)。S44においてGC起動閾値を下回らない場合は(S44N)、S54までスキップする。
【0026】
S48で繰越仕事量の値を初期化した後、単位仕事係数を設定し(S50)、GC処理を実行する(S52)。単位仕事係数は、例えばオブジェクトサイズ1MBあたりの走査量であり、ヒープ領域の大きさに依存する。その後、オブジェクトにメモリ領域の一部を割当て(S54)、空きヒープ領域44の値を更新する(S56)。最後にヒープ領域確保のためのロックを解除してオブジェクトの生成を終了する(S58)。
【0027】
図7は、図6のS52におけるGC処理の詳細な過程を示すフローチャートである。まず処理済仕事量の値を初期化し(S60)、繰越仕事量が0であれば(S62N)、S68までスキップし、繰越仕事量が0より大きければ(S62Y)、目標仕事量を元の目標仕事量の整数N倍とし(S64)、その増分を繰越仕事量から差し引く(S66)。なお、目標仕事量の整数N倍は、例えば2倍程度に設定するなど、S66において増分差し引き後の繰越仕事量が0未満にならないような範囲とする。その後、走査処理を実行し(S68)、終了処理を実行する(S70)。このように繰越仕事量が減少する方向でGC処理を余分に実行することにより、ヒープ領域の枯渇を防止する。
【0028】
図8は、図7のS68における走査処理の詳細な過程を示すフローチャートである。まずGCを実行するスレッドの実時間度に対応する目標仕事量を基準仕事量で割った値を変数Lに代入し(S80)、繰り返し変数iをリセットし(S82)、実時間度に応じた基準仕事量のGC処理を実行し(S84)、その実行した分の仕事量を処理済仕事量に加える(S86)。ここで、他のスレッドによってヒープ領域確保のためのロック獲得が試行されていなければ(S88Y)、変数iをインクリメントし(S90)、変数Lが変数iより小さくなければ(S92N)、S84へ戻る。S88においてロック獲得が試行されていたときは(S88N)、本図の走査処理を終了する。S92において変数Lが変数iより小さいときもまた、本図の走査処理を終了する(S92Y)。
【0029】
図9は、図7のS70における終了処理の詳細な過程を示すフローチャートである。すでに全オブジェクトを走査してある場合(S72Y)、GC処理中のフラグをオフにしてGC処理を終了する(S74)。全オブジェクトの走査が終わっていない場合(S72N)、繰越仕事量は次式で示される。
繰越仕事量=現時点での繰越仕事量+オブジェクトサイズ×単位仕事係数−処理済仕事量
この式によって繰越仕事量を求め(S76)、この繰越仕事量を次回以降のGC処理に繰り越す。
【0030】
(第2実施形態)
第1実施形態においては、GC処理中に他のスレッドの割り込みがあったとき、GC処理を停止してそのまま他のスレッドへ処理を移譲する構成とした。本実施形態には、割り込みのあった他のスレッドの実時間度に応じてGC処理の続行または停止する点で異なる。すなわち、図8のS88においては、他のスレッドがヒープ領域のロック獲得を試行したか否かだけでなく、他のスレッドの実時間度に応じてGC処理を停止すべきか否かを同時に判断する。他のスレッドの実時間度が最大の場合はただちにGC処理を停止して図8の処理を終了する。他のスレッドの実時間度が最大ではない場合、その実時間度に応じた数を変数iに加えてS84からS92までのループ回数を調整し、他のスレッド実行までの遅延時間を反映させる。また、実行中のスレッドの実時間度よりも割り込みスレッドの実時間度が高い場合にGC処理を停止してもよい。
【0031】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、その各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0032】
実施の形態においては、基準仕事量を単位としてその倍数で目標仕事量を設定していた。これは目標仕事量を固定的に定めて正確な実時間性を確保するハードリアルタイム式である。一方、変形例においては、実時間度に応じて目標仕事量を定めるとともに、オブジェクトごとに実時間性の猶予度も別途設定しておき、その猶予度に基づいて目標仕事量に幅をもたせるソフトリアルタイム式であってもよい。例えば、GC処理中に実時間度の高い他のスレッドの割り込みがあっても、その割り込みスレッドの猶予度に応じてGC処理の停止タイミングおよび割り込みスレッドへの移行タイミングを変えてもよい。これにより、各スレッドが許容する限り少しでも長い期間GC処理を実行してヒープの枯渇を防止できる。
また、オブジェクトごとの実時間度および猶予度をあらかじめテーブルの形で設定しておいてもよい。
【0033】
実施の形態においては、デジタルテレビジョン受像器にJava仮想機械36を組み込んだ例で説明した。変形例においては、本発明のJava仮想機械36を他の装置に組み込んだ構成としてもよいし、コンピュータ上で実行させる構成としてもよい。
【0034】
実施の形態においては、図3のように複写式GCを採用したが、変形例においては、GCのスケジューリングが可能である限り複写式GC以外の方式を採用してもよい。
【0035】
【発明の効果】
本発明によれば、プログラムのリアルタイム性を確保しつつ、ガーベッジコレクションの処理時間も確保することができる。
【図面の簡単な説明】
【図1】デジタルテレビジョン受像器の基本構成図である。
【図2】デジタルテレビジョン受像器において実行されるソフトウェアのモジュール構成図である。
【図3】複写式GCの過程を模式的に示す図である。
【図4】Java仮想機械を起動してから終了するまでの全体的な過程を示すフローチャートである。
【図5】図4において実時間度ごとの目標仕事量を決定するS18の詳細を示すフローチャートである。
【図6】オブジェクト生成からGC処理までの過程を示すフローチャートである。
【図7】図6のS52におけるGC処理の詳細な過程を示すフローチャートである。
【図8】図7のS68における走査処理の詳細な過程を示すフローチャートである。
【図9】図7のS70における終了処理の詳細な過程を示すフローチャートである。
【符号の説明】
20 カーネル、 26 インタプリタ処理部、 28 生成処理部、 30メモリ管理部、 32 実時間管理部、 34 GC処理部、 36 Java仮想機械、 40 メモリ領域。
【発明の属する技術分野】
本発明は、プログラム実行方法および装置に関する。本発明は特に、Javaプログラムを実行する仮想機械の技術に関する。
【0002】
【従来の技術】
Java(登録商標)プログラムを実行する環境であるJava仮想機械(Java Virtual Machine)がもつ特徴の一つとして、ガーベッジコレクション(以下、単にGCという。)がある。これは、実行中のプログラムによって利用されなくなったオブジェクトに割り当てられているメモリ領域を回収して再利用可能な状態に遷移させる機能であり、メモリ解放の命令をあらかじめプログラムに明示しなくともJava仮想機械側が自動的に処理するので、プログラマからメモリ管理の手間を省きの負担を軽減できる機能である。このGCにはいくつかの方式が知られている(例えば、特許文献1および非特許文献1参照。)。
【0003】
【特許文献1】
特開2000−99351号公報 (全文)
【非特許文献1】
湯浅太一、「実時間ごみ集め」、情報処理1994年11月、Vol.35
No.11
【0004】
【発明が解決しようとする課題】
上記従来技術においては、GCを処理するためのスレッドをあらかじめ起動しておき、そのスレッドの実行優先度を周期的に切り替えながらGC以外のスレッドと交互に実行させている。また、実時間性の高い他のスレッドの割り込みがあったときは、その割り込みのあったスレッドへ即座に処理を移譲させていた。
【0005】
しかしながら、実行するスレッドを切り替えるにはコンテキストスイッチが伴うためオーバーヘッドが大きくなり、全体的なパフォーマンス低下を招きやすい。また、実時間性の高いスレッドの割り込みがあったときに無条件にGCスレッドから割り込みスレッドへ処理を移譲してしまうと、結果的に空きヒープ領域が枯渇してしまうおそれがある。
【0006】
本発明はこうした状況に鑑みなされたものであり、その目的はスレッドの実時間性を最大限に担保しつつ適切なメモリ管理を実現する点にある。別の目的は、コンテキストスイッチを伴わないGCを実現する点にある。さらに別の目的は、最低限必要なGC処理進行を確保してヒープ領域の枯渇を防止する点にある。
【0007】
【課題を解決するための手段】
本発明のある態様はプログラム実行方法である。この方法は、プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を、実行中のスレッドに設定された実時間度に応じてそのスレッドの処理を中断する間に、そのスレッド内で実行する。ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、他のスレッドの実時間度に応じたタイミングでガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越してもよい。
【0008】
ここでは、GCの処理をそのスレッド内で実行しており、別個の独立したスレッドでGCを実行する構成ではないので、コンテキストスイッチを伴わずにGCを実行できる。
【0009】
「実時間度」は、そのスレッドをリアルタイムに実行すべき必要性の度合いを示し、あらかじめスレッドごとまたはオブジェクトごとにその度合いを設定しておく。例えば即時実行の必要性が高いスレッドほど実時間度を高く設定しておく。スレッドの実時間度は、その処理の中断期間を決定するときと、割り込み時の実行開始タイミングを決定するときに参照される。複数のスレッドが並列処理されるときは、それぞれの実時間度の高低をもとにGCの実行時間を判定してもよい。このように、スレッドを即時実行する必要性とGCを実行する必要性との調停を図り、最適なGC実行時間を確保する。これにより、スレッドの実時間性を担保しつつ、最低限必要なGCを実行してヒープ領域の枯渇を防止できる。
【0010】
本発明の別の態様はプログラム実行装置である。この装置は、プログラムをスレッド単位で実行するインタプリタ処理部と、スレッド内でオブジェクトを生成する生成処理部と、オブジェクトにメモリ領域の一部を割り当てるメモリ管理部と、スレッドに設定された実時間度を管理する実時間管理部と、メモリ領域のうちどのオブジェクトにも割り当てられていない空き領域が所定値を下回ったときに、実行中のスレッドの実時間度に応じた期間、そのスレッドの処理を中断し、プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を前記中断する期間にそのスレッド内で実行するGC処理部と、を有する。
【0011】
GC処理部は、ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、他のスレッドの実時間度に応じたタイミングでガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越してもよい。
【0012】
本態様においても、スレッドを即時実行する必要性とGCを実行する必要性との調停を図り、最適なGC実行時間を確保する。これにより、スレッドの実時間性を担保しつつ、最低限必要なGCを実行してヒープ領域の枯渇を防止できる。
【0013】
なお、以上の構成要素の任意の組合せや、本発明の構成要素や表現を方法、装置、システム、コンピュータプログラム、プログラムを格納した記録媒体、データ構造などの間で相互に置換したものもまた、本発明の態様として有効である。
【0014】
【発明の実施の形態】
(第1実施形態)
本実施形態においては、本発明のプログラム実行装置をデジタルテレビジョン受像器として実現した例を説明する。デジタルテレビジョン受像器は、デジタル衛星放送やデジタル地上波放送の放送波をデコードして画面に表示するとともに、放送信号に付随して受信するデータ放送を用いて番組以外の情報を画面に表示する点に特徴がある。画面の表示制御にJavaプログラムが用いられ、その実行環境としてのプログラム実行装置をJava仮想機械の形で実現する。
【0015】
図1は、デジタルテレビジョン受像器10の基本構成図である。デジタルテレビジョン受像器10は、デジタル放送の放送信号を受信する受信部12と、放送信号を復号して映像信号に変換するデコード部14と、放送番組およびデータ放送を画面に表示させる表示処理部16と、デジタルテレビジョン受像器10の動作を制御する制御部18と、を有する。制御部18は、受信部12、デコード部14、表示処理部16に対して動作を指示する。例えば、リモートコントローラからの信号を受けて、放送信号の受信、放送信号の復号、画面への表示処理などを指示する。制御部18を中心とした各構成の制御には、それぞれ即時実行の必要性に応じてあらかじめ実時間度が設定されている。
【0016】
制御部18を中心としたデジタルテレビジョン受像器10の各構成の制御は、ハードウェア的には、CPU、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされた表示処理機能や制御機能のあるプログラムなどによって実現される。図2では特にソフトウェアに着目して機能ブロックを描いているが、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せと連携によっていろいろな形で実現できることは、当業者には理解されるところである。
【0017】
図2は、デジタルテレビジョン受像器10において実行されるソフトウェアのモジュール構成図である。デジタルテレビジョン受像器10を制御するOSは、リアルタイムマルチタスクカーネル(以下、単にカーネルという)20を中心として動作し、各プログラムの複数のタスクを並列的に処理する。実行するプログラムは、このOS向けに機械語へコンパイルされたアプリケーションプログラム22と、Java仮想機械36向けに中間コードへコンパイルされたJavaプログラム24とがある。
【0018】
Java仮想機械36は、Javaプログラム24をスレッド単位で実行するインタプリタ処理部26と、スレッド内でオブジェクトを生成する生成処理部28と、各オブジェクトにメモリ領域の一部をヒープ領域として割り当てるメモリ管理部30と、各スレッドに設定された実時間度を管理する実時間管理部32と、GCを実行するGC処理部34と、を含む。Java仮想機械36において実行されるスレッドに1対1でタスクが対応づけられることを前提とする。
【0019】
GC処理部34は、実行中のスレッドの実時間度を実時間管理部32から取得し、その実時間度に応じてGC処理による中断時間を決定する。GC処理部34は、GC処理中に他のスレッドの割り込みがあったとき、そのスレッドの実時間度に応じてGC処理の停止または続行を決定する。GC処理の詳細は後述する。
【0020】
図3は、複写式GCの過程を模式的に示す。まず、メモリ領域のうち各オブジェクトに割り当て可能な領域を二つに分割する。そのうちいずれか一方の領域をヒープ領域としての割り当てに使用する。図のように左側のメモリ領域40を使用する場合に、順次複数のオブジェクト50にヒープ領域を割り当てていき、左側のメモリ領域40から使用中のヒープ領域42を引いた空きヒープ領域44が所定値(以下、「GC起動閾値」という。)を下回るまで続ける。ルート領域46には、各オブジェクト50へのポインタが格納されている。
【0021】
空きヒープ領域44がGC起動閾値を下回ったとき、ルート領域46を走査し、ポインタをもとに辿ることのできるオブジェクト50を順次右側のメモリ領域52へ複写する。複写したオブジェクトのポインタは新たなアドレスに更新する。ルート領域46の走査とオブジェクトの複写が完了した後、左側のメモリ領域40をすべて消去する。これにより、プログラムの実行に必要なオブジェクトがすべて右側のメモリ領域52へ移動する反面、不要なオブジェクトは右側のメモリ領域52へ移動しないので、右側の使用中のヒープ領域54は左側の使用中のヒープ領域42よりも容量が小さくなる。こうして左側のメモリ領域40と右側のメモリ領域52とをGC処理しながら交互に使用する。
【0022】
図4は、Java仮想機械36を起動してから終了するまでの全体的な過程を示すフローチャートである。まずヒープ領域の初期化として、メモリ領域内にヒープ領域を確保し(S10)、空きヒープ領域44の値を初期化し(S12)、GC起動閾値を設定する(S14)。GC処理のスケジューリングに用いるパラメータとして、まず保証される基準中断時間に相当する基準仕事量を決定する(S16)。この保証される基準中断期間は、GC処理中に他のスレッドの割り込みがあったときの反応時間に基づいて定まる。すなわち、他のスレッドの割り込み有無にかかわらず、この基準中断期間が最低限のGC処理期間として保証される基準値となる。そして、各スレッドの実時間度に応じたこの基準中断期間の倍数の期間、GC処理が実行される。基準仕事量は、基準中断期間だけGC処理を実行した場合にその処理によって走査されるオブジェクトの総データサイズである。
【0023】
次に、スレッドの実時間度に応じて実行すべきGC処理量を示す目標仕事量を決定し(S18)、GC処理の実行中であることを示すGC処理中フラグを初期化する(S20)。以上の各初期化作業が終わったところでプログラムを実行する(S22)。そのプログラムの終了とともにJava仮想機械36も終了する。
【0024】
図5は、図4において実時間度ごとの目標仕事量を決定するS18の詳細を示すフローチャートである。ここでは、実時間度のレベルの数だけ目標仕事量の決定を繰り返す。繰り返し変数iに最大実時間度を代入し(S30)、基準仕事量に基づいて目標仕事量を決定する(S32)。目標仕事量は、最大実時間度をMAXRとすると次式で示される。
目標仕事量=基準仕事量×(MAXR+1−i)
目標仕事量を決定後、繰り返し変数iをデクリメントし(S34)、繰り返し変数iが最小実時間度になるまでS32およびS34の処理を繰り返す(S36N)。繰り返し変数iが最小実時間度になると(S36Y)、図4のS20へ続く。これにより、実時間度ごとの目標仕事量が得られる。例えば、実時間度が高いほど目標仕事量は小さく、実時間度が低いほど目標仕事量は大きい。
【0025】
図6は、オブジェクト生成からGC処理までの過程を示すフローチャートである。まずオブジェクト生成にあたり、ヒープ確保のためにメモリ領域のロックをカーネル20から獲得し(S40)、GC処理中フラグがオンになっている場合は(S42Y)、後述するS50までスキップする。GC処理中フラグがオンになっておらずGC処理中でない場合(S42N)、空きヒープ領域44から実行するオブジェクトのサイズを引いた値がGC起動閾値を下回るならば(S44Y)、GC処理中フラグをオンにして(S46)、繰越仕事量の値を初期化する(S48)。S44においてGC起動閾値を下回らない場合は(S44N)、S54までスキップする。
【0026】
S48で繰越仕事量の値を初期化した後、単位仕事係数を設定し(S50)、GC処理を実行する(S52)。単位仕事係数は、例えばオブジェクトサイズ1MBあたりの走査量であり、ヒープ領域の大きさに依存する。その後、オブジェクトにメモリ領域の一部を割当て(S54)、空きヒープ領域44の値を更新する(S56)。最後にヒープ領域確保のためのロックを解除してオブジェクトの生成を終了する(S58)。
【0027】
図7は、図6のS52におけるGC処理の詳細な過程を示すフローチャートである。まず処理済仕事量の値を初期化し(S60)、繰越仕事量が0であれば(S62N)、S68までスキップし、繰越仕事量が0より大きければ(S62Y)、目標仕事量を元の目標仕事量の整数N倍とし(S64)、その増分を繰越仕事量から差し引く(S66)。なお、目標仕事量の整数N倍は、例えば2倍程度に設定するなど、S66において増分差し引き後の繰越仕事量が0未満にならないような範囲とする。その後、走査処理を実行し(S68)、終了処理を実行する(S70)。このように繰越仕事量が減少する方向でGC処理を余分に実行することにより、ヒープ領域の枯渇を防止する。
【0028】
図8は、図7のS68における走査処理の詳細な過程を示すフローチャートである。まずGCを実行するスレッドの実時間度に対応する目標仕事量を基準仕事量で割った値を変数Lに代入し(S80)、繰り返し変数iをリセットし(S82)、実時間度に応じた基準仕事量のGC処理を実行し(S84)、その実行した分の仕事量を処理済仕事量に加える(S86)。ここで、他のスレッドによってヒープ領域確保のためのロック獲得が試行されていなければ(S88Y)、変数iをインクリメントし(S90)、変数Lが変数iより小さくなければ(S92N)、S84へ戻る。S88においてロック獲得が試行されていたときは(S88N)、本図の走査処理を終了する。S92において変数Lが変数iより小さいときもまた、本図の走査処理を終了する(S92Y)。
【0029】
図9は、図7のS70における終了処理の詳細な過程を示すフローチャートである。すでに全オブジェクトを走査してある場合(S72Y)、GC処理中のフラグをオフにしてGC処理を終了する(S74)。全オブジェクトの走査が終わっていない場合(S72N)、繰越仕事量は次式で示される。
繰越仕事量=現時点での繰越仕事量+オブジェクトサイズ×単位仕事係数−処理済仕事量
この式によって繰越仕事量を求め(S76)、この繰越仕事量を次回以降のGC処理に繰り越す。
【0030】
(第2実施形態)
第1実施形態においては、GC処理中に他のスレッドの割り込みがあったとき、GC処理を停止してそのまま他のスレッドへ処理を移譲する構成とした。本実施形態には、割り込みのあった他のスレッドの実時間度に応じてGC処理の続行または停止する点で異なる。すなわち、図8のS88においては、他のスレッドがヒープ領域のロック獲得を試行したか否かだけでなく、他のスレッドの実時間度に応じてGC処理を停止すべきか否かを同時に判断する。他のスレッドの実時間度が最大の場合はただちにGC処理を停止して図8の処理を終了する。他のスレッドの実時間度が最大ではない場合、その実時間度に応じた数を変数iに加えてS84からS92までのループ回数を調整し、他のスレッド実行までの遅延時間を反映させる。また、実行中のスレッドの実時間度よりも割り込みスレッドの実時間度が高い場合にGC処理を停止してもよい。
【0031】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、その各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0032】
実施の形態においては、基準仕事量を単位としてその倍数で目標仕事量を設定していた。これは目標仕事量を固定的に定めて正確な実時間性を確保するハードリアルタイム式である。一方、変形例においては、実時間度に応じて目標仕事量を定めるとともに、オブジェクトごとに実時間性の猶予度も別途設定しておき、その猶予度に基づいて目標仕事量に幅をもたせるソフトリアルタイム式であってもよい。例えば、GC処理中に実時間度の高い他のスレッドの割り込みがあっても、その割り込みスレッドの猶予度に応じてGC処理の停止タイミングおよび割り込みスレッドへの移行タイミングを変えてもよい。これにより、各スレッドが許容する限り少しでも長い期間GC処理を実行してヒープの枯渇を防止できる。
また、オブジェクトごとの実時間度および猶予度をあらかじめテーブルの形で設定しておいてもよい。
【0033】
実施の形態においては、デジタルテレビジョン受像器にJava仮想機械36を組み込んだ例で説明した。変形例においては、本発明のJava仮想機械36を他の装置に組み込んだ構成としてもよいし、コンピュータ上で実行させる構成としてもよい。
【0034】
実施の形態においては、図3のように複写式GCを採用したが、変形例においては、GCのスケジューリングが可能である限り複写式GC以外の方式を採用してもよい。
【0035】
【発明の効果】
本発明によれば、プログラムのリアルタイム性を確保しつつ、ガーベッジコレクションの処理時間も確保することができる。
【図面の簡単な説明】
【図1】デジタルテレビジョン受像器の基本構成図である。
【図2】デジタルテレビジョン受像器において実行されるソフトウェアのモジュール構成図である。
【図3】複写式GCの過程を模式的に示す図である。
【図4】Java仮想機械を起動してから終了するまでの全体的な過程を示すフローチャートである。
【図5】図4において実時間度ごとの目標仕事量を決定するS18の詳細を示すフローチャートである。
【図6】オブジェクト生成からGC処理までの過程を示すフローチャートである。
【図7】図6のS52におけるGC処理の詳細な過程を示すフローチャートである。
【図8】図7のS68における走査処理の詳細な過程を示すフローチャートである。
【図9】図7のS70における終了処理の詳細な過程を示すフローチャートである。
【符号の説明】
20 カーネル、 26 インタプリタ処理部、 28 生成処理部、 30メモリ管理部、 32 実時間管理部、 34 GC処理部、 36 Java仮想機械、 40 メモリ領域。
Claims (6)
- プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を、実行中のスレッドに設定された実時間度に応じてそのスレッドの処理を中断する間に、そのスレッド内で実行することを特徴とするプログラム実行方法。
- 前記ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、前記他のスレッドの実時間度に応じたタイミングで前記ガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越すことを特徴とする請求項1に記載のプログラム実行方法。
- プログラムをスレッド単位で実行するインタプリタ処理部と、
前記スレッド内でオブジェクトを生成する生成処理部と、
前記オブジェクトにメモリ領域の一部を割り当てるメモリ管理部と、
前記スレッドに設定された実時間度を管理する実時間管理部と、
前記メモリ領域のうちどのオブジェクトにも割り当てられていない空き領域が所定値を下回ったときに、実行中のスレッドの実時間度に応じた期間、そのスレッドの処理を中断し、前記プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を前記中断する期間にそのスレッド内で実行するGC処理部と、を有することを特徴とするプログラム実行装置。 - 前記GC処理部は、前記ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、前記他のスレッドの実時間度に応じたタイミングで前記ガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越すことを特徴とする請求項3に記載のプログラム実行装置。
- プログラムをスレッド単位で実行する機能と、
前記スレッド内でオブジェクトを生成する機能と、
前記オブジェクトにメモリ領域の一部を割り当てる機能と、
前記スレッドに設定された実時間度を管理する機能と、
前記メモリ領域のうちどのオブジェクトにも割り当てられていない空き領域が所定値を下回ったときに、実行中のスレッドの実時間度に応じた期間、そのスレッドの処理を中断する機能と、
前記プログラムの実行において不要となったオブジェクトに割り当てられた領域を解放するガーベッジコレクションの処理を前記中断する期間にそのスレッド内で実行する機能と、をコンピュータに発揮させることを特徴とするコンピュータプログラム。 - 前記実行する機能は、前記ガーベッジコレクションの処理を実行中に他のスレッドの割り込みがあったとき、前記他のスレッドの実時間度に応じたタイミングで前記ガーベッジコレクションの処理を停止してその未実行分の処理を次回以降へ繰り越すことを特徴とする請求項5に記載のコンピュータプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003024880A JP2004234546A (ja) | 2003-01-31 | 2003-01-31 | プログラム実行方法および装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003024880A JP2004234546A (ja) | 2003-01-31 | 2003-01-31 | プログラム実行方法および装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004234546A true JP2004234546A (ja) | 2004-08-19 |
Family
ID=32953298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003024880A Pending JP2004234546A (ja) | 2003-01-31 | 2003-01-31 | プログラム実行方法および装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004234546A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100691120B1 (ko) | 2006-01-16 | 2007-03-12 | 엘지전자 주식회사 | 메모리 에러 관리를 위한 미들웨어 및 메모리 에러 관리방법 |
KR100809294B1 (ko) | 2006-03-10 | 2008-03-07 | 삼성전자주식회사 | 가상 머신에서 스레드 스케줄링을 수행하는 장치 및 그방법 |
CN100399278C (zh) * | 2005-04-29 | 2008-07-02 | 阿尔卡特公司 | 减小java虚拟机中由无用单元收集造成的时延的方法 |
US8125567B2 (en) | 2006-02-24 | 2012-02-28 | Samsung Electronics Co., Ltd. | Apparatus and method for controlling the screen size of real-time video |
JP2015141681A (ja) * | 2014-01-30 | 2015-08-03 | キヤノン株式会社 | 情報処理装置及びその制御方法、並びにプログラム |
CN115016885A (zh) * | 2021-11-19 | 2022-09-06 | 荣耀终端有限公司 | 虚拟机垃圾回收运行方法及电子设备 |
-
2003
- 2003-01-31 JP JP2003024880A patent/JP2004234546A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100399278C (zh) * | 2005-04-29 | 2008-07-02 | 阿尔卡特公司 | 减小java虚拟机中由无用单元收集造成的时延的方法 |
KR100691120B1 (ko) | 2006-01-16 | 2007-03-12 | 엘지전자 주식회사 | 메모리 에러 관리를 위한 미들웨어 및 메모리 에러 관리방법 |
US8125567B2 (en) | 2006-02-24 | 2012-02-28 | Samsung Electronics Co., Ltd. | Apparatus and method for controlling the screen size of real-time video |
KR100809294B1 (ko) | 2006-03-10 | 2008-03-07 | 삼성전자주식회사 | 가상 머신에서 스레드 스케줄링을 수행하는 장치 및 그방법 |
JP2015141681A (ja) * | 2014-01-30 | 2015-08-03 | キヤノン株式会社 | 情報処理装置及びその制御方法、並びにプログラム |
CN115016885A (zh) * | 2021-11-19 | 2022-09-06 | 荣耀终端有限公司 | 虚拟机垃圾回收运行方法及电子设备 |
CN115016885B (zh) * | 2021-11-19 | 2023-11-24 | 荣耀终端有限公司 | 虚拟机垃圾回收运行方法及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8499010B2 (en) | Garbage collection in a multiple virtual machine environment | |
JP4580845B2 (ja) | タスク実行装置 | |
JP5324934B2 (ja) | 情報処理装置および情報処理方法 | |
KR100628492B1 (ko) | 실시간 동작 수행방법 및 시스템 | |
CN1828563B (zh) | 处理器及信息处理方法 | |
JP4170227B2 (ja) | 多重処理環境における処理の実行 | |
KR100649107B1 (ko) | 실시간 동작 수행방법 및 시스템 | |
US7398521B2 (en) | Methods and apparatuses for thread management of multi-threading | |
US7373640B1 (en) | Technique for dynamically restricting thread concurrency without rewriting thread code | |
US9418005B2 (en) | Managing garbage collection in a data processing system | |
EP2312441B1 (en) | Scheduling of instructions groups for cell processors | |
US8677362B2 (en) | Apparatus for reconfiguring, mapping method and scheduling method in reconfigurable multi-processor system | |
CN1316074A (zh) | 中断/软件控制的线程处理 | |
US11620215B2 (en) | Multi-threaded pause-less replicating garbage collection | |
JP2010020803A (ja) | コプロセッサの性能を強化するシステムおよび方法 | |
WO2009023461A1 (en) | Multi-threaded processing with reduced context switching | |
WO2005069155A2 (en) | Method and apparatus for task schedulin in a multi-processor system based on memory requirements | |
KR100791296B1 (ko) | 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법 | |
KR20060008896A (ko) | 자원 관리 방법 및 장치 | |
JP2021530756A (ja) | ポーズレスなガベージ・コレクションのための活性化フレームを表す方法および装置 | |
US20120324194A1 (en) | Adjusting the amount of memory allocated to a call stack | |
JP2004234546A (ja) | プログラム実行方法および装置 | |
EP1377903A2 (en) | Method of and system for withdrawing budget from a blocking task | |
WO2019187719A1 (ja) | 情報処理装置、および情報処理方法、並びにプログラム | |
CN105378652A (zh) | 线程共享资源分配方法及装置 |