JP4773143B2 - 記憶管理装置及びコンピュータプログラム - Google Patents

記憶管理装置及びコンピュータプログラム Download PDF

Info

Publication number
JP4773143B2
JP4773143B2 JP2005184233A JP2005184233A JP4773143B2 JP 4773143 B2 JP4773143 B2 JP 4773143B2 JP 2005184233 A JP2005184233 A JP 2005184233A JP 2005184233 A JP2005184233 A JP 2005184233A JP 4773143 B2 JP4773143 B2 JP 4773143B2
Authority
JP
Japan
Prior art keywords
storage
identifier
data
storage area
unit
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
JP2005184233A
Other languages
English (en)
Other versions
JP2007004506A (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 JP2005184233A priority Critical patent/JP4773143B2/ja
Publication of JP2007004506A publication Critical patent/JP2007004506A/ja
Application granted granted Critical
Publication of JP4773143B2 publication Critical patent/JP4773143B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、データを記憶する記憶装置を管理する記憶管理装置に関する。特に、動的に記憶領域を確保するプログラムを実行するプログラム実行装置に用いる記憶管理装置に関する。
データを記憶する記憶領域を動的に確保するプログラム実行装置では、記憶領域を管理する記憶管理装置に対して、記憶領域の確保を要求し、それに応じて記憶管理装置が空いている記憶領域を確保する。
確保した記憶領域が不用になった場合には、不用になった記憶領域を再利用することにより、記憶領域を有効に活用する。
不用になった記憶領域を明示的に解放する命令をプログラム中に記述しておき、この命令を実行することによって、その記憶領域が再利用可能であることを記憶管理装置に知らせる方式がある。
また、確保した記憶領域が不用になったか否かを記憶管理装置が判別する方式もある。これはガーベージコレクション(Garbage Collection:以下「GC」という。)と呼ばれ、効率的なやり方の研究が盛んに行なわれている(例えば、非特許文献1)。
GCには、まだ不用となっていない記憶領域が記憶しているデータを移動させるものがある。
これは、移動法GCのように、GCのやり方そのものに起因する場合もある。
また、確保されている記憶領域が断片化すると、連続した記憶領域の確保ができなくなる場合があるので、未使用あるいは再利用可能な記憶領域を連続させるために、確保されている記憶領域が記憶しているデータを移動させる場合もある。
このように、データを記憶する記憶領域を動的に確保するプログラム実行装置では、プログラム実行時に、記憶領域の確保を要求し、記憶管理装置が実際に記憶領域を確保するまでは、データを記憶する記憶領域がわからない。
また、記憶管理装置がデータの移動を伴うGCを行なう場合には、データを記憶する記憶領域を既に確保している場合であっても、次にそのデータにアクセスするときには、異なる記憶領域がそのデータを記憶している可能性がある。
そこで、従来、プログラム中には、データを識別するデータ識別子(例えば、番号、変数名など)を記述し、データ識別子と、そのデータを記憶した記憶領域を識別する記憶識別子(例えば、メモリのアドレスなど)との対応関係をテーブルとして記憶する方式がある。
プログラム実行装置がプログラムを実行する際は、このテーブルを参照して、実際にデータを記憶している記憶領域を求め、その記憶領域にアクセスすることによって、そのデータにアクセスする。
また、記憶管理装置がそのデータを異なる記憶領域に移動させた場合には、テーブルの記憶識別子を書き換えることにより、プログラム実行装置が正しくそのデータにアクセスできるようにする。
例えば、Java(登録商標:ジャバ)のクラスファイル(プログラムの一種)を実行するJavaVM(Virtual Machine:仮想機械、プログラム実行装置の一種)は、複雑に絡み合った多数のテーブルを参照して、実際にデータを記憶している記憶領域を求め、操作すべきデータにアクセスする。
図25は、JavaVMが実行するクラスファイル500の一例を示す図である。
クラスファイル500は、ヘッダー510、コンスタントプール情報520、クラス情報530、フィールド情報540、メソッド情報550、属性情報560などを有する。
このうち、コンスタントプール情報520には、データを参照するための情報(コンスタントプールと呼ばれる)が含まれている。
コンスタントプール情報520は、エントリー数521、コンスタントプール(#1〜#n)522〜529を有する。
エントリー数521は、コンスタントプール(#1〜#n)の数を示す。
コンスタントプール(#1〜#n)522〜529は、それぞれタグ591、内容592を有する。
タグ591は、そのコンスタントプールの意味を示す。
内容592は、タグ591が示す意味によって、異なる可変長のデータである。
例えば、タグ591が1の場合、そのコンスタントプールは文字列情報を意味している。内容592は、文字列の長さ(バイト数)とUTF(Unicode Translation Format)−8形式の文字コードを示す。
また、タグ591が9の場合、そのコンスタントプールはフィールド参照情報を意味している。内容592は、クラス参照(そのフィールドが属するクラスについての情報を持つコンスタントプールの参照番号)と名前型参照(そのフィールドの名前及び型についての情報を持つコンスタントプールの参照番号)を示す。
あるいは、タグ591が12の場合、そのコンスタントプールは名前型参照情報を意味している。内容592は、名前参照(名前についての文字列情報を持つコンスタントプールの参照番号)と型参照(型についての文字列情報を持つコンスタントプールの参照番号)を示す。
JavaVMが実行するプログラムであるバイトコードは、メソッド情報550の中にある。
バイトコードでは、コンスタントプールの参照番号を指定することにより、操作の対象となるデータを示す。
図26は、メソッド情報550に含まれるバイトコード580の一部と、コンスタントプール情報520の内容の一例を示す図である。
なお、この図では理解を助けるため、コンスタントプールに番号593を付してあるが、これはクラスファイル500のコンスタントプール情報520に記述されているものではない。
この例に示したバイトコード580の一部は、データ操作命令581が示すデータ操作を、参照番号582が示すフィールド(データ)に対して行なうことを指令するものである。
この例において、参照番号582は「6」なので、番号593が「6」のコンスタントプール(#6)を参照する。
コンスタントプール(#6)は、フィールド参照情報(タグ591が「9」)を示している。内容592により、コンスタントプール(#1)を見れば、操作しようとしているフィールドが属するクラスについての情報が得られ、コンスタントプール(#9)を見れば、操作しようとしているフィールドの名前及び型についての情報が得られることがわかる。
そこで、コンスタントプール(#1)を参照する。コンスタントプール(#1)は、クラス参照情報(タグ591が「7」)を示している。内容592により、コンスタントプール(#20)を見れば、そのクラスの名前についての情報が得られることがわかる。
コンスタントプール(#20)を参照すると、そのクラスの名前が「Sample」であることがわかる。
また、操作しようとしているフィールドの名前及び型についての情報を得るためには、コンスタントプール(#9)を参照する。コンスタントプール(#9)は、名前型参照情報(タグ591が「12」)を示している。内容592により、コンスタントプール(#27)を見れば、そのフィールドの名前についての情報が得られ、コンスタントプール(#17)を見れば、そのフィールドの型についての情報が得られることがわかる。
コンスタントプール(#27)を参照すると、そのフィールドの名前が「Value」であることがわかる。
また、コンスタントプール(#17)を参照すると、そのフィールドの型が「I」(整数型を意味する)であることがわかる。
以上より、データ操作命令581が操作しようとしているデータは、Sampleという名前のクラスの、Valueという名前の整数型フィールドであることがわかる。
フィールドの詳しい定義情報は、フィールド情報540にある。
しかし、クラスファイル500はクラスごとに存在するので、Sampleという名前のクラスについて定義したクラスファイル500のフィールド情報540を参照する必要がある。
そのクラスファイル500が定義するクラスの名前等についての情報は、クラス情報530にある。
また、そのフィールドが上位のクラスから継承したフィールドであれば、上位のクラスについて定義したクラスファイル500を参照しなければならない。
そのクラスファイル500が定義するクラスの上位クラスの名前等についての情報も、クラス情報530にある。
このように、データ操作命令581を1つ実行するためには、複雑に絡み合ったテーブルを参照して、操作の対象となるデータを求める必要がある。
そこで、従来、このような複雑なテーブル参照を少なくして、データ操作の速度を向上することが行なわれている。
すなわち、1回目の実行で、テーブルを参照して操作の対象となるデータを求めたら、2回目以降は、1回目の結果を用いて、データを操作する。
例えば、特許文献2は、操作すべきデータを求めたのちに、シンボル参照(例えば、参照番号)を、数値参照(例えば、記憶領域のアドレス)に書き換える構成を開示している。
特許文献3の「従来技術」は、特許文献2の方式をもっと詳しく説明している。
すなわち、インストラクション(データ操作命令)を実行する際、コンスタントプールエントリ番号(参照番号)を、フィールドテーブルのインデックス番号に書き換えるとともに、インストラクションも、解決済インストラクションに書き換える構成である。
また、特許文献3は、コンスタントプールを内部的に保持するテーブルに、フィールドテーブルのインデックス番号を記憶する領域を設け、1回目の実行でインデックス番号を書き込む。
これにより、書き換えられたインストラクション(データ操作命令)を実行した場合だけでなく、同じコンスタントプールエントリ番号(参照番号)を参照する別のインストラクションを実行する場合にも、テーブルを辿る必要がなくなる。
ここで、フィールドテーブルとは、そのフィールドのデータを実際に記憶している記憶領域のアドレスを記憶したものである。
したがって、このJavaVMは、インデックス番号によってフィールドテーブルを参照し、記憶領域のアドレスを求めて、その記憶領域が記憶したデータを操作する。
GCにより、そのフィールドのデータを実際に記憶している記憶領域が変わった場合には、フィールドテーブルが記憶したアドレスを書き換えて、常に正しくそのデータにアクセスできるようにする。
特開平2−22745号公報 特開平6−230976号公報 特開2001−256058号公報 「ごみ集めの基礎と最近の動向」、情報処理学会会誌、Vol.35、No.11、1994年11月、991ページ〜1032ページ
テーブル参照には、通常、以下のような段階が必要である。
まず、参照番号に、テーブルの1レコード長を乗じる(1レコード長が2のべき乗であれば、シフト演算で代用できる)。
次に、これをテーブルの基底アドレス(参照番号0のデータを記憶している記憶領域の記憶識別子)に加える。
そして、そのアドレスの記憶領域から、目的とするデータを記憶した記憶領域のアドレス(記憶識別子)を読み出す。
最後に、そのアドレスの記憶領域にアクセスすることにより、目的とするデータを操作する。
このような段階を踏むことは、1つの命令を処理するのにかかる時間の増大につながる。
また、テーブルが複雑に絡み合っている場合には、テーブルを参照して得たデータは、目的とするデータを記憶した記憶領域のアドレスではなく、別のテーブルの参照番号であり、そのテーブルを参照して、目的とするデータを記憶した記憶領域のアドレスを得ることができる構成となっている場合もある。
テーブル自体が移動する可能性がある場合には、テーブルの基底アドレスを求めるために、別のテーブルを参照する必要がある場合もある。
このような構成であれば、1つの命令を処理するのにかかる時間は更に増大する。
本発明は、例えば、上記のような課題を解決し、命令の処理時間を短縮し、プログラムの実行速度を速くすることを目的とする。
本発明の記憶管理装置は、
データを記憶する複数の記憶領域を有する記憶装置と、
上記記憶領域がデータを記憶しているか否かを判断する空き領域判断部と、
データを記憶する記憶領域の確保を要求する領域確保要求を取得する領域確保要求取得部と、
上記領域確保要求取得部が上記領域確保要求を取得した場合に、記憶領域がデータを記憶していないと上記空き領域判断部が判断した記憶領域を、上記データを記憶する記憶領域として確保し、確保した記憶領域を識別する記憶識別子を通知する領域確保部と、
上記領域確保要求取得部が領域確保要求を取得した場合に、上記領域確保部が確保する記憶領域が記憶するデータの種別を取得し、データ種別とする種別取得部と、
上記種別取得部が取得したデータ種別が所定のデータ種別であるか否かを判断する種別判断部と、
上記種別取得部が取得したデータ種別が所定のデータ種別であると上記種別判断部が判断した場合に、上記記憶領域のうち所定の記憶領域を上記領域確保部に確保させ、上記種別取得部が取得したデータ種別が所定のデータ種別ではないと上記種別判断部が判断した場合に、上記記憶領域のうち所定の記憶領域以外の記憶領域を上記領域確保部に確保させるデータ割振り部と、
を有することを特徴とする。
本発明によれば、GCなどによる移動が少ないデータをあらかじめ判別して、所定の記憶領域に記憶させるので、データの移動が少なくなり、GCなどによる負荷が減るので、プログラムの実行速度が速くなるとの効果を奏する。
ここでは、JavaVMを例にとって説明するが、この記憶管理装置を有する装置は、JavaVMに限らず、C++、Perl(パール)など他のプログラム言語によって記述されたプログラムを実行する装置であっても構わない。
実施の形態1.
実施の形態1を、図1〜図6を用いて説明する。
図1は、この実施の形態における記憶管理装置100の外観の一例を示す図である。
図1において、記憶管理装置100は、システムユニット910、CRT901(Cathode Ray Tube:陰極線管表示装置)、K/B902(Keyboard:キーボード)、マウス903、CDD905(Conpact Disk Drive:コンパクトディスク装置)、プリンタ装置906、スキャナ装置907を備え、これらはケーブルで接続されている。
さらに、記憶管理装置100は、FAX機932、電話器931とケーブルで接続され、また、LAN942(Local Area Network:ローカルエリアネットワーク)、ゲートウェイ941を介してインターネット940に接続されている。
図2は、この実施の形態における記憶管理装置100のハードウェア構成の一例を示す図である。
図2において、記憶管理装置100は、プログラムを実行するCPU911(Central Processing Unit:中央処理装置)を備えている。CPU911は、バス912を介してROM913(Read Only Memory)、RAM914(Random Access Memory)、通信ボード915、CRT901、K/B902、マウス903、FDD904(Flexible Disk Drive)、HDD920(Hard Disk Drive:磁気ディスク装置)、CDD905、プリンタ装置906、スキャナ装置907と接続されている。
RAM914は、揮発性メモリの一例である。ROM913、FDD904、CDD905、HDD920は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。
通信ボード915は、FAX機932、電話器931、LAN942等に接続されている。
例えば、通信ボード915、K/B902、スキャナ装置907、FDD904などは、入力部の一例である。
また、例えば、通信ボード915、CRT901などは、出力部の一例である。
ここで、通信ボード915は、LAN942に限らず、直接、インターネット940、或いはISDN等のWAN(ワイドエリアネットワーク)に接続されていても構わない。直接、インターネット940、或いはISDN等のWANに接続されている場合、記憶管理装置100は、インターネット940、或いはISDN等のWANに接続され、ゲートウェイ941は不用となる。
磁気ディスク装置920には、OS921(オペレーティングシステム)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923は、CPU911、OS921、ウィンドウシステム922により実行される。
上記プログラム群923には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU911により読み出され実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明するものが、「〜ファイル」として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、RAM914もしくはHDD920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、ROM913に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、ハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
また、以下に述べる実施の形態を実施するプログラムは、また、RAM914もしくはHDD920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)等のその他の記録媒体による記録装置を用いて記憶されても構わない。
図3は、この実施の形態における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図である。
図3において、記憶管理装置100は、記憶装置110、領域確保要求取得部121、空き領域判断部122、領域確保部123、記憶識別子記憶部124、種別取得部131、種別判断部132、データ割振り部133、記憶識別子取得部151、データ操作部153などを有する。
記憶装置110は、複数の記憶領域を有し、記憶領域はアドレス(記憶識別子の一例)を有する。外部からアドレスを指定することにより、記憶装置110内の任意の記憶領域にアクセスできる。
記憶装置110は、例えば、RAM914、HDD920などを用いて実現する。
領域確保要求取得部121は、データを記憶する記憶領域の確保を要求する領域確保要求を取得する。領域確保要求は、外部の(あるいは記憶管理装置100を有する)プログラム実行装置等が通知するものである。領域確保要求は、電気信号などによるもののほか、特定アドレスの記憶領域に対する特定のデータの書き込み、サブルーチンの呼出しなどにより、記憶管理装置100に通知される。
領域確保要求取得部121は、例えば、HDD920などが記憶したプログラム等をCPU911が実行することにより実現する。以下の各部も同様である。しかし、その一部あるいは全部をハードウェアにより実現してもよい。
空き領域判断部122は、記憶領域が未使用あるいは使用済であるか否かを判断する。
例えば、ポインタを用いて、空き領域の先頭アドレスを指しておき、領域確保部123が記憶領域を確保するたびにポインタを進めれば、ポインタが示すアドレス以降のアドレスを有する記憶領域は、未使用であると判断する。
あるいは、それぞれの記憶領域に使用中であるか否かを示すフラグを設け(各記憶領域がフラグを記憶してもよいし、別の記憶領域に、各記憶領域に対応するフラグをまとめて記憶してもよい)、そのフラグを読み出すことにより、使用中であるか否かを判断してもよい。この場合、領域確保部123が記憶領域を確保したときに、そのフラグをセットして、その記憶領域が使用中になったことを示す。
あるいは、GCを用いて使用中の記憶領域のフラグをマークし、マークされなかった記憶領域は、再利用可能であると判断してもよい。
領域確保部123は、領域確保要求によって要求された大きさ(記憶領域の数)の記憶領域を確保する。確保する記憶領域は、空き領域判断部122が未使用あるいは使用済であると判断した記憶領域である。
要求された記憶領域が確保できない場合には、GCによって、使用済の(再利用可能な)記憶領域を探してもよい。
記憶識別子記憶部124は、領域確保部123が確保した記憶領域のアドレスを、記憶領域に記憶する。複数の記憶領域を確保した場合には、代表する記憶領域の記憶識別子を1つ記憶することとしてもよい。
なお、領域確保部123が確保した記憶領域のアドレスは、領域確保要求を通知したプログラム実行装置等に通知してもよい。
領域確保部123が確保した記憶領域のアドレスを記憶する記憶領域は、あらかじめ決められたアドレスを有する記憶領域であってもよい。あるいは、他の領域確保要求によって確保された記憶領域であってもよい。
種別取得部131は、領域確保要求によって領域確保部123が確保する記憶領域が記憶するデータの種別(データ種別)を取得する。データ種別は、領域確保要求とともに、領域確保要求を通知したプログラム実行装置等が通知するものである。
あるいは、領域確保要求の内容(例えば、確保を要求する記憶領域の大きさなど)に基づいて、データ種別を判別してもよい。
種別判断部132は、種別取得部131が取得したデータ種別が、所定のデータ種別であるか否かを判断する。
例えば、JavaVMにおいて、あるフィールドを操作する場合、そのフィールドの定義情報やそのフィールドの属するクラスの定義情報を得るため、そのフィールドの属するクラスを定義したクラスファイル500を読み込み、それを内部形式に変換して記憶するための記憶領域を確保する必要がある。これには、クラスファイル500に含まれるコンスタントプール情報520などの定義情報が含まれる。
また、そのクラスのインスタンス(実体)を生成し、生成したインスタンスのフィールドを操作する場合、インスタンスの内容を記憶するための記憶領域を確保する必要がある。ここでは、これを実体情報と呼ぶ。
実体情報を記憶するための記憶領域は、そのインスタンスが消滅すれば必要なくなる。
例えば、処理の都合上必要となる一時的なインスタンスであれば、その処理が終わればすぐに必要なくなる。
あるいは、そのインスタンスに対する参照を記憶した変数が存在しなくなれば、そのインスタンスに対する操作は不可能となるので、そのインスタンスは必要なくなる。
そのインスタンスに対する参照を記憶した変数が存在しなくなるのは、例えば、その変数に他の値を代入した場合や、変数のスコープの外に処理が移ったため、変数そのものが消滅した場合などがある。
これに対し、定義情報を記憶するための記憶領域は、JavaVMによるプログラムの実行が終了するまで、再利用できない。
同じクラスのインスタンスは多数存在し、そのすべてが同じ定義情報を共有するからである。
また、そのクラスのインスタンスがすべて必要なくなった場合であっても、また、新しくそのクラスのインスタンスを生成するかもしれない。そのときに、もう一度クラスファイル500を読み込んでもよいが、処理が遅くなるので、一度記憶した定義情報は、実行が終了するまで保持しておいたほうがよい。
このように、記憶領域を確保するに際して、そこに記憶するデータのデータ種別によって、寿命の長いもの、短いものが存在する。
そこで、種別判断部132は、そのデータ種別が寿命の長いグループ(例えば、定義情報)のものであるか、寿命の短いグループ(例えば、実体情報)のものであるかを判断する。
データ割振り部133は、記憶領域を2つグループに分け、種別判断部132の判断結果に基づいて、寿命の長いグループと寿命の短いグループとで、異なる記憶領域のグループを、領域確保部123に確保させる。
記憶識別子取得部151は、記憶識別子記憶部124が記憶領域に記憶したアドレスを読み出す。
データ操作部153は、記憶識別子取得部151が読み出したアドレスを有する記憶領域にアクセスし、その記憶領域が記憶したデータを操作する。
例えば、プログラム実行装置からの指令に基づいて、データの読み出し、書き込み、演算等を行なう。
図4は、この実施の形態において、記憶管理装置100が記憶領域確保処理を行なう際の、処理の流れの一例を示すフローチャート図である。
S11において、領域確保要求取得部121が領域確保要求を取得する。
S12において、種別取得部131がデータ種別を取得する。
S13において、種別判断部132がデータ種別を判断する。
S14において、データ割振り部133がデータ種別に基づいて、領域確保部123に確保する記憶領域のグループを指示する。
S15において、空き領域判断部122が確保可能な空き領域を判断する。
S16において、領域確保部123は、データ割振り部133からの指示にしたがって、空き領域判断部122が確保可能であると判断した記憶領域を確保する。
S17において、記憶識別子記憶部124は、領域確保部123が確保した記憶領域の記憶識別子を記憶領域に記憶する。
図5は、この実施の形態において、記憶領域201〜220のグループ分けと、そこに記憶するデータの内容の一例を示す図である。
この図において、記憶領域201は、記憶領域201〜220のなかで、一番アドレスが下位の記憶領域である。また、記憶領域220は、一番アドレスが上位の記憶領域である。
定義情報記憶領域250は、寿命の長いグループである定義情報を記憶するための記憶領域のグループである。
実体情報記憶領域260は、寿命の短いグループである実体情報を記憶するための記憶領域のグループである。
この例では、どちらのグループに必要な記憶領域の数がどれほどになるか不明であるため、定義情報記憶領域250と実体情報記憶領域260の境目はあいまいになるように構成している。
すなわち、定義情報記憶領域250に領域を確保する場合、記憶領域201から確保していき、徐々にアドレスが上位の記憶領域を確保する。
また、実体情報記憶領域260に領域を確保する場合、記憶領域220から確保していき、徐々にアドレスが下位の記憶領域を確保する。
これにより、定義情報記憶領域250に記憶すべきデータのほうが多ければ、アドレスが中位の記憶領域(例えば、記憶領域210など)は、定義情報記憶領域250のグループに入る。
逆に、実体情報記憶領域260に記憶すべきデータのほうが多ければ、記憶領域210は、実体情報記憶領域260に入る。
しかし、最初からそれぞれのグループに入る記憶領域を決めておいてもよい。
この例では、定義情報251〜253を記憶するための記憶領域を、定義情報記憶領域250に確保している。また、実体情報261〜267を記憶するための記憶領域を、実体情報記憶領域260に確保している。その結果、未使用の記憶領域は、記憶領域208だけとなっている。
図6は、この実施の形態において、GCを行なって、再利用可能な記憶領域を探し、記憶領域が記憶したデータを移動させることによって、確保できる記憶領域を増やす場合の動作の一例を示す図である。
この例では、実体情報261,263,265が不用となっていたので、実体情報を移動させることにより、確保できる記憶領域を増やしている。
このとき、定義情報251〜253のほうは不用とならないので、データを移動する必要がないし、不用となっているか否かを判断する必要もない。
このように、寿命の長いデータと寿命の短いデータとを、データの種別によってあらかじめ区別し、異なる場所に記憶領域を確保することにより、GCを行なう際の計算量を減らし、移動させるデータの量を減らすことができるので、GCにかかる時間が少なくなり、プログラムの実行速度が上がるという効果を奏する。
実施の形態2.
実施の形態2を、図1、図2、図7〜図9を用いて説明する。
この実施の形態における記憶管理装置100の外観及びハードウェア構成は、実施の形態1において図1及び図2を用いて説明した記憶管理装置100と同様なので、ここでは説明を省略する。
図7は、この実施の形態における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図である。
図7において、記憶管理装置100は、記憶装置110、領域確保要求取得部121、空き領域判断部122、領域確保部123、記憶識別子記憶部124、種別判断部132、領域判断部142、データ移動部143、記憶識別子書換部144、記憶識別子取得部151、データ操作部153を有する。
このうち、記憶装置110、領域確保要求取得部121、空き領域判断部122、記憶識別子記憶部124、記憶識別子取得部151、データ操作部153は、実施の形態1において図3を用いて説明したものと同様なので、ここでは説明を省略する。
領域確保部123は、領域確保要求によって要求された大きさ(記憶領域の数)の記憶領域を確保する。確保する記憶領域は、空き領域判断部122が未使用あるいは使用済であると判断した記憶領域である。
このとき、データ種別にかかわらず、記憶領域全体を1つのグループとして、領域を確保する。
種別判断部132は、記憶領域が記憶したデータの種別を判断する。
例えば、領域確保要求とともに、プログラム実行装置が通知したデータ種別を、この実施の形態では図示していない種別取得部が取得し、確保した記憶領域、あるいは別の記憶領域に、やはり図示していない種別記憶部が記憶しておく。種別判断部132は、これを読み出して、データ種別を判断する。
あるいは、その記憶領域に対する参照の種類によって、データ種別を判断してもよい。
例えば、その記憶領域のアドレスをフィールドテーブルが記憶している場合には、その記憶領域はフィールドのデータを記憶していることが判断できる。
領域判断部142は、その記憶領域が長寿データ記憶用の記憶領域か、短命データ記憶用の記憶領域かを判断する。
なお、記憶領域は、あらかじめどちらの目的に使うかを定めておいてもよいし、状況に応じて、どちらの目的に使う記憶領域が必要かを判断し、用途を変えることとしてもよい。
データ移動部143は、種別判断部132と領域判断部142の判断結果に基づいて、記憶領域が記憶したデータを移動させる。
例えば、長寿データ記憶用の記憶領域が、短命のデータを記憶している場合や、逆に、短命データ記憶用の記憶領域が長寿のデータを記憶している場合に、そのデータを移動させる。
なお、これ以外に、GCによってデータを移動させる場合があってもよい。
記憶識別子書換部144は、データ移動部143がデータを移動させた場合に、記憶識別子記憶部124が記憶領域に記憶したアドレスを書き換えて、データ操作部153が正しくデータにアクセスできるようにする。
図8は、この実施の形態において、記憶管理装置100がデータ移動処理を行なう際の、処理の流れの一例を示すフローチャート図である。
S21において、種別判断部132がデータ種別を判断する。
S22において、領域判断部142が記憶領域の用途を判断する。
S23において、データ移動部143がデータを移動させるか否かを判断し、移動させると判断した場合には、記憶領域が記憶したデータを読み出し、読み出したデータを他の記憶領域に記憶する。
S24において、記憶識別子書換部144が、データを記憶した記憶領域のアドレスを記憶した記憶領域に、データ移動部143がデータを移動した移動先の記憶領域のアドレスを記憶する。
図9は、この実施の形態において、記憶領域201〜220が記憶するデータの内容の一例を示す図である。
領域確保部123は、データ種別を気にせず、領域確保要求を受けた順に記憶領域を確保するので、GC前291において、記憶領域201〜220は、定義情報と実体情報とが入り混じった状態になっている。
ここで、未使用の記憶領域が記憶領域220だけになったので、GCを行なう。
GC中292において、この実施の形態では図示していない空き領域判断部が、再利用できる記憶領域を判断する。この例では、実体情報261,263,265が不用となっていたので、データを移動させることにより、確保できる領域を増やすことができる。
GCに伴ってデータを移動させるにあたり、単純にデータをずらして隙間を詰めるのではなく、データ種別に応じて、データの順序を入れ替える。この処理はデータ移動部143が行なう。
この例では、定義情報251,252,253は今後不用になる可能性のない長寿データである。
定義情報251,252,253を記憶するためには、記憶領域が合計7つ必要なので、領域判断部142は、記憶領域201〜207を長寿データ用記憶領域270と判断し、それ以外の記憶領域208〜220は、短命データ用記憶領域280と判断する。
データ移動部143は、定義情報251,252,253を長寿データ用記憶領域270に移動させ、実体情報262,264,266,267は短命データ用記憶領域280に移動させる。
これにより、次回からは長寿データ用記憶領域270のデータを移動させる必要がないし、不用となっているか否かを判断する必要もない。したがって、GCにかかる時間が少なくなり、プログラムの実行速度が上がるという効果を奏する。
また、あらかじめ記憶領域の用途を定めておく必要がないので、長寿データと短命データとがどのくらいの割合で発生するかをあらかじめ知る必要がなく、記憶領域を有効に活用できる。
なお、実体情報のなかにも、長寿なものがある。経験的に、GCを潜り抜けて生き続けているデータは、次回のGCも潜り抜けて生き続ける可能性が高い。
そこで、今回生き残った実体情報262,264,266,267については、長寿候補であるとしてマークしておき、次回のGCでも生きていた場合には、長寿データ用記憶領域に入れることとしてもよい。
すなわち、記憶領域201〜207が長寿データ用記憶領域、記憶領域214までが長寿候補データ領域として記憶しておく。例えば、長寿データ用記憶領域のなかで一番上位の記憶領域である記憶領域207のアドレスと、長寿候補データ領域のなかで一番上位の記憶領域である記憶領域214のアドレスを、記憶領域に記憶しておく。
そして、長寿候補データ領域の中のデータについて、種別判断部132は、定義情報であっても実体情報であっても区別せず、長寿データであると判断する。
これにより、不用であるかを判断するデータの量、及び、移動させるデータの量が更に減るので、GCにかかる時間が更に少なくなり、プログラムの実行速度が上がるという効果を奏する。
実施の形態3.
実施の形態3を、図1、図2、図5、図6、図9〜図11を用いて説明する。
この実施の形態における記憶管理装置100の外観及びハードウェア構成は、実施の形態1において図1及び図2を用いて説明した記憶管理装置100と同様なので、ここでは説明を省略する。
図10は、この実施の形態における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図である。
図10において、記憶管理装置100は、記憶装置110、識別子記憶部160、対応関係記憶部163、対象識別子判断部171、対象記憶領域算出部172、対象記憶領域判断部173、識別子書換部165を有する。
記憶装置110は、複数の記憶領域を有し、記憶領域はアドレス(記憶識別子の一例)を有する。外部からアドレスを指定することにより、記憶装置110内の任意の記憶領域にアクセスできる。
識別子記憶部160は、識別子情報記憶部161及び対象識別子記憶部162を有する。
対象識別子記憶部162は、対象識別子を記憶領域に記憶する。
ここで、対象識別子とは、データを記憶した記憶領域を識別する記憶識別子(例えば、アドレスなど)、あるいは、データを識別するデータ識別子(例えば、変数名やコンスタントプールの参照番号など)をいう。
識別子情報記憶部161は、識別子情報を記憶領域に記憶する。
ここで、識別子情報とは、対象識別子記憶部162が記憶領域に記憶した対象識別子が記憶識別子であるか、データ識別子であるかを区別するための情報である。
対象識別子記憶部162と識別子情報記憶部161は、対象識別子と識別子情報をセットにして(例えば、対象識別子の最上位ビットを識別子情報のフラグとして用いるなど)、1つの記憶領域に記憶してもよい。あるいは、対応する別の記憶領域に記憶してもよい。
なお、識別子情報は、対象識別子が記憶識別子であるかデータ識別子であるかを判断するための情報の一例であって、他の手段により両者を区別できる場合には、識別子情報記憶部161はなくてもよい。
対応関係記憶部163は、データ識別子と記憶領域識別子との対応関係を記憶領域に記憶する。
変数名などのデータ識別子は、データを抽象的に表現したものであって、実体としてのデータは、いずれかの記憶領域が記憶するものである。したがって、プログラム等からデータを操作するには、そのデータを記憶した記憶領域のアドレス等、記憶識別子によって記憶領域を識別し、識別した記憶領域にアクセスする必要がある。
したがって、プログラム等に記述されたデータ識別子を、そのデータ識別子によって識別されるデータを実際に記憶している記憶領域の記憶識別子に変換する必要がある。
対応関係記憶部163が記憶領域に記憶する対応関係とは、その変換に用いるテーブル等のデータである。テーブル等のデータ構成については、既知の構成が多数存在するので、ここでは詳しく説明しない。
対象識別子判断部171は、対象識別子記憶部162が記憶領域に記憶した対象識別子が記憶識別子であるか、データ識別子であるかを判断する。判断は、識別子情報記憶部161が記憶領域に記憶した識別子情報に基づいて行なう。あるいは、他の手段によって両者を区別できる場合には、それに基づいて判断してもよい。
対象記憶領域算出部172は、対象識別子がデータ識別子である場合に、対応関係記憶部163が記憶領域に記憶した対応関係に基づいて、データ識別子を記憶識別子に変換する。
対象記憶領域判断部173は、対象記憶領域算出部172が変換した記憶識別子に基づいて、対象データを記憶した記憶領域が、GCなどによるデータ移動のない記憶領域であるか否かを判断する。
識別子書換部165は、識別子情報書換部166及び対象識別子書換部167を有する。
対象識別子書換部167は、対象識別子記憶部162が記憶領域に記憶した対象識別子を、データ識別子からそれに対応する記憶識別子に書き換える。
識別子情報書換部166は、それに対応して、識別子情報を、対象識別子が記憶識別子であることを示す情報に書き換える。
対象識別子がデータ識別子である場合、そのデータを操作するには、対応関係記憶部163が記憶領域に記憶した対応関係を参照して、そのデータを記憶した記憶領域の記憶識別子を求める必要がある。
これに対して、対象識別子が記憶識別子であれば、そのまま直接、記憶識別子によって識別される記憶領域にアクセスすることができるので、処理時間が短くてすむ。
したがって、プログラムの実行にかかる処理時間を短くするためには、対象識別子が記憶識別子であるほうがよい。
しかし、GCなどにより、データを移動する場合には、そのデータを記憶している記憶領域が変わるので、対象識別子として記憶した記憶識別子も、移動先の記憶領域の記憶識別子に書き換える必要があり、手間がかかる。
対象識別子がデータ識別子であれば、対応関係記憶部163が記憶領域に記憶した対応関係を書き換えるだけで、データの移動に対処できる。
そこで、GCなどによりデータを移動する可能性がない場合には、対象識別子を記憶識別子に書き換えることにより、処理速度の向上を図る。
また、GCなどによりデータを移動する可能性がある場合には、対象識別子がデータ識別子であってもそのままにしておく。記憶識別子に書き換えることによる処理時間の短縮効果よりも、GCなどによりデータを移動した場合の処理が増えることによるマイナスが大きいからである。
GCなどによりデータを移動する可能性があるか否かの判断は、上述したように、対象記憶領域判断部173が行なう。
例えば、実施の形態1で図5及び図6を用いて説明した記憶方式である場合、定義情報記憶領域250が記憶したデータは、GCなどにより移動することがない。
これに対し、実体情報記憶領域260が記憶したデータは、GCなどにより移動する可能性がある。
したがって、そのデータを記憶した記憶領域の記憶識別子に基づいて、それが定義情報記憶領域250に属するものか、実体情報記憶領域260に属するものかを判断すれば、そのデータを移動する可能性があるか否かがわかる。
具体的には、例えば、定義情報記憶領域250の記憶領域の最上位のもの(図6の例でいえば、記憶領域207)のアドレス(記憶識別子)を記憶しておき、そのアドレスと、対象データを記憶した記憶領域のアドレスとの大小関係を比較する比較器を設けることにより、判断が可能である。なお、これは一例であって、その他既知の判断方式によって判断してもよい。
あるいは、実施の形態2で図9を用いて説明した記憶方式である場合なら、長寿データ用記憶領域270が記憶したデータは、GCなどにより移動することはなく、短命データ用記憶領域280が記憶したデータは、GCなどにより移動する可能性がある。
したがって、上述したのと同様に、そのデータを記憶した記憶領域の記憶識別子に基づいて、それが長寿データ用記憶領域270に属するものか、短命データ用記憶領域280に属するものかを判断すれば、そのデータを移動する可能性があるか否かがわかる。
図11は、この実施の形態において、記憶管理装置100が対象識別子書換処理を行なう際の、処理の流れの一例を示すフローチャート図である。
S31において、対象識別子判断部171は、対象識別子が記憶識別子であるかデータ識別子であるかを判断する。
対象識別子が記憶識別子であると判断した場合には、処理を終了する。
対象識別子がデータ識別子であると判断した場合には、S32に進む。
S32において、対象記憶領域算出部172は、データ識別子である対象識別子に対応する記憶識別子を、対応関係記憶部163が記憶領域に記憶した対応関係に基づいて、算出する。
S33において、対象記憶領域判断部173は、対象記憶領域算出部172が算出した記憶識別子に基づいて、そのデータが移動のある領域に記憶されているか、移動のない領域に記憶されているかを判断する。
移動のある領域に記憶されていると判断した場合には、処理を終了する。
移動のない領域に記憶されていると判断した場合には、S34に進む。
S34において、識別子書換部165は、識別子記憶部160が記憶領域に記憶した対象識別子を記憶識別子に書き換え、それに対応して識別子情報も書き換える。
このように、GCなどによりデータを移動する可能性がある場合と、データを移動する可能性がない場合とで異なる取り扱いとし、データを移動する可能性がない場合には、対象識別子を記憶識別子に書き換えて処理速度の向上を図り、データを移動する可能性がある場合には、対象識別子をデータ識別子のままにしてGCなどにおける処理の負担が増えることを防ぐことにより、全体の処理時間が短くなり、プログラムの実行速度が上がるという効果を奏する。
実施の形態4.
実施の形態4を、図1、図2、図12〜図14、図27を用いて説明する。
この実施の形態における記憶管理装置100の外観及びハードウェア構成は、実施の形態1において図1及び図2を用いて説明した記憶管理装置100と同様なので、ここでは説明を省略する。
図12は、この実施の形態における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図である。
図12において、記憶管理装置100は、記憶装置110、コマンド記憶部180、対応関係記憶部163、対象識別子判断部171、対象記憶領域算出部172、対象記憶領域判断部173、コマンド書換部185、操作指令解読部191、操作対象識別部192、操作実行部193を有する。
このうち、記憶装置110、対応関係記憶部163、対象識別子判断部171、対象記憶領域算出部172、対象記憶領域判断部173は、実施の形態3において図10を用いて説明したものと同様なので、ここでは説明を省略する。
コマンド記憶部180は、コマンドを記憶領域に記憶する。
ここで、コマンドとは、記憶管理装置100に対して記憶領域が記憶したデータの操作を指令するもので、プログラムの一部である。
この例では、コマンドは操作指令識別子と対象識別子とからなる。
操作指令識別子は、記憶領域が記憶したデータの操作方法(例えば、読み出し、書き込み、演算など)を示すもので、操作指令記憶部181が記憶領域に記憶する。
また、対象識別子は、操作対象を識別するもので、記憶識別子あるいはデータ識別子である。対象識別子は、対象識別子記憶部162が記憶領域に記憶する。
対象識別子が記憶識別子であるか、データ識別子であるかを区別する識別子情報は、操作指令識別子の中に含まれる。すなわち、同じデータ操作を指令する場合であっても、異なる操作指令識別子を用いることによって、区別する。すなわち、操作対象の識別が記憶識別子によって行われる場合には記憶操作指令識別子を用い、データ識別子によって行われる場合にはデータ操作指令識別子を用いる。
図27は、JavaVMが実行するクラスファイルで使われるバイトコード(コマンドの一例)のオペコード571(操作指令識別子の一例)とオペランド572(対象識別子の一例)の意味(一部)を示す図である。
例えば、オペコード571が「B2」(1バイト(8ビット)のデータであるが、ここでは16進数で表現している)である場合、オペランド572(2バイト(16ビット)のデータ)はコンスタントプールの参照番号を示す。そして、その参照番号により参照したコンスタントプールの内容によって識別されるスタティックフィールドに対して、データを読み出すという操作を行なうことを意味している(データ操作指令識別子の一例)。
ここで、スタティックフィールドとは、クラスに固有のフィールドで、インスタンスに依存しないものをいう。通常、スタティックフィールドのデータの内容は、クラスの定義情報を記憶する記憶領域に記憶する。
また、非スタティックフィールドとは、インスタンスに固有のフィールドで、同じクラスのインスタンスでも、インスタンスごとに異なる値を持つことができるものをいう。通常、非スタティックフィールドのデータの内容は、インスタンスの実体情報を記憶する記憶領域に記憶する。
コマンド書換部185は、対象識別子がデータ識別子である場合に、それを記憶識別子に書き換え、それに対応して、操作指令識別子も、記憶操作指令識別子に書き換える。
すなわち、対象識別子は、対象識別子書換部167が書き換え、操作指令識別子は、操作指令書換部186が書き換える。
図27に示したオペコード571はすべて、オペランド572がコンスタントプールの参照番号を意味する。すなわち、オペランド572はデータ識別子である。
これは、JavaVMは、記憶領域を動的に割り当てるので、クラスファイルを読み込む前にそのデータを記憶する記憶領域がどこになるかを知ることは不可能だからである。
したがって、JavaVMが実行するクラスファイルで使われるバイトコードのオペコード571には、オペランド572が記憶識別子であることを意味するものは存在しない。
ここで、バイトコードのオペコード571は、「00」〜「CA」,「FE」,「FF」(いずれも16進数)はその意味が定義されているが、「CB」〜「FD」については定義されていない。
定義されていないオペコード571「CB」〜「FD」については、クラスファイル中に決して現れることがないので、JavaVMが実行時に自由に使うことができる。
図13は、この実施の形態において、拡張したバイトコードのオペコード571とオペランド572の意味(一部)の一例を示す図である。
図13において、拡張されたオペコード571「E6」〜「E9」は、オペランド572が記憶領域のアドレス(記憶識別子)を直接示す(記憶操作指令識別子の一例)。
なお、フィールドの型によって、扱うデータのサイズ(例えば、32ビット長か64ビット長か)が異なるので、この例では、型ごとに異なるオペコード571を割り当てている。しかし、他の方法で扱うべきデータのサイズが分かるのであれば、型を区別せず同じオペコードを割り当ててもよい。
操作指令書換部186は、元のオペコードを、このように拡張されたオペコード571に書き換える。
操作指令解読部191は、拡張されたオペコード571を解読し、どのようなデータ操作を指令されたかを判別する。
操作対象識別部192は、操作対象となるデータを記憶した記憶領域の記憶識別子を取得する。すなわち、対象識別子判断部171の判断により、対象識別子が記憶識別子である場合には、その記憶識別子をそのまま取得し、対象識別子がデータ識別子である場合には、対象記憶領域算出部172が算出した記憶識別子を取得する。
操作実行部193は、操作対象識別部192が取得した記憶識別子に基づいて、その記憶識別子によって識別される記憶領域にアクセスし、操作指令解読部191が解読したデータ操作を行なう。
図14は、この実施の形態において、記憶管理装置100がコマンド書換処理を行う際の、処理の流れの一例を示すフローチャート図である。
S41において、対象識別子判断部171は、対象識別子が記憶識別子であるかデータ識別子であるかを判断する。この判断は、操作指令識別子が記憶操作識別子であるか、データ操作識別子であるかを判断することによって行なう。
対象識別子が記憶識別子であると判断した場合には、処理を終了する。
対象識別子がデータ識別子であると判断した場合には、S42に進む。
S42において、対象記憶領域算出部172は、データ識別子である対象識別子に対応する記憶識別子を、対応関係記憶部163が記憶領域に記憶した対応関係に基づいて、算出する。
S43において、対象記憶領域判断部173は、対象記憶領域算出部172が算出した記憶識別子に基づいて、そのデータが移動のある領域に記憶されているか、移動のない領域に記憶されているかを判断する。
移動のある領域に記憶されていると判断した場合には、処理を終了する。
移動のない領域に記憶されていると判断した場合には、S44に進む。
S44において、コマンド書換部185は、コマンドの種別が書き換えられるコマンドか否かを判断する。
書き換えられないコマンドであると判断した場合には、処理を終了する。
書き換えられるコマンドであると判断した場合には、S45に進む。
S45において、コマンド書換部185は、コマンド記憶部180が記憶領域に記憶した対象識別子を記憶識別子に書き換え、それに対応して操作指令識別子も、記憶操作指令識別子に書き換える。
ここで、書き換えられるコマンドとは、例えば、図13においていれば、オペコード「B2」(スタティックフィールドのデータの読出し)である。スタティックフィールドは、インスタンスに依存せず、クラスに固有のものである。操作対象のクラスは、コンスタントプールによって決まるので、常に同じである。したがって、同じコマンドであれば、常に同じデータに対する操作であるから、そのデータが移動しないのであれば、アドレスによる参照に書き換えることができる。
これに対し、書き換えられないコマンドとは、例えば、図13においていえば、オペコード「B4」(非スタティックフィールドのデータの読出し)である。非スタティックフィールドは、インスタンスごとに異なる値を持つので、インスタンスごとに異なる記憶領域が記憶する。操作対象のインスタンスは、スタックに詰まれた参照によって決まるので、同じコマンドでも常に同じとは限らない。したがって、アドレスに書き換えることはできない。
コマンドに基づいて、データ操作を行なう場合、そのコマンドに含まれる操作指令識別子がどのような操作を指示しているかを解釈することは必ず必要である。この解釈は、具体的には、テーブル等を使った条件分岐によって行なわれる。
したがって、操作指令識別子の中に、対象識別子が記憶識別子かデータ識別子かを示す情報を組み込んでしまえば、条件分岐の数を増やさずに、対象識別子によって、データを識別する方法を変えることができ、プログラムの実行速度が速くなる。
そのうえ、GCなどによりデータが移動する可能性がない場合には、データ識別子を記憶識別子で書き換えることにより、複雑なテーブル参照をする必要がなくなり、更に実行速度が速くなる。
特に、実施の形態1および実施の形態2で説明した方式によって、移動させるデータの量を減らせば、記憶識別子に書き換えることのできる対象識別子の数が増え、ますますプログラムの実行速度が速くなるという効果を奏する。
なお、コマンド書換処理は、クラスファイルを読み込んだときに行なってもよい。その場合は、あらかじめデータを記憶する記憶領域を確保しておく必要がある。
あるいは、実際にコマンドを実行するときに、行なうこととしてもよい。コマンドを実行するときには、操作指令識別子を解読したり、対象識別子によって識別される対象の記憶識別子を求めたりする必要があるので、このときに同時にコマンド書換処理を行なうこととすれば、重複する処理を繰り返す必要がなく、効率的である。
実施の形態5.
実施の形態5を、図1、図2、図15〜図18を用いて説明する。
この実施の形態におけるプログラム実行装置600(記憶管理装置の一例)の外観及びハードウェア構成は、実施の形態1において図1及び図2を用いて説明した記憶管理装置100と同様であるから、ここでは説明を省略する。
図15は、この実施の形態におけるプログラム実行装置600の機能ブロックの構成の一例を示すブロック構成図である。
図15において、プログラム実行装置600は、インストラクション格納部610、クラスファイル情報管理部620、インストラクション実行部630、テーブル管理部640、参照解決部650、メモリ配置判定部660、動的メモリ確保部670、メモリ再配置GC部680、メモリ690を有する。
プログラム実行装置600は、メモリ690(記憶装置の一例)中の使用されていない記憶領域を回収するGC処理によって、回収した記憶領域をプログラムに動的に割り当てるプログラム実行環境を備える。
プログラム実行装置600は、インタプリタ型のプログラム実行装置であって、命令を一つ一つ解釈しながら実行を行う。
この実施の形態で説明するプログラム実行装置600は、Java(登録商標)のソースプログラムよりコンパイルされたバイトコードのプログラムを実行するものである。
インストラクション格納部610(コマンド記憶部の一例)は、インストラクションコード(操作指令識別子の一例)とオペランド(対象識別子の一例)からなるバイトコードのプログラムをメモリ690に格納する。
クラスファイル情報管理部620は、インストラクションに指定された参照の内容を示す参照情報をまとめたクラスファイル情報をメモリ690に記憶する。
テーブル管理部640(対応関係記憶部の一例)は、各クラスファイル情報からクラステーブル、フィールドテーブル、メソッドテーブル等の参照用のテーブルを作成し、メモリ690に記憶する。
これらの参照用テーブルの設定情報は、インストラクション実行部630、参照解決部650が利用するものである。
インストラクション実行部630(操作実行部の一例)は、インストラクション格納部610からインストラクションを読み込み、実行する。
動的メモリ確保部670(領域確保部の一例)は、インストラクション実行部630からの要求(領域確保要求)に応じて、インスタンスを記憶するための記憶領域をメモリ690から確保し、確保した記憶領域のアドレスを、インスタンスに含まれる変数に割り当てる。
動的メモリ確保部670は、メモリ690からインスタンスの領域を確保できなかった場合、メモリ再配置GC部680に対して、プログラムが利用していない領域の回収を要求する。
メモリ再配置GC部680(データ移動部の一例)は、現在プログラムが利用している領域をマークして、使用されていない領域を回収する処理を実行する。
また、動的メモリ確保部670が確保しようとした大きさの連続した領域が確保できなかった場合には、メモリ690のコンパクション処理を実行する。
なお、この実施の形態のプログラム実行装置600は、コンパクション処理時にクラスインスタンスの配置の変更が無くなるように再配置する処理を行なう。
動的メモリ確保部670は、図示していない記憶領域割当部、データ領域割当部を有する。
記憶領域割当部は、動的メモリ確保部670に対して行われたメモリ領域確保の要求に対して、メモリ690中の使用されていない記憶領域を提供する処理を行う。
参照解決部650は、インストラクションの要求する参照の解決を行う。
この実施の形態では、プログラムの実行に先立ち、各クラスファイル情報に含まれる情報について、それぞれの名前による参照を解決し、得られた参照解決結果をクラスファイルに書き込む。
参照の解決方法及び、クラスファイル情報内に書き込まれる処理についての詳細は、既知の方式が存在するので、ここでは詳しく説明しない。
メモリ配置判定部660(対象記憶領域判断部の一例)は、この実施の形態におけるプログラム実行装置600の主要な役割を果たすブロックである。
メモリ配置判定部660は、インストラクション実行部630の問合せに応じて、実行されるインストラクションに指定されたフィールドやメソッドを含むインスタンスが割り当てられている領域の配置が頻繁に移動するかどうかの判定を行う。
インストラクション実行部630は、メモリ配置判定部660の判定結果に基づいて、データ格納領域のアドレスをクラスファイル情報管理部620に含まれるクラスファイル情報内に書き込む。
次に、動作の詳細について説明する。
図16は、この実施の形態において、プログラム実行装置600が、インストラクション格納部610が記憶したプログラムを実行する際の、処理の流れの一例を示すフローチャート図である。
この図は、システム起動からクラスファイル参照の解決、また、プログラム実行において、インスタンスのメモリ領域の配置を判定し、フィールド、クラスのデータ格納領域のアドレスをクラスファイル情報内に格納し、インストラクションを実行する一連の流れを示している。
図17は、この実施の形態において、インストラクション格納部610、クラスファイル情報管理部620、テーブル管理部640が記憶する内容の一例を示す図である。
S51〜S56は、システム起動時の処理である。
プログラム実行装置600は、プログラムの実行を開始する前に、必要なクラスの参照解決を行なう。参照解決の結果は、クラスファイル情報管理部620が記憶する。
参照解決処理の詳細については、既知の方式があるので、ここでは詳しく説明しない。
また、このように、プログラム実行前に、すべての参照を解決しておくのではなく、プログラムを実行しながら、必要になった段階で、参照を解決することとしてもよい。
クラスファイル情報管理部620は、クラスファイルの情報をテーブルにして記憶する。
例えば、コンスタントプールの内容621についての情報を記憶する。図17の例では、コンスタントプールの参照番号6として、「クラス参照:1」「名前型参照:9」という情報を記憶している。
フィールドテーブルインデックス622(データ識別子の一例)は、フィールドテーブルへの参照番号を示す。この例において「−1」は、参照番号を記憶していないことを示している。
フィールドテーブルは、テーブル管理部640が記憶している。
フィールドテーブルは、そのフィールドのデータを実際に記憶するメモリのアドレスを記憶する。
この例では、コンスタントプール参照番号6のフィールドについて操作する場合、そのフィールドのデータを記憶しているメモリのアドレスはフィールドテーブルの参照番号35を見ればわかる。フィールドテーブルによれば、データ格納アドレス641(記憶識別子の一例)は「ABCD」なので、メモリ690(記憶装置の一例)のアドレス「ABCD」(記憶領域の一例)にアクセスすることにより、そのフィールドのデータを操作できる。
S57〜S63は、プログラム実行時の処理である。
この実施の形態によるクラスファイル情報に対して、データ格納領域のアドレスを格納し、インストラクションを実行する。
S57において、インストラクション実行部630は、インストラクション格納部610からインストラクションを読み込む。
次に、S58において、インストラクション実行部630は、クラスファイル情報内のデータ格納アドレスが設定されているかを確認する。
後述するように、クラスファイル情報管理部620がフィールドテーブルインデックス622(データ識別子の一例)ではなく、データ格納アドレス623(記憶識別子の一例)を記憶している場合には、インストラクション格納部610の内容を書き換えて、データ操作命令611が、データ操作命令613になっている(識別子情報の一例)。
したがって、インストラクション実行部630は、データ操作命令が何であるかを判断することで、クラスファイル情報にデータ格納アドレスが設定されているかを判断する。
インストラクション実行部630は、データ格納アドレスが設定されていると判断した場合、S62に進み、インストラクションの実行手続をする。
インストラクション実行部630は、データ格納アドレスが設定されていないと判断した場合、S59に進む。
S59において、インストラクション実行部630は、クラスファイル情報内のインデックスを用いて、該当するテーブルからデータ格納アドレスを求める。
この例でいえば、コンスタントプールの参照番号6から、フィールドテーブルインデックス622「35」を取得し、これをオブジェクトオフセット値として、フィールドの値を格納した領域のアドレスであるデータ格納アドレス「ABCD」を求める。
S60において、メモリ配置判定部660は、求めたデータ格納アドレスが移動の多い領域に配置されているかを判定する。判定の詳細については、後述する。
インストラクション実行部630は、メモリ配置判定部660が移動の多い領域であると判定した場合、S62に進み、算出したデータ格納アドレスを用いて、インストラクションの実行手続を行う。
インストラクション実行部630は、メモリ配置判定部660が移動の多い領域でないと判定した場合、S61に進む。
S61において、クラスファイル情報管理部620は、算出したデータ格納アドレス623を記憶する。また、インストラクション格納部610は、データ操作命令を書き換える。
S62において、インストラクション実行部630は、実際にインストラクションを実行する。
S63において、インストラクション実行部630は、終了判定を行なう。実行終了でない場合には、S57に戻り、インストラクション毎に同様の処理が実行される。
インストラクション実行部630が実行終了であると判断した場合には、プログラムの実行を終了する。
これにより、テーブルの参照を1段階少なくすることができるので、インストラクションの実行にかかる時間が短縮され、プログラムの実行速度が速くなるという効果を奏する。
次に、S60におけるメモリ配置判定部660の判定について、詳述する。
メモリ配置判定部660は、メモリのアドレスから、そのメモリに記憶したデータがGCなどによって頻繁に移動するものであるか、頻繁に移動しないものであるかを判定する。
図18は、世代別GCによって、メモリに記憶したデータが移動する様子の一例を示す模式図である。
例えば、世代別GCにおいては、新世代領域のデータは頻繁に移動するが、旧世代領域のデータは頻繁に移動しない。
したがって、メモリ配置判定部660は、そのアドレスから、そのメモリが新世代領域であるか旧世代領域であるかを判断することにより、頻繁に移動するか否かを判定する。
なお、メソッドの参照解決のためには、クラス名やメソッド名からメソッドのプログラム格納位置を指定する参照テーブル(メソッドテーブル)がある。
メソッドテーブルについても、ここで説明したのと同様、インストラクションおよび関連する参照用情報から読み取ったメソッド名により、メソッドテーブル内のインデックスを取得することでメソッドの参照解決を行うと共に、インストラクションを書き換える構成とすることができる。
この場合、書き換えられたインストラクションのオペランドとして、メソッドテーブルのインデックスを書き込む。本発明では、メソッドに関しても、メソッドが格納されたデータ格納領域のアドレスをオペランドに設定した命令に書き換えを行う。
実施の形態6.
実施の形態6を、図1、図2、図15、図19、図20を用いて説明する。
この実施の形態におけるプログラム実行装置600(記憶管理装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態5において図1、図2、図15を用いて説明したプログラム実行装置600と同様であるから、ここでは説明を省略する。
図19は、この実施の形態において、プログラム実行装置600が、インストラクション格納部610が記憶したプログラムを実行する際の、処理の流れの一例を示すフローチャート図である。
図20は、この実施の形態において、インストラクション格納部610、クラスファイル情報管理部620、テーブル管理部640が記憶する内容の一例を示す図である。
S71〜S73、S75〜S78は、参照解決のための処理である。
この実施の形態では、実施の形態5と異なり、インストラクションを実行しながら、未解決の参照が要求された段階で、参照解決を行なう方式を採っている。
しかし、起動時にあらかじめ参照解決処理を行う構成としてもよい。
S79において、インストラクション実行部630は、インストラクション(コマンドの一例)がオペランド(対象識別子の一例)としてデータ格納アドレスをとるものであるか否かを判断する。
後述するように、オペランドが参照番号612(データ識別子の一例)ではなく、データ格納アドレス(記憶識別子の一例)を直接指定する場合には、データ操作命令611(データ操作指令識別子の一例)をデータ操作命令616(記憶操作指令識別子の一例)に書き換えてある。
したがって、インストラクション実行部630は、データ操作命令が何であるかを判定することにより、オペランドが参照番号であるか、データ格納アドレスであるかを判断する。
インストラクション実行部630は、データ格納アドレスが指定されていると判断した場合には、S83に進み、インストラクションの実行手続を行う。
インストラクション実行部630は、データ格納アドレスが指定されていないと判断した場合には、S80に進む。
S80において、インストラクション実行部630は、テーブルを辿ることにより、データ格納アドレスを求める。
この例でいえば、参照番号612が「6」であるから、クラスファイル情報管理部620がメモリ690に記憶したコンスタントプールの参照番号「6」を見る。
次に、フィールドテーブルインデックス622が「35」であるから、テーブル管理部640がメモリ690に記憶したフィールドテーブルの参照番号「35」を見る。
そして、データ格納アドレス641が「ABCD」であるから、これが、そのフィールドのデータを記憶したメモリ690のアドレスであることがわかる。
S81において、メモリ配置判定部660は、そのデータ格納アドレスが移動の多い領域に配置されているかを判定する。
メモリ配置判定部660は、そのデータ格納アドレスが移動の多い領域に配置されていると判定した場合には、S83に進み、インストラクションを実行する。
メモリ配置判定部660は、そのデータ格納アドレスが移動の多い領域に配置されていないと判定した場合には、S82に進む。
S82において、インストラクション格納部610は、算出したデータ格納アドレスをオペランドして設定し、インストラクションの書き換えを行う。
すなわち、参照番号612をデータ格納アドレス617に書き換えるとともに、データ操作命令611をデータ操作命令616に書き換える。
S83において、インストラクション実行部630は、インストラクションを実行する。
S84において、インストラクション実行部630は、プログラム実行の終了か否かを判断し、終了でない場合には、S74に戻る。
これにより、データを操作する際、コンスタントプールを参照せず、データ格納アドレスに直接アクセスできるので、プログラムの実行速度が更に向上するという効果を奏する。
実施の形態7.
実施の形態7を、図1、図2、図15、図21、図22を用いて説明する。
この実施の形態におけるプログラム実行装置600(記憶管理装置の一例)の外観、ハードウェア構成、ブロック構成は、実施の形態5において図1、図2、図15を用いて説明したプログラム実行装置600と同様であるから、ここでは説明を省略する。
この実施の形態は、メモリ再配置GC部680(データ移動部の一例)の動作に特徴がある。
図21は、この実施の形態において、メモリ再配置GC部680がコンパクション処理を行う際の、処理の流れの一例を示すフローチャート図である。
S91において、メモリ再配置GC部680は、全ヒープメモリ領域(メモリ690のうち、GCの対象となる記憶領域)について、S92〜S94の処理を行う。
S92において、メモリ再配置GC部680は、その記憶領域が記憶したデータがクラスインスタンスであるか、オブジェクトインスタンスであるかを判断する。
例えば、使用するメモリ領域に使用用途を示すヘッダを付加しておき、その値によってクラスインスタンスであるかオブジェクトインスタンスであるかを判断する。
メモリ再配置GC部680は、その記憶領域が記憶したデータがクラスインスタンスであると判断した場合、S93に進む。
メモリ再配置GC部680は、その記憶領域が記憶したデータがオブジェクトインスタンスであると判断した場合、S94に進む。
S93において、メモリ再配置GC部680は、その記憶領域をクラスインスタンスを記憶した記憶領域として、再配置リストに追加する。
S94において、メモリ再配置GC部680は、その記憶領域をオブジェクトインスタンスを記憶した記憶領域として、再配置リストに追加する。
ここで、再配置リストとは、データの種類、現在のデータ格納アドレス、GC後のデータ格納アドレスを記憶するテーブルである。この段階では、GC後のデータ格納アドレスは未定なので、空欄にしておく。
メモリ再配置GC部680は、S92〜S94の処理を全ヒープメモリ領域について繰りかえす。
S95において、メモリ再配置GC部680は、再配置先の決定を行なう。
すなわち、再配置リストを先頭から読み込み、データの種類がクラスインスタンスであるものについて、先に再配置先のアドレスを決定する。
次に、それ以外のデータについて、再配置先のアドレスを決定する。
アドレスの決定は、最初に再配置先のメモリ690の先頭アドレスから始めて、1つ決定するたびに、そのアドレスに決定したデータのサイズを足して、次の再配置先を求める。データのサイズは、例えば、使用するメモリ領域に設けたヘッダによって判別する。
決定した再配置先アドレスは、再配置リストに記憶する。
S96において、メモリ再配置GC部680は、全ヒープメモリ領域について、S97〜S98の処理を繰り返す。
S97において、メモリ再配置GC部680は、再配置リストに基づいて、データを移動させるか否かを判断し、移動させる場合には、各メモリ領域の内容をコピーして、コンパクション後のアドレスにデータを移動する。
S98において、メモリ再配置GC部680は、データを移動させた場合、そのデータに対する参照を書き換えて、正しく参照できるように整合させる。
例えば、実施の形態5及び実施の形態6において、図17及び図20を用いて説明したように、テーブル管理部640(対応関係記憶部の一例)がメモリ690に記憶したフィールドテーブル(対応関係)は、データ格納アドレス641(記憶識別子の一例)を記憶している。
メモリ再配置GC部680は、このデータ格納アドレス641を、再配置後のデータ格納アドレスに変更する。
また、メモリ再配置GC部680は、クラスファイル情報管理部620がメモリ690に記憶したクラスファイル情報のデータ格納アドレス623、インストラクション格納部610がメモリ690に記憶したインストラクションのデータ格納アドレス617も、同様に書き換える。
あるいは、クラスファイル情報やインストラクションは、もとの状態に戻してもよい。
例えば、インストラクションを書き換えたときに書き換えた場所及び書換前のデータをメモリ690に別に記憶しておき、それに基づいて書換え、あるいは、書き戻しをする。
図22は、この実施の形態において、コンパクション処理によってメモリ690が記憶したデータが移動する様子の一例を示す模式図である。
このように、クラスインスタンスとオブジェクトインスタンスとを区別して、再配置することにより、図22に示すように、クラスインスタンスがメモリ領域の先頭にくる。
これに対し、従来の方式で、クラスインスタンスとオブジェクトインスタンスとを区別しないで再配置すると、クラスインスタンスとオブジェクトインスタンスとが混在する状態になる。
この段階では、移動するデータの量は、どちらの方式によってもあまり変わらない。
しかし、クラスインスタンスがメモリ領域の先頭にあると、次回のGC時には、クラスインスタンスを移動させる必要がない。クラスインスタンスは、プログラムの実行が終了するまで解放されないからである。
したがって、この方式のGCによれば、GCによるデータの移動を少なくすることができるという効果を奏する。
GCにおいて、データを移動させると、データをコピーする手間以外に、そのデータについての参照をすべて書き換えて、参照を整合させなければならず、そのための処理に時間がかかる。
この実施の形態において、データの格納アドレスに対する直接参照は、フィールドテーブルだけでなく、クラスファイル情報や、インストラクションの中にも点在するので、データの移動はできるだけ少ないほうがよい。
したがって、このGC方式は、実施の形態5などによって説明した方式と組み合わせることにより、プログラムの実行速度を、更に、大幅に向上させるという効果を奏する。
実施の形態8.
実施の形態8を、図1、図2、図18、図23、図24を用いて説明する。
この実施の形態におけるプログラム実行装置600(記憶管理装置の一例)の外観、ハードウェア構成は、実施の形態1において図1、図2を用いて説明した記憶管理装置100と同様であるから、ここでは説明を省略する。
図23は、この実施の形態におけるプログラム実行装置600の機能ブロックの構成の一例を示すブロック構成図である。
図23において、プログラム実行装置600は、インストラクション格納部610、クラスファイル情報管理部620、インストラクション実行部630、テーブル管理部640、参照解決部650、メモリ配置判定部660、動的メモリ確保部670、世代別GC部685、メモリ690を有する。
このうち、インストラクション格納部610、クラスファイル情報管理部620、インストラクション実行部630、テーブル管理部640、参照解決部650、メモリ配置判定部660、動的メモリ確保部670、メモリ690の動作は、実施の形態5において、図15を用いて説明したものと同様なので、ここでは説明を省略する。
世代別GC部685(データ移動部の一例)は、世代別GCアルゴリズムを用いて、GCを行なう。
図18は、この実施の形態において、コンパクション処理によってメモリ690が記憶したデータが移動する様子の一例を示す模式図である。
世代別GCでは、メモリ領域を複数の世代領域に分割して管理する。この例では、新世代領域と旧世代領域の2つに分けて管理している。
世代別GCでは、基本的に、新世代領域についてGCを行なう。そして、新世代領域をGCしただけではメモリ領域が足りなくなった場合に、旧世代領域についてGCを行なう。
したがって、世代別GCでは、旧世代領域のデータは、移動することが少ない。
メモリ配置判定部660は、データ格納アドレスが新世代領域にあるか、旧世代領域にあるかに基づいて、そのデータが移動の多い領域に格納されているか否かを判定する。
例えば、新世代領域と旧世代領域の境界のアドレスを記憶しておき、そのアドレスとデータ格納アドレスの大小関係を比較する比較器を設けることにより、簡単に判定が可能である。
このように、旧世代のメモリ領域の回収及びコンパクション処理は頻繁に行われることはないため、旧世代に含まれるメモリ領域のデータ格納アドレスの変更は少ないと判断できる。また、旧世代と新世代の境界のアドレスを保持し、データ格納アドレスと比較することで安定的な位置に配置されたクラスインスタンス及びオブジェクトインスタンスであるかを容易に判断することができる。
図24は、この実施の形態において、世代別GC部685が旧世代領域のコンパクション処理を行う際の、処理の流れの一例を示すフローチャート図である。
世代別GC部685は、新世代領域のGCを行なっても、動的メモリ確保部670が要求されたメモリ領域を確保できない場合に、旧世代領域のGCを行なう。
S01において、世代別GC部685は、全ヒープメモリ領域に対して、S02の処理を行う。なお、処理の対象は、旧世代領域に限ってもよい。
S02において、世代別GC部685は、使用されている記憶領域を、再配置リストに追加する。
なお、この例では、記憶領域がクラスインスタンスかオブジェクトインスタンスかは区別しないので、再配置リストは、データの種類を記憶する必要はない。
S03において、世代別GC部685は、再配置リストに基づいて、配置先のアドレスを決定する。
アドレスの決定は、例えば、最初に再配置先のメモリ690の先頭アドレスから始めて、1つ決定するたびに、そのアドレスに決定したデータのサイズを足して、次の再配置先を求める。データのサイズは、例えば、使用するメモリ領域に設けたヘッダによって判別する。
求めたアドレスは、再配置リストに記憶する。
S04において、世代別GC部685は、全ヒープメモリ領域に対して、S05〜S06の処理を行う。なお、S01で旧世代領域のみを対象とした場合には、S04でも旧世代領域のみを対象とする。
S05において、世代別GC部685は、再配置リストに基づいて、現在のデータ格納アドレスと、再配置先のデータ格納アドレスとが一致するか否かを判断する。一致しない場合には、データを移動させる。
すなわち、現在のデータ格納アドレスからデータを読み出し、再配置先のアドレスに書き込む。
S06において、世代別GC部685は、データを移動させた場合に、そのデータに対する参照を書き換えて、参照を整合させる。
すなわち、テーブル管理部640(対応関係記憶部の一例)がメモリ690に記憶したフィールドテーブル、クラスファイル情報管理部620がメモリ690に記憶したクラスファイル情報、インストラクション格納部610がメモリ690に記憶したインストラクションなどの中で、メモリのデータ格納アドレスを直接参照している部分について、再配置後のデータ格納アドレスに書き換える。
あるいは、クラスファイル情報、インストラクションは、命令を書き換える前の状態に戻してもよい。
世代別GCのように、データの移動を頻繁に行なう領域と、そうでない領域とが簡単に区別できるGCを使うことにより、データの移動頻度が簡単に判定できるので、命令の書換え等によってプログラムの実行速度を速くすることができる。
GCによってデータを移動させた場合には、そのデータを記憶しているメモリ690のデータ格納アドレスを直接指定して参照している場所を、すべて書き換える必要があるが、このように、世代別GCを使うことにより、移動しない領域が多くなるので、書換えにかかる手間が減り、GC処理を含めた全体としてプログラムの実行速度が速くなるという効果を奏する。
以上説明したプログラム実行装置は、
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを保持する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
また、このプログラム実行装置は、
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムへのリンク情報内に保持する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
あるいは、このプログラム実行装置は、
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムの命令を書き換えると共にオペランドに保持する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
このプログラム実行装置は、更に、
ガーベージコレクションのメモリコンパクション時に、シンボルのデータを格納するアドレスの変更が少なくするようにメモリ領域の配置を行う手段を備えるガーベージコレクションを行うインタプリタ型プログラム実行装置である。
このプログラム実行装置は、更に、
ガーベージコレクションのメモリコンパクション時に、シンボルのデータを格納するアドレスの変更が少なくするようにクラスインスタンスを移動しない領域である前方に集めるメモリ領域の配置を行う手段を備えるガーベージコレクションを行うインタプリタ型プログラム実行装置である。
このプログラム実行装置は、更に、
メモリ配置判定手段は、世代別ガーベージコレクションの旧世代領域をアドレス変更が少なくなるように配置されたと判断するガーベージコレクションを行うインタプリタ型プログラム実行装置である。
このプログラム実行装置は、
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを保持する手段とガーベージコレクションは、解決済みシンボルのデータ格納領域のアドレスが無効となった際に保持する解決済みシンボルのデータ格納領域のアドレスを廃棄する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
また、このプログラム実行装置は、
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムへのリンク情報内に保持する手段と、
ガーベージコレクションは、解決済みシンボルのデータ格納領域のアドレスが無効となった際に実行用プログラムへのリンク情報内の解決済みシンボルのデータ格納領域のアドレスを廃棄する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
あるいは、このプログラム実行装置は、
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムの命令を書き換えると共にオペランドに保持する手段と、
ガーベージコレクションは、解決済みシンボルのデータ格納領域のアドレスが無効となった際に実行用プログラムの命令のオペランドに保持した解決済みシンボルのデータ格納領域のアドレスを廃棄し、実行用プログラムの命令を書き換えると共にインデックス等の間接参照のオフセットに書きかえる手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
以上説明したように、インタプリタ型のプログラム実行装置では、実行速度を向上するために、命令自体の書き換えとオペランドをシンボル情報から数値情報への変更が行われる共に、クラステーブル、フィールドテーブル、メソッドテーブルに対して、新たにオブジェクトオフセット、クラステーブルインデックス、ネームインデックス、タイプインデックス、アクセスフラグなどの情報が各テーブルに追加される。追加される情報は全て各テーブルのインデックスまたはオフセットであり、情報を格納したアドレスを追加していない。そのため、実際の情報を取得、変更するためには、オブジェクトの先頭アドレスにオフセットを加算して情報を格納したアドレスを求めるアドレス計算を行う必要がある。このオフセットとテーブルの先頭アドレスを加算するアドレス計算は、頻繁に行われるために命令の実行速度を低下させる原因となっている。
このプログラム実行装置は、上記のような課題を解決できる。
ここで、オフセットを格納しなければならない理由は、プログラム実行装置が、メモリコンパクションを伴うガーベージコレクションを行うプログラム実行装置であるからである。メモリコンパクションを伴うガーベージコレクションを行うプログラム実行装置では、オブジェクト、クラス内のフィールド、メソッドのアドレスは、メモリコンパクションが実施された場合には変更されるため、それらのアドレスを格納している箇所は書き換える必要がある。そのため、フィールドやメソッドのアドレスの参照を極力少なくすることがガーベージコレクションの処理時間を短縮することにつながる。
上記のように、メモリコンパクションを伴うガーベージコレクションを行うインタプリタ型プログラム実行装置においては、ガーベージコレクションの処理時間を短くするために、参照または設定するデータの格納アドレスをテーブルとオフセットという形式で保存している。しかし、その反面、テーブルの先頭アドレスとオフセットを加算するアドレス計算が行われることで命令の実行速度を低下させている。
このプログラム実行装置は、上記のような課題を解決できる。
すなわち、解決済みシンボルのデータ格納領域のアドレスを保持する手段とデータ格納領域のアドレスが特定されたことを利用する命令に書き換える手段を備えることで、テーブルの先頭アドレスとオフセットを加算するアドレス計算が不要となり、命令の実行速度を向上させることができる。
また、ガーベージコレクションのメモリコンパクション時に、シンボルのデータを格納するアドレスの変更が少なくするようにメモリ領域の配置を行う手段とアドレスの変更が少なくなるように配置されたことを判断する手段を設けることで、ガーベージコレクションのメモリコンパクションが頻繁に発生し、アドレスが変更される状況においては、データ格納領域をテーブルの先頭アドレスとオフセットにより求める命令とすることができ、ガーベージコレクション時にデータ格納領域のアドレスを書き換える処理を行わないことによるガーベージコレクションの処理時間の遅くなることがない。
実施の形態1〜実施の形態4における記憶管理装置100の外観の一例を示す図。 実施の形態1〜実施の形態4における記憶管理装置100のハードウェア構成の一例を示す図。 実施の形態1における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態1において、記憶管理装置100が記憶領域確保処理を行なう際の、処理の流れの一例を示すフローチャート図。 実施の形態1において、記憶領域201〜220のグループ分けと、そこに記憶するデータの内容の一例を示す図。 実施の形態1において、GCを行なって、再利用可能な記憶領域を探し、記憶領域が記憶したデータを移動させることによって、確保できる記憶領域を増やす場合の動作の一例を示す図。 実施の形態2における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態2において、記憶管理装置100がデータ移動処理を行なう際の、処理の流れの一例を示すフローチャート図。 実施の形態2において、記憶領域201〜220が記憶するデータの内容の一例を示す図。 実施の形態3における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態3において、記憶管理装置100が対象識別子書換処理を行なう際の、処理の流れの一例を示すフローチャート図。 実施の形態4における記憶管理装置100の機能ブロックの構成の一例を示すブロック構成図。 実施の形態4において、拡張したバイトコードのオペコード571とオペランド572の意味(一部)の一例を示す図。 実施の形態4において、記憶管理装置100がコマンド書換処理を行う際の、処理の流れの一例を示すフローチャート図。 実施の形態5〜実施の形態7におけるプログラム実行装置600の機能ブロックの構成の一例を示すブロック構成図。 実施の形態5において、プログラム実行装置600が、インストラクション格納部610が記憶したプログラムを実行する際の、処理の流れの一例を示すフローチャート図。 実施の形態5において、インストラクション格納部610、クラスファイル情報管理部620、テーブル管理部640が記憶する内容の一例を示す図。 世代別GCによって、メモリに記憶したデータが移動する様子の一例を示す模式図。 実施の形態6において、プログラム実行装置600が、インストラクション格納部610が記憶したプログラムを実行する際の、処理の流れの一例を示すフローチャート図。 実施の形態6において、インストラクション格納部610、クラスファイル情報管理部620、テーブル管理部640が記憶する内容の一例を示す図。 実施の形態7において、メモリ再配置GC部680がコンパクション処理を行う際の、処理の流れの一例を示すフローチャート図。 実施の形態7において、コンパクション処理によってメモリ690が記憶したデータが移動する様子の一例を示す模式図。 実施の形態8におけるプログラム実行装置600の機能ブロックの構成の一例を示すブロック構成図。 実施の形態8において、世代別GC部685が旧世代領域のコンパクション処理を行う際の、処理の流れの一例を示すフローチャート図。 JavaVMが実行するクラスファイル500の一例を示す図。 メソッド情報550に含まれるバイトコード580の一部と、コンスタントプール情報520の内容の一例を示す図。 JavaVMが実行するクラスファイルで使われるバイトコード(コマンドの一例)のオペコード571(操作指令識別子の一例)とオペランド572(対象識別子の一例)の意味(一部)を示す図。
符号の説明
100 記憶管理装置、110 記憶装置、121 領域確保要求取得部、122 空き領域判断部、123 領域確保部、124 記憶識別子記憶部、131 種別取得部、132 種別判断部、133 データ割振り部、142 領域判断部、143 データ移動部、144 記憶識別子書換部、151 記憶識別子取得部、153 データ操作部、160 識別子記憶部、161 識別子情報記憶部、162 対象識別子記憶部、163 対応関係記憶部、165 識別子書換部、166 識別子情報書換部、167 対象識別子書換部、171 対象識別子判断部、172 対象記憶領域算出部、173 対象記憶領域判断部、180 コマンド記憶部、181 操作指令記憶部、185 コマンド書換部、186 操作指令書換部、191 操作指令解読部、192 操作対象識別部、193 操作実行部、201〜220 記憶領域、250 定義情報記憶領域、251〜253 定義情報、260 実体情報記憶領域、261〜267 実体情報、500 クラスファイル、510 ヘッダー、520 コンスタントプール情報、530 クラス情報、540 フィールド情報、550 メソッド情報、560 属性情報、521 エントリー数、522〜529 コンスタントプール(#1〜#n)、591 タグ、592 内容、593 番号、580 バイトコード、581 データ操作命令、582 参照番号、571 オペコード、572 オペランド、600 プログラム実行装置、610 インストラクション格納部、620 クラスファイル情報管理部、630 インストラクション実行部、640 テーブル管理部、650 参照解決部、660 メモリ配置判定部、670 動的メモリ確保部、680 メモリ再配置GC部、685 世代別GC部、690 メモリ、611,613,616 データ操作命令、612 参照番号、617 データ格納アドレス、621 コンスタントプールの内容、622 フィールドテーブルインデックス、623,641 データ格納アドレス、901 CRT、902 K/B、903 マウス、904 FDD、905 CDD、906 プリンタ装置、907 スキャナ装置、910 システムユニット、911 CPU、912 バス、913 ROM、914 RAM、915 通信ボード、920 磁気ディスク装置、921 OS、922 ウィンドウシステム、923 プログラム群、924 ファイル群、931 電話器、932 FAX機、940 インターネット、941 ゲートウェイ、942 LAN。

Claims (8)

  1. データを記憶する記憶領域を複数有する記憶装置と、
    データを識別するデータ識別子と、上記データ識別子によって識別されるデータを記憶した記憶領域を識別する記憶識別子との対応関係を、上記記憶装置の記憶領域に記憶する対応関係記憶部と、
    データを識別するデータ識別子と、データを記憶した記憶領域を識別する記憶識別子とのいずれかを対象識別子として、上記記憶装置の記憶領域に記憶する対象識別子記憶部と、
    上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断する対象識別子判断部と、
    上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対応関係記憶部が上記記憶装置の記憶領域に記憶したデータ識別子と記憶識別子との対応関係に基づいて、上記対象識別子記憶部が記憶領域に記憶したデータ識別子に対応する記憶識別子を求める対象記憶領域算出部と、
    上記対象記憶領域算出部が求めた記憶識別子によって記憶領域を識別し、識別した記憶領域が所定の記憶領域であるか否かを判断する対象記憶領域判断部と、
    上記対象記憶領域判断部が識別した記憶領域が所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が対象識別子を記憶した記憶領域に、上記対象記憶領域算出部が求めた記憶領域識別子を記憶する対象識別子書換部と
    上記記憶装置の記憶領域がデータを記憶しているか否かを判断する空き領域判断部と、
    データを記憶する記憶領域の確保を要求する領域確保要求を取得する領域確保要求取得部と、
    上記領域確保要求取得部が上記領域確保要求を取得した場合に、データを記憶していないと上記空き領域判断部が判断した記憶領域を、上記データを記憶する記憶領域として確保し、確保した記憶領域を識別する記憶識別子を通知する領域確保部と、
    上記領域確保要求取得部が領域確保要求を取得した場合に、上記領域確保部が確保する記憶領域が記憶するデータの種別を取得し、データ種別とする種別取得部と、
    上記種別取得部が取得したデータ種別が所定のデータ種別であるか否かを判断する種別判断部と、
    上記種別取得部が取得したデータ種別が上記所定のデータ種別であると上記種別判断部が判断した場合に、上記記憶領域のうち上記所定の記憶領域を上記領域確保部に確保させ、上記種別取得部が取得したデータ種別が所定のデータ種別ではないと上記種別判断部が判断した場合に、上記記憶領域のうち上記所定の記憶領域以外の記憶領域を上記領域確保部に確保させるデータ割振り部とを有することを特徴とする記憶管理装置。
  2. データを記憶する記憶領域を複数有する記憶装置と、
    データを識別するデータ識別子と、上記データ識別子によって識別されるデータを記憶した記憶領域を識別する記憶識別子との対応関係を、上記記憶装置の記憶領域に記憶する対応関係記憶部と、
    データを識別するデータ識別子と、データを記憶した記憶領域を識別する記憶識別子とのいずれかを対象識別子として、上記記憶装置の記憶領域に記憶する対象識別子記憶部と、
    上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断する対象識別子判断部と、
    上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対応関係記憶部が上記記憶装置の記憶領域に記憶したデータ識別子と記憶識別子との対応関係に基づいて、上記対象識別子記憶部が記憶領域に記憶したデータ識別子に対応する記憶識別子を求める対象記憶領域算出部と、
    上記対象記憶領域算出部が求めた記憶識別子によって記憶領域を識別し、識別した記憶領域が所定の記憶領域であるか否かを判断する対象記憶領域判断部と、
    上記対象記憶領域判断部が識別した記憶領域が所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が対象識別子を記憶した記憶領域に、上記対象記憶領域算出部が求めた記憶領域識別子を記憶する対象識別子書換部と
    上記記憶領域が記憶したデータの種別を判別してデータ種別とし、判別したデータ種別が所定のデータ種別であるか否かを判断する種別判断部と、
    上記データを記憶した記憶領域が上記所定の記憶領域であるか否かを判断する領域判断部と、
    上記記憶領域が記憶したデータの種別が所定のデータ種別であると上記種別判断部が判断し、かつ、上記データを記憶した記憶領域が上記所定の記憶領域でないと上記領域判断部が判断した場合に、上記記憶領域が記憶したデータを読み出し、読み出したデータを上記所定の記憶領域に記憶させ、上記記憶領域が記憶したデータの種別が上記所定のデータ種別でないと上記種別判断部が判断し、かつ、上記データを記憶した記憶領域が上記所定の記憶領域であると上記領域判断部が判断した場合に、上記記憶領域が記憶したデータを読み出し、読み出したデータを上記所定の記憶領域以外の記憶領域に記憶させるデータ移動部とを有することを特徴とする記憶管理装置。
  3. 上記記憶管理装置は、更に、
    上記記憶装置の記憶領域がデータを記憶しているか否かを判断する空き領域判断部と、
    データを記憶する記憶領域の確保を要求する領域確保要求を取得する領域確保要求取得部と、
    上記領域確保要求取得部が上記領域確保要求を取得した場合にデータを記憶していないと上記空き領域判断部が判断した記憶領域を、上記データを記憶する記憶領域として確保し、確保した記憶領域を識別する記憶識別子を通知する領域確保部と、
    上記領域確保部が通知した記憶識別子を取得し、取得した記憶識別子を他の記憶領域に記憶させる記憶識別子記憶部と、
    上記データ移動部がデータを読み出した記憶領域を識別する記憶識別子を記憶した記憶領域に、上記データ移動部がデータを記憶させた記憶領域を識別する記憶識別子を記憶する記憶識別子書換部とを有することを特徴とする請求項に記載の記憶管理装置。
  4. 上記記憶管理装置は、更に、
    上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを区別する情報を、識別子情報として記憶領域に記憶する識別子情報記憶部と、
    上記対象記憶領域判断部が識別した記憶領域が上記所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを区別する識別子情報を上記識別子情報記憶部が記憶した記憶領域に、上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であることを示す識別子情報を記憶する識別子情報書換部とを有し、
    上記対象識別子判断部は、上記識別子情報記憶部が記憶領域に記憶した識別子情報に基づいて、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断することを特徴とする請求項1乃至請求項のいずれかに記載の記憶管理装置。
  5. 上記記憶管理装置は、更に、
    記憶識別子によって識別される記憶領域が記憶したデータの操作を指令する記憶操作指令識別子と、データ識別子によって識別されるデータの操作を指令するデータ操作指令識別子とのいずれかである操作指令識別子を記憶領域に記憶する操作指令記憶部と、
    上記対象記憶領域判断部が識別した記憶領域が上記所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記操作指令記憶部が操作指令識別子を記憶した記憶領域に、上記記憶領域が記憶したデータ操作指令識別子と同一のデータの操作を指令する記憶操作指令識別子を記憶する操作指令書換部とを有し、
    上記対象識別子判断部は、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であるかデータ操作指令識別子であるかを判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であると判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子がデータ操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であると判断することを特徴とする請求項1乃至請求項のいずれかに記載の記憶管理装置。
  6. データを記憶する記憶領域を複数有する記憶装置と、
    データを識別するデータ識別子と、上記データ識別子によって識別されるデータを記憶した記憶領域を識別する記憶識別子との対応関係を、上記記憶装置の記憶領域に記憶する対応関係記憶部と、
    データを識別するデータ識別子と、データを記憶した記憶領域を識別する記憶識別子とのいずれかを対象識別子として、上記記憶装置の記憶領域に記憶する対象識別子記憶部と、
    上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断する対象識別子判断部と、
    上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対応関係記憶部が上記記憶装置の記憶領域に記憶したデータ識別子と記憶識別子との対応関係に基づいて、上記対象識別子記憶部が記憶領域に記憶したデータ識別子に対応する記憶識別子を求める対象記憶領域算出部と、
    上記対象記憶領域算出部が求めた記憶識別子によって記憶領域を識別し、識別した記憶領域が所定の記憶領域であるか否かを判断する対象記憶領域判断部と、
    上記対象記憶領域判断部が識別した記憶領域が所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が対象識別子を記憶した記憶領域に、上記対象記憶領域算出部が求めた記憶領域識別子を記憶する対象識別子書換部と
    記憶識別子によって識別される記憶領域が記憶したデータの操作を指令する記憶操作指令識別子と、データ識別子によって識別されるデータの操作を指令するデータ操作指令識別子とのいずれかである操作指令識別子を記憶領域に記憶する操作指令記憶部と、
    上記対象記憶領域判断部が識別した記憶領域が上記所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記操作指令記憶部が操作指令識別子を記憶した記憶領域に、上記記憶領域が記憶したデータ操作指令識別子と同一のデータの操作を指令する記憶操作指令識別子を記憶する操作指令書換部とを有し、
    上記対象識別子判断部は、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であるかデータ操作指令識別子であるかを判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であると判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子がデータ操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であると判断することを特徴とする記憶管理装置。
  7. 上記記憶管理装置は、更に、
    上記操作指令記憶部が記憶領域に記憶した操作指令識別子が指令するデータの操作を解読する操作指令解読部と、
    上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であると上記対象識別子判断部が判断した場合に、上記対象識別子記憶部が記憶領域に記憶した記憶識別子によって記憶領域を識別し、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対象記憶領域算出部が算出した記憶識別子によって記憶領域を識別する操作対象識別部と、
    上記操作対象識別部が識別した記憶領域が記憶したデータに対し、上記操作指令解読部が解読したデータの操作を実行する操作実行部とを有することを特徴とする請求項5または請求項6に記載の記憶管理装置。
  8. データを記憶する記憶領域を複数有する記憶装置を備えるコンピュータを、請求項1乃至請求項のいずれかに記載の記憶管理装置として機能させることを特徴とするコンピュータプログラム。
JP2005184233A 2005-06-24 2005-06-24 記憶管理装置及びコンピュータプログラム Expired - Fee Related JP4773143B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005184233A JP4773143B2 (ja) 2005-06-24 2005-06-24 記憶管理装置及びコンピュータプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005184233A JP4773143B2 (ja) 2005-06-24 2005-06-24 記憶管理装置及びコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2007004506A JP2007004506A (ja) 2007-01-11
JP4773143B2 true JP4773143B2 (ja) 2011-09-14

Family

ID=37690073

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005184233A Expired - Fee Related JP4773143B2 (ja) 2005-06-24 2005-06-24 記憶管理装置及びコンピュータプログラム

Country Status (1)

Country Link
JP (1) JP4773143B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4917138B2 (ja) 2009-10-07 2012-04-18 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクト最適配置装置、オブジェクト最適配置方法、及びオブジェクト最適配置プログラム
JP2015125713A (ja) * 2013-12-27 2015-07-06 富士電機株式会社 プログラマブルコントローラ・システム、その支援装置、プログラマブルコントローラ、プログラム
US9600409B2 (en) * 2014-08-29 2017-03-21 EMC IP Holding Company LLC Method and system for garbage collection in a storage system based on longevity of stored data
JP6403164B2 (ja) * 2015-09-11 2018-10-10 東芝メモリ株式会社 メモリシステム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0237444A (ja) * 1988-07-27 1990-02-07 Nec Corp リスト処理装置
JP2001184219A (ja) * 1999-12-27 2001-07-06 Matsushita Electric Ind Co Ltd コンパイル装置、コンパイル方法、コンパイルプログラムを記録している記録媒体、プログラム実行装置及びプログラム実行システム。
JP2002278828A (ja) * 2001-03-21 2002-09-27 Sony Corp ガーベージコレクション実行方法、コンピュータプログラム、プログラム格納媒体、および情報処理装置
JP2003241967A (ja) * 2002-02-15 2003-08-29 Matsushita Electric Ind Co Ltd プログラム実行装置およびその方法、並びにそこで実行されるプログラム
JP4504756B2 (ja) * 2004-07-26 2010-07-14 株式会社アプリックス Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム

Also Published As

Publication number Publication date
JP2007004506A (ja) 2007-01-11

Similar Documents

Publication Publication Date Title
JP5607943B2 (ja) メモリシステム及びその磨耗度管理方法
US9740716B2 (en) System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions
JP2005032259A (ja) 共有ライブラリーシステム及び前記システム構築方法
KR20130048206A (ko) 계층 변환 테이블 제어
US9116798B2 (en) Optimized memory management for class metadata
KR20210063862A (ko) 키-값 기반의 데이터 저장 장치 및 이를 포함하는 시스템
JPH113269A (ja) スタックの内容をサブスタックに分離することによる正確なガーベイジ・コレクションを補助するシステムと方法
TW202040406A (zh) 使用電路實現的軟體和用於金鑰—值儲存的方法
WO2012053284A1 (ja) オブジェクトへのアクセスを検出する方法、並びにそのコンピュータ及びコンピュータ・プログラム
JP4773143B2 (ja) 記憶管理装置及びコンピュータプログラム
US8042103B2 (en) Pre-translated files used in a virtual machine
CN116685957A (zh) 跟踪引用的垃圾收集状态
JP2006309763A (ja) メモリマップドページプライオリティ
US8447793B2 (en) Efficient remembered set for region-based garbage collectors
JP2009020696A (ja) 情報処理装置及びシステム
JP5531476B2 (ja) 情報処理装置及び情報処理プログラム
JP5489884B2 (ja) 命令実行装置、命令実行方法、及び命令実行プログラム
EP3987402A1 (en) Arena-based memory management
CN113327639B (zh) 一种基于lvgl的固件存储读取方法及装置
CN115756838A (zh) 内存释放、内存恢复方法、装置、计算机设备及存储介质
CN109923527B (zh) 可变类型建立器
JP6245028B2 (ja) 実行制御方法、実行制御プログラムおよび実行制御装置
JP2023540456A (ja) ガベージ・コレクションのための3色ビットマップ・アレイ
JP4504756B2 (ja) Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム
JP4589095B2 (ja) プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080404

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110322

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110425

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110517

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110603

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

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

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

Free format text: PAYMENT UNTIL: 20140701

Year of fee payment: 3

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