JP4589095B2 - プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム - Google Patents

プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム Download PDF

Info

Publication number
JP4589095B2
JP4589095B2 JP2004360707A JP2004360707A JP4589095B2 JP 4589095 B2 JP4589095 B2 JP 4589095B2 JP 2004360707 A JP2004360707 A JP 2004360707A JP 2004360707 A JP2004360707 A JP 2004360707A JP 4589095 B2 JP4589095 B2 JP 4589095B2
Authority
JP
Japan
Prior art keywords
data
area
storage
unit
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.)
Expired - Fee Related
Application number
JP2004360707A
Other languages
English (en)
Other versions
JP2006171927A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2004360707A priority Critical patent/JP4589095B2/ja
Publication of JP2006171927A publication Critical patent/JP2006171927A/ja
Application granted granted Critical
Publication of JP4589095B2 publication Critical patent/JP4589095B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System (AREA)

Description

本発明は、不要なデータを格納する記憶領域の回収処理を行うプログラム実行装置及びプログラム実行方法及びデータ領域管理プログラムに関するものである。特に、ガーベージコレクション(GC:Garbage Collection)に係る旧世代と新世代の区分方法などを用いるプログラム実行装置及びプログラム実行方法及びデータ領域管理プログラムに関するものである。
非特許文献1では、特集として、主要なほとんどのガーベージコレクションに関する技術が掲載され開示されている。
通常の動的メモリ領域(記憶領域又はデータ領域ともいう。)を利用するプログラム実行環境においては、アプリケーションプログラム(アプリケーション又はアプリケーションソフトウェアともいう。)の実行により必要なメモリ量が動的に処理系に要求され、処理系で適切な大きさのメモリ領域を用意してアプリケーションプログラムに使わせる。複数のメモリ領域又はそのメモリ領域内のデータが複雑にポインタなどでリンクされている場合には、一旦利用したメモリ領域が不要になる場合も多々あり、これをリアルタイムに管理していくのは手間のかかる処理である。動的なメモリ領域が複雑に何箇所も利用されている場合、アプリケーションプログラムが不要であるという指定をしないかぎりは、ポインタが切れる処理が行われるたびにメモリ内を走査して不要なメモリ領域を探し出す必要が生じる。
このような問題を解決する手法として、従来からガーベージコレクションという手法が利用されている。ガーベージコレクション処理は、動的にメモリ領域が必要にもかかわらず、メモリ領域が確保できない場合に実行されることが多い。ガーベージコレクション処理では、まず、システムの決まったルートと呼ばれるところから生きているメモリ領域(例えば、他のメモリ領域とのリンクが切れていないメモリ領域をいう。)を順番に手繰ってマークし、まだ必要なメモリ領域を特定する。マークされなかったメモリ領域はシステムからアクセス不可能だったエリアであり、もう利用されないと判断し、これを回収し要求された処理に対してメモリ領域として提供する。
動的なメモリ領域がヒープ領域内に割り当てられてからの時間に着目した場合、多くのアプリケーションにおいて、以下の点が特性として知られている。
1)割り当てられてからの時間が短いメモリ領域ほどゴミ(動的に確保されたメモリ領域が使用済みとなったもの)になりやすい。
2)参照関係は、割り当てられてからの時間が短いメモリ領域から割り当てられてからの時間が長いメモリ領域を参照するものがほとんどである。
この特性を利用して、非特許文献2において、世代別ガーベージコレクションと呼ばれる処理方式が提案されている。この世代別ガーベージコレクションの特徴は、割り当てられてからの時間が短いメモリ領域を一つの領域(新世代と呼ぶ。)に集めて、その領域だけに対して頻繁にガーベージコレクションを行うというものである。
上記の1)から、新世代に対して頻繁にガーベージコレクションを行うことで、少ない労力で多くのゴミを回収できることが期待できる。新世代のガーベージコレクションに関しては、領域外(新世代に対して旧世代と呼ぶ。)から新世代への参照も考慮する必要があるが、上記の2)から、これは少ないということがいえる。動的に確保したメモリ領域は、その割り当ててからの時間により任意の世代に分割することができる。ガーベージコレクション処理を一定回数行った後、ゴミとならなかった(生き延びた)動的な領域は、新世代から旧世代に移動させる。
動的に確保するメモリ領域の確保からゴミとなるまでの生存時間に着目した世代別GC方式は、動的なメモリ領域のライフサイクルに基づいた有効な方式であるが、同時に以下のような短所を持っている。
1)生存期間の長いメモリ領域は、新世代から旧世代への複製を伴うことになる。そのため、生存期間が長いメモリ領域が多く生成されるアプリケーションに関しては、処理効率が悪くなる。
2)旧世代に対するガーベージコレクションの処理は、新世代に対するガーベージコレクションの処理に比べて、発生頻度が少なくなる。しかし、旧世代に属する動的なメモリ領域は一般にデータサイズが大きいため、長い処理時間を要する。
上記の問題点を解決するために、特許文献1において、コンパイル装置を導入し、ガーベージコレクション処理を効率化し、処理時間を短縮する方法が開示されている。
特開2001−184219号公報 「ごみ集めの基礎と最近の動向」、情報処理学会会誌、Vol.35、No.11、1994年11月、p.991〜1032 "A Real−Time Garbage Collector Based on the Lifetimes of Objects"、Comm. ACM、Vol.26、June 1983
上記のように、コンパイル装置を導入する方法では、実行するプログラムをそのコンパイル時に解析する必要があった。しかし、近年利用されているオブジェクト指向の環境であるJava(登録商標)などでは、アプリケーションは動的に取り込むことが可能であり、実行するまでは、アプリケーション全体の挙動を知ることができない。
本発明は、プログラムの起動時や実行中において、ガーベージコレクション処理など、不要なデータを格納する記憶領域の回収処理を効率的に行うことを目的とする。また、同処理の処理時間を短縮することを目的とする。
本発明のプログラム実行装置は、
データを生成して使用するプログラムを実行する実行部と、
前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部と、
前記実行部が実行したプログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を割り当てる記憶領域割当部と、
前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放部と、
前記領域解放部が少なくとも一度、前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第1のデータ領域を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分部と、
前記実行部が実行したプログラムが生成したデータに、前記領域区分部が区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当部と、
前記データ領域割当部が前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納された期間に基づいて、前記領域区分部が区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当部が前記第2のデータ領域を割り当てたデータを移動するデータ移動部とを備え、
前記領域解放部は、
前記領域区分部が区分した第2の格納領域を前記領域区分部が区分した第1の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とする。
本発明では、記憶領域割当部が、プログラムが生成するデータに第1のデータ領域を割り当て、領域解放部が、記憶部を走査し、使用済のデータを格納するデータ領域を解放した後に、領域区分部が、第1のデータ領域が第1の格納領域に含まれるように記憶部を第1の格納領域と第2の格納領域に区分することにより、プログラムの起動時や実行中において、不要なデータを格納する記憶領域の回収処理の処理時間を短縮することができる。
また、本発明では、格納期間決定部が、プログラムが生成するデータを第2のデータ領域に格納する期間をデータの種類に応じて決定し、データ移動部が、当該期間に基づいて第2の格納領域に格納されたデータを第1の格納領域に移動することにより、プログラムの起動時や実行中において、不要なデータを格納する記憶領域の回収処理を効率的に行うことができる。
以下、本発明の実施の形態について、図を用いて説明する。
図1は、下記実施の形態におけるプログラム実行装置のハードウェア構成の一例を示す図である。
図1において、プログラム実行装置100は、プログラムを実行するCPU(Central Processing Unit)911を備えている。CPU911は、バス912を介してROM(Read Only Memory)913、RAM(Randam Access Memory)914、通信ボード915、CRT(Cathode Ray Tube)表示装置901、キーボード(K/B)902、マウス903、FDD(Flexible Disk Drive)904、磁気ディスク装置920、コンパクトディスク装置(CDD)905、プリンタ装置906と接続されている。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、磁気ディスク装置920は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード915は、ローカルエリアネットワーク(LAN)、インターネット、あるいはISDN(Integrated Services Digital Network)などのWAN(ワイドエリアネットワーク)に接続されている。
例えば、通信ボード915、K/B902、FDD904などは、入力部の一例である。また、例えば、通信ボード915、CRT表示装置901などは、出力部の一例である。
磁気ディスク装置920には、オペレーティングシステム(OS)921、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923は、CPU911、OS921、ウィンドウシステム922により実行される。
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。CPU911は、実行部の一例である。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明するものが、「〜ファイル」として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、磁気ディスク装置920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)などのその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。あるいは、ソフトウェアのみ、あるいは、ハードウェアのみ、あるいは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
また、以下に述べる実施の形態を実施するプログラム(データ領域管理プログラム)は、また、磁気ディスク装置920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)などのその他の記録媒体による記録装置を用いて記憶されても構わない。
また、プログラム実行装置100は、携帯電話機やゲーム機など、他の種類の電子機器であってもよい。
下記実施の形態は、動的にメモリ領域を確保して実行する処理系において、構造が複雑で一旦使用したメモリ領域が不要になったかどうかを判定するために決まったルートから順番にメモリ領域をたぐりマークをつけていき、マークのなかったメモリ領域が不要であるとして回収し、必要に応じてメモリ領域のコンパクションを行うガーベージコレクション処理に関するものである。
特に、動的に確保するメモリ空間を、動的に確保したメモリ領域がゴミとなるまでの、生存期間に着目して効率的にガーベージコレクションを行う方式に関して、メモリ空間を区分する方法に関するものである。
下記実施の形態は、確保の時期及び動的な領域の用途ごとに、メモリ領域が確保されてからゴミとなるまでの生存時間が異なることに着目し、ガーベージコレクション処理によるプログラム実行装置の負担を軽減することを目的としている。
具体的には、アプリケーション起動直後に、世代別ガーベージコレクションの準備手段を設けて、旧世代となるメモリ領域を設定することで、新世代から旧世代への移動処理やガーベージコレクション時に行われる生存期間の確認処理を削減する。また、動的なメモリ領域を確保する際に、そのメモリ領域の用途を示す情報(オブジェクト指向言語では、例えばクラスである。)を基に、属する世代を限定、又は世代に属する生存期間の長さを設定することで、新世代から旧世代への移動処理やガーベージコレクション時に行われる生存期間の確認処理を削減する。
実施の形態1.
現在のコンピュータの言語処理系においては、ユーザインタフェース(UI)を持たない言語処理系は存在しない。コンピュータの言語処理系のユーザインタフェースを構成する部品は、コンピュータを動作させるための基本ソフトウェアであるOSにライブラリとして取り込まれることにより、各アプリケーションソフトウェアの開発量を削減している。さらに、アプリケーションソフトウェアの配布が容易となっている。
このようなコンピュータの言語処理系の進歩により、言語処理系がユーザインタフェースの部品ごと又はユーザインタフェースの実装単位ごとに、動的に確保されるメモリ領域の用途を把握できることとなった。本実施の形態は、このようなコンピュータの特徴を利用することにより、世代別ガーベージコレクション処理において、動的なメモリ領域の確保の時期及びメモリ領域の用途ごとに、メモリ領域が確保されてからゴミとなるまでの生存時間が異なることに着目し、ガーベージコレクション処理によるプログラム実行装置の負担を軽減する。
図2は本実施の形態に係るプログラム実行装置の構成を示すブロック図である。
プログラム実行装置100は、メモリ8中の使用されていない記憶領域を回収するガーベージコレクション処理によって、回収した記憶領域をプログラムに動的に割り当てるプログラム実行環境を備えている。
アプリケーションプログラム1は、ユーザインタフェースライブラリ2を用いて、UI部品を構成し、メモリ領域を確保して処理を実行する場合には処理系7に対してメモリ領域の確保を要求し、使用者(ユーザ)との対話的な処理を行うプログラムである。
ユーザインタフェースライブラリ2は、アプリケーションプログラム1がUI機能を呼び出すために用意されているプログラムのライブラリである。ユーザインタフェースライブラリ2は、処理系7に対してメモリ領域の確保を要求する。
実行部71は、CPUなどを含み、アプリケーションプログラム1及びユーザインタフェースライブラリ2の処理を実行する。
動的メモリ確保部4は、記憶領域割当部41、データ領域割当部42を含む。記憶領域割当部41は、処理系7に対して行われたメモリ領域確保の要求に対して、メモリ8中の使用されていない記憶領域を提供する処理を行う。
世代別ガーベージコレクション部5は、データ移動部51、領域解放部52、領域整理部53、格納期間決定部54を含み、新世代(第2の格納領域)83の、現在プログラムに利用されている記憶領域(第2のデータ領域84)をマークして、使用されていない記憶領域(第2のデータ領域84)を回収するガーベージコレクターを実行する。また、ガーベージコレクターの処理のみでは、十分な大きさの連続したメモリ領域が確保できない場合には、メモリ8のコンパクションを実施する。さらに、新世代83において、要求されたメモリ領域を確保できない場合には、旧世代(第1の格納領域)81に対して同様の処理が実施される。
本実施の形態において、「(記憶部を)走査する」とは、メモリ8中の一旦使用したメモリ領域が不要になったかどうか(使用済であるかどうか)を判定するために決まったルートから順番にメモリ領域をたぐりマークをつけていくことをいい、「(データ領域を)解放する」又は「(メモリ領域を)回収する」とは、マークのなかったメモリ領域が不要であるとして当該メモリ領域を確保されていない状態に戻すことをいう。また、「(データ領域を)詰める」又は「(メモリの)コンパクションを行う」とは、メモリ8中に分散した記憶領域であって、確保されている記憶領域を一箇所に集めることをいう(使用されていない記憶領域を一箇所に集めることと同じ)。
メモリ(記憶部)8は、ガーベージコレクション処理の対象となり、アプリケーションプログラム1及びユーザインタフェースライブラリ2の実行に必要な記憶領域を有する。
世代別GC準備部3は、領域区分部31、ルート設定部32を含み、アプリケーションの起動時に、世代別ガーベージコレクション部5にガーベージコレクション処理とメモリコンパクション処理を実施させ、アプリケーションの起動時に確保した領域を、メモリ上で一箇所に集約させる。
処理系7は、動的メモリを管理する必要のあるような言語処理系又はOSを含む。本実施の形態では、処理系7は、C++、Java(登録商標)などのオブジェクト指向言語の処理系とし、メモリ領域の使用種別(メモリ領域の用途又はデータの種類ともいう。)とは、例えばメモリ領域を確保する際に、その役割が明確にされたクラスである。この場合、具体的には、確保されたメモリ領域の一部に書き込まれるオブジェクト(データの一例)のヘッダ情報などからクラスが判別される。ここで、処理系7がFORTRANやCなどの言語処理系であれば、メモリ確保関数を用意し、確保された関数を特定することにより、メモリ領域の用途を区別してもよい。
用途判定部6は、データ判別部61、設定期間保持部62、領域制限部63を含み、動的メモリ確保部4が行うメモリ領域確保の処理時に、確保されるメモリ領域の用途、即ちオブジェクトが属するクラスに応じて、そのオブジェクトが世代に属する生存期間を示す情報であるライフカウンタ(格納期間の一例)の値を返す。このように、本実施の形態では、動的なメモリ領域の用途は、オブジェクト指向言語におけるクラス名にて特定する。
また、用途判定部6は、世代別ガーベージコレクション部5が行うガーベージコレクション処理時に、ガーベージコレクション処理の対象となっている動的なメモリ領域の用途に対応させた世代指定の情報を返す。
次に、プログラム実行装置100の動作について、図3を用いて説明する。
図3は、プログラム実行装置100が行うアプリケーションプログラム1の起動から終了までの動作を示すフローチャートである。
まず、ステップS101で、実行部71において、ユーザインタフェースライブラリ2は、ユーザインタフェースの処理に必要なオブジェクトの作成を行う。ユーザインタフェースの処理に必要なオブジェクトには、プログラム実行装置100の画面などの出力部への出力を扱うオブジェクト、ユーザからの入力であるキーイベントなど、入力部からの入力を扱うオブジェクト、アプリケーションの終了イベントを扱うイベント管理オブジェクトを含む。また、その他にも、サウンドの再生、終了を扱うサウンド管理オブジェクトなども含む。これらのユーザインタフェースを管理するオブジェクトは、処理系7に対してメモリ領域確保の要求が行われると、処理系7の動的メモリ確保部4において、記憶領域割当部41により、動的なメモリ領域として確保される。動的メモリ確保部4の処理については、用途判定部6の説明とともに後述する。
次に、ステップS102で、実行部71において、ユーザインタフェースライブラリ2は、アプリケーションプログラム1内の開始処理関数の呼出を行う。アプリケーションプログラム1の開始処理関数では、アプリケーションが表示する画像、サウンド、文字列などのアプリケーションを構成するオブジェクトを生成する。これらのアプリケーションが利用するオブジェクトは、処理系7に対してメモリ領域確保の要求が行われると、処理系7の動的メモリ確保部4において、記憶領域割当部41により、動的なメモリ領域として確保される。
ここで、ステップS102が終了した直後の処理系7が管理するメモリ8の使用状況を図4に概略的に示して説明する。図4は、メモリ8のメモリ領域を管理する単位であるセルを、確保されている領域(黒っぽい部分)、確保されているが使用されていない領域(水玉模様の部分)、確保も使用もされていない領域(白い部分)に分類して示している。図4は、概念的に示したものであり、実際のメモリ領域は、図に示した数よりも多数のセルによって管理されている。
ステップS102が終了した直後のメモリ8には、ユーザインタフェースライブラリ2及びアプリケーションプログラム1が生成したオブジェクトが、確保されている領域(黒っぽい部分)として存在している。また、ユーザインタフェースライブラリ2及びアプリケーションプログラム1が生成したオブジェクトを構成するための中間データとして利用されたオブジェクトが、確保されているが使用されていない領域(水玉模様の部分)として残されている。
メモリ8に存在する確保されているが使用されていない領域(水玉模様の部分)に存在する中間データには、例えば、画面に描画できるデータ形式に展開前のデータ、つまりGIF形式などの画像データが存在する。GIF形式を代表とする画像データは、圧縮アルゴリズムを用いて圧縮されており、プログラム実行装置100の画面に描画するためにはデコード処理を行う必要がある。また、サウンドデータを生成する際にも同様な中間データが存在する。さらに、ユーザと対話的に処理を行うための文字列についても中間データが存在する。例えば、複数の文字列を連結した場合には、連結された文字列は新たなオブジェクトとして生成される。そのため、連結前の2つの文字列は確保されているが使用されていない領域(水玉模様の部分)として、メモリ8に存在することになる。
次に、世代別GC準備部3において、ステップS103の世代別GCの準備処理が行われる。世代別GC準備部3は、世代別ガーベージコレクション部5を用いて、ガーベージコレクション処理及びメモリコンパクション処理を実施する。
ここで、世代別ガーベージコレクション部5のメモリコンパクション処理が終了した直後の処理系7が管理するメモリ8の使用状況を図5に概略的に示して説明する。確保されているが使用されていない領域(水玉模様の部分)は、世代別ガーベージコレクション部5の領域解放部52が行うマーク処理及び回収処理により解放されている。また、領域整理部53が行うメモリコンパクション処理により、確保されている領域(黒っぽい部分)が前方に集められている状態となる。
世代別GC準備部3の領域区分部31は、世代別ガーベージコレクション部5に依頼して実施したガーベージコレクション処理及びメモリコンパクション処理の後、旧世代と新世代の境界面を設定する。旧世代と新世代の境界面は、現在使用中の領域から一定のメモリ量を加えた位置に設定する。図5には、その境界面を斜線部分で示している。世代別GC準備部3が設定した境界面は、世代別ガーベージコレクション部5が行うガーベージコレクション処理の世代の境界面として扱われることになる。ここで、現在使用中の領域のみが旧世代となるように境界面を設置してもよい。また、一度境界面を設置した後に、旧世代に含まれる領域を増やしてもよい。本実施の形態では、メモリコンパクション処理を行った後に世代を区分しているため、各世代のメモリ領域は全てが連続しているが、各世代がそれぞれ1箇所ずつにまとめられていなくてもよい。
図5で示した旧世代のメモリ領域に存在するオブジェクトは、アプリケーションプログラム1及びユーザインタフェースライブラリ2が生成したオブジェクトである。これらのオブジェクトは、アプリケーションが終了するまで使用され続ける可能性が非常に高く、旧世代として扱われるオブジェクトである。特に、ゲームなどのユーザインタフェースが多彩なアプリケーションは、起動時にこのようなオブジェクトを大量に生成する。
このように、アプリケーションの起動時に、世代別GC準備部3を設けて、S103を実施することにより、アプリケーションの起動時に生成されるオブジェクトを新世代から旧世代への複製無しに旧世代として扱うことができるため、アプリケーションが対話的に使用される段階での世代別ガーベージコレクション処理のプログラム実行装置の負担を軽減することが可能となる。
さらに、ステップS103の世代別GCの準備処理では、世代別GC準備部3のルート設定部32が、短命なオブジェクトを管理するオブジェクトをルートとして設定する処理を行う。本処理についての説明は後述する。
ステップS0104では、ユーザとの対話的な処理を行うためのイベント処理ループが開始される。プログラム実行装置100のユーザがキーを入力すると、入力したキーは、処理系7において動的メモリ確保部4によりイベントオブジェクトとして生成される。生成されるイベントオブジェクトには、入力されたキーごとの意味を示す情報が含まれている。例えば、右“→”キーが押されたこと、アプリケーションの終了要求キーが押されたことを示す情報が含まれている。そのイベントオブジェクトは、ユーザインタフェースライブラリ2のイベント管理オブジェクトに参照ポインタとしてつながれることで登録される。
ユーザインタフェースライブラリ2は、ステップS105において、イベント管理オブジェクトに登録されているイベントオブジェクトを参照し、そのイベントがアプリケーションの終了イベントであるかを確認する。終了イベントであれば、ステップS108に進み、アプリケーションプログラム1が生成した処理オブジェクトの終了処理及び解放処理が行われる。さらに、ステップS109に進み、ユーザインタフェースライブラリ2が生成した処理オブジェクトの終了処理及び解放処理が行われる。
ユーザインタフェースライブラリ2が、ステップS105において参照したイベントオブジェクトがアプリケーションの終了イベントでなかった場合、ステップS106に進む。ユーザインタフェースライブラリ2は、ステップS0106において、イベントに対応した処理を行う。例えば、右“→”キーを押したことを示すイベントであれば、アプリケーションプログラム1が起動時に登録した右“→”キーの関数を呼び出す。アプリケーションプログラム1が登録した右“→”キーの処理関数では、画像を右に移動させる処理や文字列を表示するなど、プログラム実行装置100のユーザとの対話的な処理を実行する。
画像を右に移動させる処理では、現在、画像が描画されている画面の領域を背景に描き直す処理や画像を右に移動した位置に描画する処理が行われる。このような描画処理を行う場合、描画処理を行うイベントして、ユーザインタフェースライブラリ2に対して処理の要求が行われる。ユーザインタフェースライブラリ2は、イベント管理オブジェクトに描画処理の要求イベントを登録する関数をアプリケーションプログラム1に対して公開している。アプリケーションプログラム1は、処理系7を用いて新たな描画イベントを生成し、イベント管理オブジェクトに登録する。また、文字列を表示する場合であれば、処理系7を用いて新たな文字列オブジェクトと描画イベントを生成し、イベント管理オブジェクトに登録する。
ステップS107は、イベント処理ループの終点を示しており、ここからステップS104に戻ってイベント処理が継続して行われる。以上のステップS104からステップS107に示すような処理を実行し、描画イベントのオブジェクトや文字列オブジェクトを生成しながら、ユーザインタフェースライブラリ2は、アプリケーションプログラム1の対話的な処理を実現する。また、ユーザインタフェースライブラリ2は、描画イベントを処理した後、イベント管理オブジェクトから処理した描画イベントの参照ポインタを破棄する。また、文字列の描画時に用いられた文字列オブジェクトの参照ポインタも破棄されることになる。
ユーザインタフェースライブラリ2が行うプログラム実行装置100のユーザとの対話的な処理では、短命なオブジェクトが大量に生成され、処理された後は使用されないオブジェクトがゴミとしてメモリ8が有するメモリ領域に存在することになる。
ここで、図6を用いて、短命なオブジェクトを管理するオブジェクトが旧世代として扱われる際のライトバリアの処理を説明する。図6は、メモリ8の記憶領域の旧世代、新世代を左右に分割した状態で示している。また、各オブジェクトの参照関係を示している。また、短命なオブジェクトを管理するオブジェクトとして、代表的なイベント管理オブジェクト201を例として記載している。
短命なオブジェクトを管理するオブジェクトは、短命なオブジェクトの参照ポインタを保持している。そのため、世代別ガーベージコレクション方式では、旧世代のオブジェクトに対して、新世代のオブジェクトへの参照ポインタを設定する場合に、ライトバリアと呼ばれる処理を行う必要がある。
イベント管理オブジェクト201が旧世代に属する場合、イベント管理オブジェクト201に登録されるオブジェクトの生成と破棄が繰り返される。そのため、イベント管理オブジェクト201のイベント(イベントオブジェクト)202の参照ポインタは、旧世代から新世代に対する参照として存在することになる。世代別ガーベージコレクション処理では、新世代に属するオブジェクトの参照関係を精査する。そのため、旧世代に属するオブジェクトに対して、新世代に属するオブジェクトへの参照ポインタが設定される際には、ライトバリアとして設定するオブジェクトが属する世代を確認し、その参照ポインタを特別な扱いとしてルートセット(ルート)として登録しなければならない。
つまり、イベント管理オブジェクト201のような新世代に属するイベント202への参照ポインタの保持及び廃棄を繰り返すオブジェクトが、旧世代に属した場合には、ライトバリアの確認処理が頻発する上に、ルートセットの登録と解除が繰り返されることになる。
前述したステップS103の世代別GCの準備処理で行う短命なオブジェクトを管理するオブジェクトをルートとして設定する処理を行う(具体的には、イベント管理オブジェクト201をルートとして設定する)ことで、ライトバリアの確認処理及びルートセットの登録と解除の処理を削減することが可能となる。
図7を用いて、イベント管理オブジェクト201がルートとして扱われる際のメモリ8の参照関係を説明する。図7は、メモリ8の記憶領域の旧世代、新世代を左右に分割した状態を示している。イベント管理オブジェクト201はルートとして扱われるため、新世代に属するイベント202を設定する際にもライトバリアの確認処理は不要となる。そのため、ルートセットへの登録と解除処理も不要となることがわかる。
このように、アプリケーションの起動時に、世代別GC準備部3を設けて、ステップS103において、短命なオブジェクトを扱う管理オブジェクトをルートとして設定することにより、ライトバリアの確認処理及びそれに伴うルートセットへの登録と解除が不要となるため、世代別ガーベージコレクション処理のプログラム実行装置の負担を軽減することが可能となる。
次に、本実施の形態において、プログラム実行装置100が、メモリ領域の用途によってデータの生存期間の設定を行う動作について、図8、図9、図10を用いて説明する。
図8は、プログラム実行装置100のメモリ領域確保の動作を示すフローチャートである。
最初に、図8を用いて動的メモリ確保部4がオブジェクトにメモリ領域を割り当てる際に、用途判定部6から世代の生存期間であるライフカウンタを取得する処理の流れを示す。
まず、ステップS201において、動的メモリ確保部4のデータ領域割当部42は、アプリケーションプログラム1又はユーザインタフェースライブラリ2から要求されたオブジェクトのサイズに基づき、ヒープ領域からメモリ領域を獲得する。
次に、ステップS202において、動的メモリ確保部4の格納期間決定部43は、用途判定部6のデータ判別部61に対して、確保したメモリ領域の用途の判定を依頼する。用途判定部6の設定期間保持部62は、オブジェクトのクラス名に基づいて、世代内の生存期間の長さを示すライフカウンタの値を動的メモリ確保部4に返す。
図9は、メモリ領域の用途であるクラス名とそれに対応するライフカウンタの設定値を保持するテーブルを示している。
Stringクラスは、文字列を保持するオブジェクトのクラスである。対話的なアプリケーションプログラム1においては、プログラム実行装置100を用いるユーザに対しての指示や状態表示などを行うために、Stringクラスのオブジェクトは短命なオブジェクトであるといえる。そのため、短命なオブジェクトが旧世代に移動した場合には改修の労力が必要となり、新世代領域に存在する期間を長く設定することで、少ない労力で解放されるメモリ領域を多くすることができる。本実施の形態では、Stringクラスのオブジェクトに設定するライフカウンタを100としてテーブルに登録している。
ただし、アプリケーション起動時に生成されたStringクラスのオブジェクトは短命ではない。アプリケーションプログラムが起動時に用意したStringクラスのオブジェクトは、例えば、操作メニューのリストに用いる文字列など、アプリケーションを利用する際に必要な文字列を含んでいる。このため、世代別GCの準備処理により、アプリケーション起動時に生成されたオブジェクトを旧世代に格納することは、Stringクラスについても効果があるといえる。
ByteArrayクラスは、画像やサウンドをロードする1バイト形式のデータの配列を保持するオブジェクトのクラスである。アプリケーションプログラム1においては、ByteArrayクラスのオブジェクトは、短命ではないといえる。アプリケーションの起動後に確保されるByteArrayクラスのオブジェクトには、ネットワークからダウンロードされた画像やサウンドなどの比較的大きなデータがあり、アプリケーションが終了するまで保持される可能性が高い。そのため、旧世代への移動が早い程、新世代に対して行われるガーベージコレクション処理量が低減される。本実施の形態では、ByteArrayクラスのオブジェクトに設定するライフカウンタを20としてテーブルに登録している。
Eventクラスは、描画やキーなどのイベントを示すオブジェクトのクラスである。対話的なアプリケーションを実現するためのユーザインタフェースライブラリ2が扱う描画やキーなどのイベントは、非常に短命であるといえる。対話的な処理を実現するためには、操作に対する画面表示など、プログラム実行装置100の反応時間(ターンアラウンドタイム)が短いことが必須であり、イベントは生成された後短時間でゴミとなる。そのため、旧世代への移動自体不要であり、世代に属する生存期間を示すライフカウンタを扱う必要もない。本実施の形態では、Eventクラスのオブジェクトに設定するライフカウンタは−1としてテーブルに登録し、生存期間を扱うことが不要であることを示している。
また、本実施の形態では、用途が不明なオブジェクトに対するライフカウンタにデフォルト値として5を設定している。
動的メモリ確保部4は、ステップS202において、用途判定部6から返されたライフカウンタの値を参照し、カウンタが指定されたオブジェクトであるか判定する。カウンタの値が指定されていないオブジェクトである場合には、ステップS203に進み、デフォルトのライフカウンタの値として、図9のテーブルに登録されている5を設定する。カウンタの値が指定されているオブジェクトである場合には、ステップS204に進み、ライフカウンタの値として、図9のテーブルに登録されているクラスごとのライフカウンタを設定する。つまり、Stringクラスのオブジェクトであれば、ライフカウンタとして100を設定する。ByteArrayクラスのオブジェクトであれば、ライフカウンタとして20を設定する。Eventクラスのオブジェクトであれば、ライフカウンタとして−1を設定する。
最後に、ステップS205において、動的メモリ確保部4は、アプリケーションプログラム1又はユーザインタフェースライブラリ2に対して、確保したオブジェクトのメモリ位置を返す。
図10は、プログラム実行装置100のガーベージコレクション処理におけるマーク処理の動作を示すフローチャートである。
まず、世代別ガーベージコレクション部5は、ステップS301から使用中のオブジェクト(マークオブジェクト)のループ処理を開始する。ループ処理の開始時点のマークオブジェクト、即ちルートには、クラスの静的なフィールドやスタック領域に引数として積まれているオブジェクト、世代別GC準備部3において設定されたイベント管理オブジェクトが含まれる。
次に、ステップS302において、世代別ガーベージコレクション部5の領域解放部52は、マークオブジェクトが保持する参照ポインタから参照先のオブジェクトを検索し、検索した参照先オブジェクトにマークを設定する。
ステップS303において、世代別ガーベージコレクション部5は、用途判定部6の領域制限部63に対してオブジェクトのクラス名を与えて、世代が指定されたオブジェクトであるか問合せを行う。世代が指定されたオブジェクトとは、新世代から旧世代に移動しないオブジェクトのことであり、本実施の形態ではEventクラスのオブジェクトである。ここで、例えば図9に示した図に世代指定の欄を設け、クラスごとに個別の世代を指定してもよい。
上述のステップS303では、世代別ガーベージコレクション部5は、用途判定部6に対しオブジェクトの世代指定の属性を問合せているが、問合せを行わない実装として、図8のS204において設定したライフカウンタが−1であることでも、世代が指定されたオブジェクトであることを判断することが可能である。
ステップS303において、世代が指定されたオブジェクトであれば、S304以降に行われるライフカウンタの減算手続きや旧世代への移動処理は不要である。ステップS307に進み、マークした参照先のオブジェクトをループ処理の対象であるマークオブジェクトとして追加する。ステップS308はマークオブジェクトに対するループの終点であり、マークオブジェクトが存在していれば、ステップS301に戻り、ステップS302からステップS307の処理を継続して行う。
ステップS303において、世代が指定されていないオブジェクトの場合には、ステップS304に進む。ステップS304において、世代別ガーベージコレクション部5のデータ移動部51は、参照先オブジェクトのライフカウンタを1減少させる。ライフカウンタを1減少させることで、新世代においての生存期間が1回のガーベージコレクションを生き延びたことを示す。
次に、ステップS305において、世代別ガーベージコレクション部5は、参照先オブジェクトのライフカウンタが0であるか判定する。ステップS305において、ライフカウンタが0ではない場合には、ステップS307に進み、マークした参照先のオブジェクトをループ処理の対象であるマークオブジェクトとして追加する。ステップS305において、ライフカウンタが0である場合には、ステップS306に進み、世代別ガーベージコレクション部5のデータ移動部51が、参照先オブジェクトを旧世代に複製し、新世代から削除する処理を実施する。
このように、用途判定部6を設けて、動的メモリ確保部4において獲得するオブジェクトごとに登録したライフカウンタを用いることにより、獲得したオブジェクトの用途ごとに新世代から旧世代への移動タイミングを調整することが可能となる。そのため、短命なオブジェクトが旧世代に移動した場合に必要となっていた回収の労力を低減することができ、少ない労力で新世代から回収されるメモリ領域を多くすることができる。
上記の実施の形態で説明したプログラム実行装置(情報記憶制御装置)は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
アプリケーションプログラムが起動した後に、ガーベージコレクション処理とメモリコンパクションを実施し、旧世代の領域を設定する世代別GC準備部を備えることを特徴とする。
前記情報記憶制御装置の世代別GC準備部は、さらに、
特定のメモリ領域を新世代のガーベージコレクション処理のルートとなるように設定する処理を追加したことを特徴とする。
また、上記の実施の形態で説明したデータ領域管理プログラム(情報記憶制御プログラム)は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御プログラムであって、
プログラムの実行に必要な記憶領域を有するメモリと、
アプリケーションプログラムが起動した後に、ガーベージコレクション処理とメモリコンパクションを実施し、旧世代の領域を設定する世代別GC準備部を備えることを特徴とする。
前記情報記憶制御装置の世代別GC準備部は、さらに、
特定のメモリ領域を新世代のガーベージコレクション処理のルートとなるように設定する処理を追加したことを特徴とする。
また、上記の実施の形態で説明したプログラム実行装置(情報記憶制御装置)は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて属する世代の生存期間を与える用途判定部を備えたことを特徴とする。
また、上記の実施の形態で説明したプログラム実行装置(情報記憶制御装置)は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御装置であって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて世代間の移動を制限することを判定する用途判定部を備えたことを特徴とする。
また、上記の実施の形態で説明したデータ領域管理プログラム(情報記憶制御プログラム)は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御プログラムであって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて属する世代の生存期間を与える用途判定部を備えたことを特徴とする。
また、上記の実施の形態で説明したデータ領域管理プログラム(情報記憶制御プログラム)は、
メモリ中の使用されていない記憶領域を回収する世代別ガーベージコレクション処理によって、回収した記憶領域をプログラムに割り当てる情報記憶制御プログラムであって、
プログラムの実行に必要な記憶領域を有するメモリと、
メモリ領域の用途に応じて世代間の移動を制限することを判定する用途判定部を備えたことを特徴とする。
実施の形態1におけるプログラム実行装置のハードウェア構成の一例を示す図。 実施の形態1に係るプログラム実行装置の構成を示すブロック図。 実施の形態1に係るプログラム実行装置のアプリケーションの起動から終了までの動作を示すフローチャート。 実施の形態1に係るプログラム実行装置における世代別GC準備処理前のメモリの使用状況を示す図。 実施の形態1に係るプログラム実行装置における世代別GC準備処理後のメモリの使用状況を示す図。 従来の世代別ガーベージコレクション方式におけるオブジェクトの参照関係を示す図。 実施の形態1に係るプログラム実行装置におけるオブジェクトの参照関係を示す図。 実施の形態1に係るプログラム実行装置のメモリ領域確保の動作を示すフローチャート。 実施の形態1に係るプログラム実行装置のメモリ領域の用途と対応するライフカウンタの設定値を保持するテーブルの一例。 実施の形態1に係るプログラム実行装置のガーベージコレクション処理におけるマーク処理の動作を示すフローチャート。
符号の説明
1 アプリケーションプログラム、2 ユーザインタフェースライブラリ、3 世代別GC準備部、4 動的メモリ確保部、5 世代別ガーベージコレクション部、6 用途判定部、7 処理系、8 メモリ、31 領域区分部、32 ルート設定部、41 記憶領域割当部、42 データ領域割当部、43 格納期間決定部、51 データ移動部、52 領域解放部、53 領域整理部、61 データ判別部、62 設定期間保持部、63 領域制限部、81 旧世代、82 第1のデータ領域、83 新世代、84 第2のデータ領域、100 プログラム実行装置、201 イベント管理オブジェクト、202 イベント、901 CRT表示装置、902 K/B、903 マウス、904 FDD、905 CDD、906 プリンタ装置、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 磁気ディスク装置、921 OS、922 ウィンドウシステム、923 プログラム群、924 ファイル群。

Claims (11)

  1. データを生成して使用するプログラムを実行する実行部と、
    前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部と、
    前記記憶部が複数の格納領域に区分される前に記プログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を割り当てる記憶領域割当部と、
    前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放部と、
    前記領域解放部が少なくとも一度、前記記憶部を走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第1のデータ領域を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分部と、
    前記領域区分部によって前記記憶部が前記複数の格納領域に区分された後に記プログラムが生成したデータに、前記領域区分部が区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当部と、
    前記データ領域割当部が前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納された期間に基づいて、前記領域区分部が区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当部が前記第2のデータ領域を割り当てたデータを移動するデータ移動部とを備え、
    前記領域解放部は、
    前記領域区分部が区分した第2の格納領域を前記領域区分部が区分した第1の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とするプログラム実行装置。
  2. データを生成して使用するプログラムを実行する実行部と、
    前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部と、
    前記記憶部を、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分部と、
    前記実行部が実行したプログラムが生成したデータに、前記領域区分部が区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当部と、
    前記データ領域割当部が前記第2のデータ領域を割り当てたデータの種類を判別するデータ判別部と、
    前記データ判別部が判別した結果に応じて、前記データ領域割当部が前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納される格納期間を決定する格納期間決定部と、
    前記格納期間決定部が決定した格納期間に基づいて、前記領域区分部が区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当部が前記第2のデータ領域を割り当てたデータを移動するデータ移動部と、
    前記領域区分部が区分した第2の格納領域を前記領域区分部が区分した第1の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放部とを備えることを特徴とするプログラム実行装置。
  3. 前記プログラム実行装置は、さらに、
    前記データ領域割当部が前記第2のデータ領域を割り当てたデータの種類に応じて、前記データ領域割当部が前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納される期間を予め設定した設定期間情報を保持する設定期間保持部を備え、
    前記格納期間決定部は、
    前記設定期間保持部が保持する設定期間情報を参照して、前記格納期間を決定することを特徴とする請求項2に記載のプログラム実行装置。
  4. 前記プログラム実行装置は、さらに、
    前記実行部が実行したプログラムが生成したデータの種類に応じて、前記実行部が実行したプログラムが生成したデータが格納されるデータ領域が含まれる格納領域を、前記領域区分部が区分した複数の格納領域のうち少なくとも1つに制限する領域制限部を備えることを特徴とする請求項2又は3に記載のプログラム実行装置。
  5. 前記プログラムは、データとして、オブジェクトを生成して使用するオブジェクト指向プログラムであり、
    前記実行部が実行したプログラムが生成したデータの種類は、オブジェクトの属するクラスであることを特徴とする請求項2から4までのいずれかに記載のプログラム実行装置。
  6. 前記プログラム実行装置は、さらに、
    前記記憶部の片側に前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を詰める領域整理部を備えることを特徴とする請求項1から5までのいずれかに記載のプログラム実行装置。
  7. 前記プログラムは、他のデータとの参照関係のあるデータを生成し、
    前記領域解放部は、
    前記記憶部が有する複数のデータ領域に格納されたデータ間の参照関係の起点となるルートから、当該参照関係を順番に辿ってデータをマークし、マークされていないデータを格納するデータ領域を解放し、
    前記プログラム実行装置は、さらに、
    特定のデータを前記ルートとして設定するルート設定部を備えることを特徴とする請求項1から6までのいずれかに記載のプログラム実行装置。
  8. データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるプログラム実行方法において、
    前記実行部が前記プログラムを実行する実行ステップと、
    前記記憶部が複数の格納領域に区分される前に記プログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を割り当てる記憶領域割当ステップと、
    前記記憶部を走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放ステップと、
    前記領域解放ステップで少なくとも一度、前記記憶部を走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第1のデータ領域を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分ステップと、
    前記領域区分ステップで前記記憶部が前記複数の格納領域に区分された後に記プログラムが生成したデータに、前記領域区分ステップで区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当ステップと、
    前記データ領域割当ステップで前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納された期間に基づいて、前記領域区分ステップで区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当ステップで前記第2のデータ領域を割り当てたデータを移動するデータ移動ステップとを備え、
    前記領域解放ステップは、
    前記領域区分ステップで区分した第2の格納領域を前記領域区分ステップで区分した第1の格納領域よりも高い頻度で走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放することを特徴とするプログラム実行方法。
  9. データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるプログラム実行方法において、
    前記実行部が前記プログラムを実行する実行ステップと、
    前記記憶部を、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分ステップと、
    前記実行ステップで実行したプログラムが生成したデータに、前記領域区分ステップで区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当ステップと、
    前記データ領域割当ステップで前記第2のデータ領域を割り当てたデータの種類を判別するデータ判別ステップと、
    前記データ判別ステップで判別した結果に応じて、前記データ領域割当ステップで前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納される格納期間を決定する格納期間決定ステップと、
    前記格納期間決定ステップで決定した格納期間に基づいて、前記領域区分ステップで区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当ステップで前記第2のデータ領域を割り当てたデータを移動するデータ移動ステップと、
    前記領域区分ステップで区分した第2の格納領域を前記領域区分ステップで区分した第1の格納領域よりも高い頻度で走査し、前記実行ステップで実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放ステップとを備えることを特徴とするプログラム実行方法。
  10. データを生成して使用するアプリケーションプログラムを実行する実行部と、前記実行部が実行したアプリケーションプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるデータ領域管理プログラムにおいて、
    前記記憶部が複数の格納領域に区分される前に前記アプリケーションプログラムが生成したデータに、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を割り当てる記憶領域割当処理と、
    前記記憶部を走査し、前記実行部が実行したアプリケーションプログラムが使用済のデータを格納するデータ領域を解放する領域解放処理と、
    前記領域解放処理が少なくとも一度、前記記憶部を走査し、前記実行部が実行したアプリケーションプログラムが使用済のデータを格納するデータ領域を解放した後に、前記記憶部を、前記第1のデータ領域を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分処理と、
    前記領域区分処理によって前記記憶部が前記複数の格納領域に区分された後に前記アプリケーションプログラムが生成したデータに、前記領域区分処理が区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当処理と、
    前記データ領域割当処理が前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納された期間に基づいて、前記領域区分処理が区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当処理が前記第2のデータ領域を割り当てたデータを移動するデータ移動処理とをコンピュータに実行させ、
    前記領域解放処理は、
    前記領域区分処理が区分した第2の格納領域を前記領域区分処理が区分した第1の格納領域よりも高い頻度で走査し、前記実行部が実行したアプリケーションプログラムが使用済のデータを格納するデータ領域を解放することを特徴とするデータ領域管理プログラム。
  11. データを生成して使用するプログラムを実行する実行部と、前記実行部が実行したプログラムが生成したデータを格納する複数のデータ領域を有する記憶部とを備えるプログラム実行装置を用いるデータ領域管理プログラムにおいて、
    前記記憶部を、前記記憶部が有する複数のデータ領域のうち、一部のデータ領域(以下、第1のデータ領域という。)を含む第1の格納領域と、前記記憶部が有する複数のデータ領域のうち、前記第1の格納領域に含まれない一部のデータ領域(以下、第2のデータ領域という。)を含む第2の格納領域とを含む複数の格納領域に区分する領域区分処理と、
    前記実行部が実行したプログラムが生成したデータに、前記領域区分処理が区分した第2の格納領域に含まれる第2のデータ領域を割り当てるデータ領域割当処理と、
    前記データ領域割当処理が前記第2のデータ領域を割り当てたデータの種類を判別するデータ判別処理と、
    前記データ判別処理が判別した結果に応じて、前記データ領域割当処理が前記第2のデータ領域を割り当てたデータが前記第2のデータ領域に格納される格納期間を決定する格納期間決定処理と、
    前記格納期間決定処理が決定した格納期間に基づいて、前記領域区分処理が区分した第1の格納領域に含まれる第1のデータ領域に前記データ領域割当処理が前記第2のデータ領域を割り当てたデータを移動するデータ移動処理と、
    前記領域区分処理が区分した第2の格納領域を前記領域区分処理が区分した第1の格納領域よりも高い頻度で走査し、前記実行部が実行したプログラムが使用済のデータを格納するデータ領域を解放する領域解放処理とをコンピュータに実行させることを特徴とするデータ領域管理プログラム。
JP2004360707A 2004-12-14 2004-12-14 プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム Expired - Fee Related JP4589095B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004360707A JP4589095B2 (ja) 2004-12-14 2004-12-14 プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004360707A JP4589095B2 (ja) 2004-12-14 2004-12-14 プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム

Publications (2)

Publication Number Publication Date
JP2006171927A JP2006171927A (ja) 2006-06-29
JP4589095B2 true JP4589095B2 (ja) 2010-12-01

Family

ID=36672641

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004360707A Expired - Fee Related JP4589095B2 (ja) 2004-12-14 2004-12-14 プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム

Country Status (1)

Country Link
JP (1) JP4589095B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5044816B2 (ja) * 2007-09-06 2012-10-10 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクトを記憶・管理するシステム
JP6613268B2 (ja) * 2017-06-02 2019-11-27 キヤノン株式会社 情報処理装置および資源管理方法
KR20200027204A (ko) * 2018-09-04 2020-03-12 삼성전자주식회사 전자장치 및 그 제어방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002278828A (ja) * 2001-03-21 2002-09-27 Sony Corp ガーベージコレクション実行方法、コンピュータプログラム、プログラム格納媒体、および情報処理装置
JP2003323336A (ja) * 2002-05-08 2003-11-14 Hitachi Ltd ヒープメモリ管理方法およびそれを用いた計算機システム
WO2004099985A1 (ja) * 2003-05-09 2004-11-18 Fujitsu Limited 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002278828A (ja) * 2001-03-21 2002-09-27 Sony Corp ガーベージコレクション実行方法、コンピュータプログラム、プログラム格納媒体、および情報処理装置
JP2003323336A (ja) * 2002-05-08 2003-11-14 Hitachi Ltd ヒープメモリ管理方法およびそれを用いた計算機システム
WO2004099985A1 (ja) * 2003-05-09 2004-11-18 Fujitsu Limited 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体

Also Published As

Publication number Publication date
JP2006171927A (ja) 2006-06-29

Similar Documents

Publication Publication Date Title
US6757890B1 (en) Methods and apparatus for enabling local Java object allocation and collection
US7310718B1 (en) Method for enabling comprehensive profiling of garbage-collected memory systems
US6820101B2 (en) Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects
JP2004005486A (ja) コンピュータアプリケーションのメモリ使用状況を最適化する方法
KR20010025112A (ko) 메모리 재사용 방법
WO2006124142A2 (en) Implementation for collecting unmanaged memory
US6804761B1 (en) Memory allocation system and method
JP4537771B2 (ja) データベースのサイズを変更するための方法、コンピュータ可読媒体およびシステム
US10102047B2 (en) In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
US20210209057A1 (en) File system quota versioning
JPH10320248A (ja) 実行時ルックアップ及び読出し専用アクセス用バイナリイメージへファイルを埋込むための装置及びその方法
US20070203959A1 (en) Apparatus and method for managing resources using virtual ID in multiple Java application environment
JP4295805B2 (ja) メモリ管理装置、メモリ管理方法、メモリ管理プログラム及び該プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2004118789A (ja) プログラムを最適化する制御をコンピュータに行わせるコンピュータ・プログラム及び、プログラムの最適化を行う最適化処理装置
US20090228537A1 (en) Object Allocation System and Method
JP4589095B2 (ja) プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム
CN112559127B (zh) 虚拟机创建方法、装置、主机及存储介质
JP2002278828A (ja) ガーベージコレクション実行方法、コンピュータプログラム、プログラム格納媒体、および情報処理装置
JP5381624B2 (ja) メモリ管理機能を有するプログラム及び装置
EP3987402A1 (en) Arena-based memory management
JP4504756B2 (ja) Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム
JP2003241967A (ja) プログラム実行装置およびその方法、並びにそこで実行されるプログラム
CN109923527B (zh) 可变类型建立器
CN111459412A (zh) 磁盘管理方法、装置以及电子设备
JP2014067186A (ja) 制御システム、制御方法、及び、制御プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100727

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100819

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: 20100907

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100909

R150 Certificate of patent or registration of utility model

Ref document number: 4589095

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20130917

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees