JP4773143B2 - 記憶管理装置及びコンピュータプログラム - Google Patents
記憶管理装置及びコンピュータプログラム Download PDFInfo
- 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
Links
Images
Description
確保した記憶領域が不用になった場合には、不用になった記憶領域を再利用することにより、記憶領域を有効に活用する。
また、確保した記憶領域が不用になったか否かを記憶管理装置が判別する方式もある。これはガーベージコレクション(Garbage Collection:以下「GC」という。)と呼ばれ、効率的なやり方の研究が盛んに行なわれている(例えば、非特許文献1)。
これは、移動法GCのように、GCのやり方そのものに起因する場合もある。
また、確保されている記憶領域が断片化すると、連続した記憶領域の確保ができなくなる場合があるので、未使用あるいは再利用可能な記憶領域を連続させるために、確保されている記憶領域が記憶しているデータを移動させる場合もある。
プログラム実行装置がプログラムを実行する際は、このテーブルを参照して、実際にデータを記憶している記憶領域を求め、その記憶領域にアクセスすることによって、そのデータにアクセスする。
また、記憶管理装置がそのデータを異なる記憶領域に移動させた場合には、テーブルの記憶識別子を書き換えることにより、プログラム実行装置が正しくそのデータにアクセスできるようにする。
クラスファイル500は、ヘッダー510、コンスタントプール情報520、クラス情報530、フィールド情報540、メソッド情報550、属性情報560などを有する。
コンスタントプール情報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は、名前参照(名前についての文字列情報を持つコンスタントプールの参照番号)と型参照(型についての文字列情報を持つコンスタントプールの参照番号)を示す。
バイトコードでは、コンスタントプールの参照番号を指定することにより、操作の対象となるデータを示す。
なお、この図では理解を助けるため、コンスタントプールに番号593を付してあるが、これはクラスファイル500のコンスタントプール情報520に記述されているものではない。
コンスタントプール(#6)は、フィールド参照情報(タグ591が「9」)を示している。内容592により、コンスタントプール(#1)を見れば、操作しようとしているフィールドが属するクラスについての情報が得られ、コンスタントプール(#9)を見れば、操作しようとしているフィールドの名前及び型についての情報が得られることがわかる。
コンスタントプール(#20)を参照すると、そのクラスの名前が「Sample」であることがわかる。
コンスタントプール(#27)を参照すると、そのフィールドの名前が「Value」であることがわかる。
また、コンスタントプール(#17)を参照すると、そのフィールドの型が「I」(整数型を意味する)であることがわかる。
しかし、クラスファイル500はクラスごとに存在するので、Sampleという名前のクラスについて定義したクラスファイル500のフィールド情報540を参照する必要がある。
そのクラスファイル500が定義するクラスの名前等についての情報は、クラス情報530にある。
また、そのフィールドが上位のクラスから継承したフィールドであれば、上位のクラスについて定義したクラスファイル500を参照しなければならない。
そのクラスファイル500が定義するクラスの上位クラスの名前等についての情報も、クラス情報530にある。
特許文献3の「従来技術」は、特許文献2の方式をもっと詳しく説明している。
すなわち、インストラクション(データ操作命令)を実行する際、コンスタントプールエントリ番号(参照番号)を、フィールドテーブルのインデックス番号に書き換えるとともに、インストラクションも、解決済インストラクションに書き換える構成である。
これにより、書き換えられたインストラクション(データ操作命令)を実行した場合だけでなく、同じコンスタントプールエントリ番号(参照番号)を参照する別のインストラクションを実行する場合にも、テーブルを辿る必要がなくなる。
したがって、このJavaVMは、インデックス番号によってフィールドテーブルを参照し、記憶領域のアドレスを求めて、その記憶領域が記憶したデータを操作する。
GCにより、そのフィールドのデータを実際に記憶している記憶領域が変わった場合には、フィールドテーブルが記憶したアドレスを書き換えて、常に正しくそのデータにアクセスできるようにする。
まず、参照番号に、テーブルの1レコード長を乗じる(1レコード長が2のべき乗であれば、シフト演算で代用できる)。
次に、これをテーブルの基底アドレス(参照番号0のデータを記憶している記憶領域の記憶識別子)に加える。
そして、そのアドレスの記憶領域から、目的とするデータを記憶した記憶領域のアドレス(記憶識別子)を読み出す。
最後に、そのアドレスの記憶領域にアクセスすることにより、目的とするデータを操作する。
テーブル自体が移動する可能性がある場合には、テーブルの基底アドレスを求めるために、別のテーブルを参照する必要がある場合もある。
データを記憶する複数の記憶領域を有する記憶装置と、
上記記憶領域がデータを記憶しているか否かを判断する空き領域判断部と、
データを記憶する記憶領域の確保を要求する領域確保要求を取得する領域確保要求取得部と、
上記領域確保要求取得部が上記領域確保要求を取得した場合に、記憶領域がデータを記憶していないと上記空き領域判断部が判断した記憶領域を、上記データを記憶する記憶領域として確保し、確保した記憶領域を識別する記憶識別子を通知する領域確保部と、
上記領域確保要求取得部が領域確保要求を取得した場合に、上記領域確保部が確保する記憶領域が記憶するデータの種別を取得し、データ種別とする種別取得部と、
上記種別取得部が取得したデータ種別が所定のデータ種別であるか否かを判断する種別判断部と、
上記種別取得部が取得したデータ種別が所定のデータ種別であると上記種別判断部が判断した場合に、上記記憶領域のうち所定の記憶領域を上記領域確保部に確保させ、上記種別取得部が取得したデータ種別が所定のデータ種別ではないと上記種別判断部が判断した場合に、上記記憶領域のうち所定の記憶領域以外の記憶領域を上記領域確保部に確保させるデータ割振り部と、
を有することを特徴とする。
実施の形態1を、図1〜図6を用いて説明する。
図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は、プログラムを実行する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などは、出力部の一例である。
磁気ディスク装置920には、OS921(オペレーティングシステム)、ウィンドウシステム922、プログラム群923、ファイル群924が記憶されている。プログラム群923は、CPU911、OS921、ウィンドウシステム922により実行される。
ファイル群924には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明するものが、「〜ファイル」として記憶されている。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、RAM914もしくはHDD920、FD(Flexible Disk)、光ディスク、CD(コンパクトディスク)、MD(ミニディスク)、DVD(Digital Versatile Disk)等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
記憶装置110は、例えば、RAM914、HDD920などを用いて実現する。
領域確保要求取得部121は、例えば、HDD920などが記憶したプログラム等をCPU911が実行することにより実現する。以下の各部も同様である。しかし、その一部あるいは全部をハードウェアにより実現してもよい。
例えば、ポインタを用いて、空き領域の先頭アドレスを指しておき、領域確保部123が記憶領域を確保するたびにポインタを進めれば、ポインタが示すアドレス以降のアドレスを有する記憶領域は、未使用であると判断する。
あるいは、それぞれの記憶領域に使用中であるか否かを示すフラグを設け(各記憶領域がフラグを記憶してもよいし、別の記憶領域に、各記憶領域に対応するフラグをまとめて記憶してもよい)、そのフラグを読み出すことにより、使用中であるか否かを判断してもよい。この場合、領域確保部123が記憶領域を確保したときに、そのフラグをセットして、その記憶領域が使用中になったことを示す。
あるいは、GCを用いて使用中の記憶領域のフラグをマークし、マークされなかった記憶領域は、再利用可能であると判断してもよい。
要求された記憶領域が確保できない場合には、GCによって、使用済の(再利用可能な)記憶領域を探してもよい。
なお、領域確保部123が確保した記憶領域のアドレスは、領域確保要求を通知したプログラム実行装置等に通知してもよい。
領域確保部123が確保した記憶領域のアドレスを記憶する記憶領域は、あらかじめ決められたアドレスを有する記憶領域であってもよい。あるいは、他の領域確保要求によって確保された記憶領域であってもよい。
あるいは、領域確保要求の内容(例えば、確保を要求する記憶領域の大きさなど)に基づいて、データ種別を判別してもよい。
例えば、処理の都合上必要となる一時的なインスタンスであれば、その処理が終わればすぐに必要なくなる。
あるいは、そのインスタンスに対する参照を記憶した変数が存在しなくなれば、そのインスタンスに対する操作は不可能となるので、そのインスタンスは必要なくなる。
そのインスタンスに対する参照を記憶した変数が存在しなくなるのは、例えば、その変数に他の値を代入した場合や、変数のスコープの外に処理が移ったため、変数そのものが消滅した場合などがある。
同じクラスのインスタンスは多数存在し、そのすべてが同じ定義情報を共有するからである。
また、そのクラスのインスタンスがすべて必要なくなった場合であっても、また、新しくそのクラスのインスタンスを生成するかもしれない。そのときに、もう一度クラスファイル500を読み込んでもよいが、処理が遅くなるので、一度記憶した定義情報は、実行が終了するまで保持しておいたほうがよい。
例えば、プログラム実行装置からの指令に基づいて、データの読み出し、書き込み、演算等を行なう。
S12において、種別取得部131がデータ種別を取得する。
S13において、種別判断部132がデータ種別を判断する。
S14において、データ割振り部133がデータ種別に基づいて、領域確保部123に確保する記憶領域のグループを指示する。
S15において、空き領域判断部122が確保可能な空き領域を判断する。
S16において、領域確保部123は、データ割振り部133からの指示にしたがって、空き領域判断部122が確保可能であると判断した記憶領域を確保する。
S17において、記憶識別子記憶部124は、領域確保部123が確保した記憶領域の記憶識別子を記憶領域に記憶する。
この図において、記憶領域201は、記憶領域201〜220のなかで、一番アドレスが下位の記憶領域である。また、記憶領域220は、一番アドレスが上位の記憶領域である。
実体情報記憶領域260は、寿命の短いグループである実体情報を記憶するための記憶領域のグループである。
すなわち、定義情報記憶領域250に領域を確保する場合、記憶領域201から確保していき、徐々にアドレスが上位の記憶領域を確保する。
また、実体情報記憶領域260に領域を確保する場合、記憶領域220から確保していき、徐々にアドレスが下位の記憶領域を確保する。
これにより、定義情報記憶領域250に記憶すべきデータのほうが多ければ、アドレスが中位の記憶領域(例えば、記憶領域210など)は、定義情報記憶領域250のグループに入る。
逆に、実体情報記憶領域260に記憶すべきデータのほうが多ければ、記憶領域210は、実体情報記憶領域260に入る。
実施の形態2を、図1、図2、図7〜図9を用いて説明する。
このとき、データ種別にかかわらず、記憶領域全体を1つのグループとして、領域を確保する。
例えば、領域確保要求とともに、プログラム実行装置が通知したデータ種別を、この実施の形態では図示していない種別取得部が取得し、確保した記憶領域、あるいは別の記憶領域に、やはり図示していない種別記憶部が記憶しておく。種別判断部132は、これを読み出して、データ種別を判断する。
あるいは、その記憶領域に対する参照の種類によって、データ種別を判断してもよい。
例えば、その記憶領域のアドレスをフィールドテーブルが記憶している場合には、その記憶領域はフィールドのデータを記憶していることが判断できる。
なお、記憶領域は、あらかじめどちらの目的に使うかを定めておいてもよいし、状況に応じて、どちらの目的に使う記憶領域が必要かを判断し、用途を変えることとしてもよい。
例えば、長寿データ記憶用の記憶領域が、短命のデータを記憶している場合や、逆に、短命データ記憶用の記憶領域が長寿のデータを記憶している場合に、そのデータを移動させる。
なお、これ以外に、GCによってデータを移動させる場合があってもよい。
S22において、領域判断部142が記憶領域の用途を判断する。
S23において、データ移動部143がデータを移動させるか否かを判断し、移動させると判断した場合には、記憶領域が記憶したデータを読み出し、読み出したデータを他の記憶領域に記憶する。
S24において、記憶識別子書換部144が、データを記憶した記憶領域のアドレスを記憶した記憶領域に、データ移動部143がデータを移動した移動先の記憶領域のアドレスを記憶する。
ここで、未使用の記憶領域が記憶領域220だけになったので、GCを行なう。
定義情報251,252,253を記憶するためには、記憶領域が合計7つ必要なので、領域判断部142は、記憶領域201〜207を長寿データ用記憶領域270と判断し、それ以外の記憶領域208〜220は、短命データ用記憶領域280と判断する。
そこで、今回生き残った実体情報262,264,266,267については、長寿候補であるとしてマークしておき、次回のGCでも生きていた場合には、長寿データ用記憶領域に入れることとしてもよい。
実施の形態3を、図1、図2、図5、図6、図9〜図11を用いて説明する。
図10において、記憶管理装置100は、記憶装置110、識別子記憶部160、対応関係記憶部163、対象識別子判断部171、対象記憶領域算出部172、対象記憶領域判断部173、識別子書換部165を有する。
対象識別子記憶部162は、対象識別子を記憶領域に記憶する。
ここで、対象識別子とは、データを記憶した記憶領域を識別する記憶識別子(例えば、アドレスなど)、あるいは、データを識別するデータ識別子(例えば、変数名やコンスタントプールの参照番号など)をいう。
識別子情報記憶部161は、識別子情報を記憶領域に記憶する。
ここで、識別子情報とは、対象識別子記憶部162が記憶領域に記憶した対象識別子が記憶識別子であるか、データ識別子であるかを区別するための情報である。
対象識別子記憶部162と識別子情報記憶部161は、対象識別子と識別子情報をセットにして(例えば、対象識別子の最上位ビットを識別子情報のフラグとして用いるなど)、1つの記憶領域に記憶してもよい。あるいは、対応する別の記憶領域に記憶してもよい。
なお、識別子情報は、対象識別子が記憶識別子であるかデータ識別子であるかを判断するための情報の一例であって、他の手段により両者を区別できる場合には、識別子情報記憶部161はなくてもよい。
変数名などのデータ識別子は、データを抽象的に表現したものであって、実体としてのデータは、いずれかの記憶領域が記憶するものである。したがって、プログラム等からデータを操作するには、そのデータを記憶した記憶領域のアドレス等、記憶識別子によって記憶領域を識別し、識別した記憶領域にアクセスする必要がある。
したがって、プログラム等に記述されたデータ識別子を、そのデータ識別子によって識別されるデータを実際に記憶している記憶領域の記憶識別子に変換する必要がある。
対応関係記憶部163が記憶領域に記憶する対応関係とは、その変換に用いるテーブル等のデータである。テーブル等のデータ構成については、既知の構成が多数存在するので、ここでは詳しく説明しない。
対象識別子書換部167は、対象識別子記憶部162が記憶領域に記憶した対象識別子を、データ識別子からそれに対応する記憶識別子に書き換える。
識別子情報書換部166は、それに対応して、識別子情報を、対象識別子が記憶識別子であることを示す情報に書き換える。
これに対して、対象識別子が記憶識別子であれば、そのまま直接、記憶識別子によって識別される記憶領域にアクセスすることができるので、処理時間が短くてすむ。
したがって、プログラムの実行にかかる処理時間を短くするためには、対象識別子が記憶識別子であるほうがよい。
対象識別子がデータ識別子であれば、対応関係記憶部163が記憶領域に記憶した対応関係を書き換えるだけで、データの移動に対処できる。
また、GCなどによりデータを移動する可能性がある場合には、対象識別子がデータ識別子であってもそのままにしておく。記憶識別子に書き換えることによる処理時間の短縮効果よりも、GCなどによりデータを移動した場合の処理が増えることによるマイナスが大きいからである。
これに対し、実体情報記憶領域260が記憶したデータは、GCなどにより移動する可能性がある。
したがって、そのデータを記憶した記憶領域の記憶識別子に基づいて、それが定義情報記憶領域250に属するものか、実体情報記憶領域260に属するものかを判断すれば、そのデータを移動する可能性があるか否かがわかる。
具体的には、例えば、定義情報記憶領域250の記憶領域の最上位のもの(図6の例でいえば、記憶領域207)のアドレス(記憶識別子)を記憶しておき、そのアドレスと、対象データを記憶した記憶領域のアドレスとの大小関係を比較する比較器を設けることにより、判断が可能である。なお、これは一例であって、その他既知の判断方式によって判断してもよい。
したがって、上述したのと同様に、そのデータを記憶した記憶領域の記憶識別子に基づいて、それが長寿データ用記憶領域270に属するものか、短命データ用記憶領域280に属するものかを判断すれば、そのデータを移動する可能性があるか否かがわかる。
対象識別子が記憶識別子であると判断した場合には、処理を終了する。
対象識別子がデータ識別子であると判断した場合には、S32に進む。
移動のある領域に記憶されていると判断した場合には、処理を終了する。
移動のない領域に記憶されていると判断した場合には、S34に進む。
実施の形態4を、図1、図2、図12〜図14、図27を用いて説明する。
図12において、記憶管理装置100は、記憶装置110、コマンド記憶部180、対応関係記憶部163、対象識別子判断部171、対象記憶領域算出部172、対象記憶領域判断部173、コマンド書換部185、操作指令解読部191、操作対象識別部192、操作実行部193を有する。
ここで、コマンドとは、記憶管理装置100に対して記憶領域が記憶したデータの操作を指令するもので、プログラムの一部である。
この例では、コマンドは操作指令識別子と対象識別子とからなる。
操作指令識別子は、記憶領域が記憶したデータの操作方法(例えば、読み出し、書き込み、演算など)を示すもので、操作指令記憶部181が記憶領域に記憶する。
また、対象識別子は、操作対象を識別するもので、記憶識別子あるいはデータ識別子である。対象識別子は、対象識別子記憶部162が記憶領域に記憶する。
対象識別子が記憶識別子であるか、データ識別子であるかを区別する識別子情報は、操作指令識別子の中に含まれる。すなわち、同じデータ操作を指令する場合であっても、異なる操作指令識別子を用いることによって、区別する。すなわち、操作対象の識別が記憶識別子によって行われる場合には記憶操作指令識別子を用い、データ識別子によって行われる場合にはデータ操作指令識別子を用いる。
例えば、オペコード571が「B2」(1バイト(8ビット)のデータであるが、ここでは16進数で表現している)である場合、オペランド572(2バイト(16ビット)のデータ)はコンスタントプールの参照番号を示す。そして、その参照番号により参照したコンスタントプールの内容によって識別されるスタティックフィールドに対して、データを読み出すという操作を行なうことを意味している(データ操作指令識別子の一例)。
また、非スタティックフィールドとは、インスタンスに固有のフィールドで、同じクラスのインスタンスでも、インスタンスごとに異なる値を持つことができるものをいう。通常、非スタティックフィールドのデータの内容は、インスタンスの実体情報を記憶する記憶領域に記憶する。
すなわち、対象識別子は、対象識別子書換部167が書き換え、操作指令識別子は、操作指令書換部186が書き換える。
これは、JavaVMは、記憶領域を動的に割り当てるので、クラスファイルを読み込む前にそのデータを記憶する記憶領域がどこになるかを知ることは不可能だからである。
ここで、バイトコードのオペコード571は、「00」〜「CA」,「FE」,「FF」(いずれも16進数)はその意味が定義されているが、「CB」〜「FD」については定義されていない。
定義されていないオペコード571「CB」〜「FD」については、クラスファイル中に決して現れることがないので、JavaVMが実行時に自由に使うことができる。
なお、フィールドの型によって、扱うデータのサイズ(例えば、32ビット長か64ビット長か)が異なるので、この例では、型ごとに異なるオペコード571を割り当てている。しかし、他の方法で扱うべきデータのサイズが分かるのであれば、型を区別せず同じオペコードを割り当ててもよい。
対象識別子が記憶識別子であると判断した場合には、処理を終了する。
対象識別子がデータ識別子であると判断した場合には、S42に進む。
移動のある領域に記憶されていると判断した場合には、処理を終了する。
移動のない領域に記憶されていると判断した場合には、S44に進む。
書き換えられないコマンドであると判断した場合には、処理を終了する。
書き換えられるコマンドであると判断した場合には、S45に進む。
したがって、操作指令識別子の中に、対象識別子が記憶識別子かデータ識別子かを示す情報を組み込んでしまえば、条件分岐の数を増やさずに、対象識別子によって、データを識別する方法を変えることができ、プログラムの実行速度が速くなる。
実施の形態5を、図1、図2、図15〜図18を用いて説明する。
図15において、プログラム実行装置600は、インストラクション格納部610、クラスファイル情報管理部620、インストラクション実行部630、テーブル管理部640、参照解決部650、メモリ配置判定部660、動的メモリ確保部670、メモリ再配置GC部680、メモリ690を有する。
プログラム実行装置600は、インタプリタ型のプログラム実行装置であって、命令を一つ一つ解釈しながら実行を行う。
この実施の形態で説明するプログラム実行装置600は、Java(登録商標)のソースプログラムよりコンパイルされたバイトコードのプログラムを実行するものである。
これらの参照用テーブルの設定情報は、インストラクション実行部630、参照解決部650が利用するものである。
動的メモリ確保部670は、メモリ690からインスタンスの領域を確保できなかった場合、メモリ再配置GC部680に対して、プログラムが利用していない領域の回収を要求する。
また、動的メモリ確保部670が確保しようとした大きさの連続した領域が確保できなかった場合には、メモリ690のコンパクション処理を実行する。
なお、この実施の形態のプログラム実行装置600は、コンパクション処理時にクラスインスタンスの配置の変更が無くなるように再配置する処理を行なう。
記憶領域割当部は、動的メモリ確保部670に対して行われたメモリ領域確保の要求に対して、メモリ690中の使用されていない記憶領域を提供する処理を行う。
この実施の形態では、プログラムの実行に先立ち、各クラスファイル情報に含まれる情報について、それぞれの名前による参照を解決し、得られた参照解決結果をクラスファイルに書き込む。
参照の解決方法及び、クラスファイル情報内に書き込まれる処理についての詳細は、既知の方式が存在するので、ここでは詳しく説明しない。
メモリ配置判定部660は、インストラクション実行部630の問合せに応じて、実行されるインストラクションに指定されたフィールドやメソッドを含むインスタンスが割り当てられている領域の配置が頻繁に移動するかどうかの判定を行う。
この図は、システム起動からクラスファイル参照の解決、また、プログラム実行において、インスタンスのメモリ領域の配置を判定し、フィールド、クラスのデータ格納領域のアドレスをクラスファイル情報内に格納し、インストラクションを実行する一連の流れを示している。
図17は、この実施の形態において、インストラクション格納部610、クラスファイル情報管理部620、テーブル管理部640が記憶する内容の一例を示す図である。
プログラム実行装置600は、プログラムの実行を開始する前に、必要なクラスの参照解決を行なう。参照解決の結果は、クラスファイル情報管理部620が記憶する。
参照解決処理の詳細については、既知の方式があるので、ここでは詳しく説明しない。
また、このように、プログラム実行前に、すべての参照を解決しておくのではなく、プログラムを実行しながら、必要になった段階で、参照を解決することとしてもよい。
例えば、コンスタントプールの内容621についての情報を記憶する。図17の例では、コンスタントプールの参照番号6として、「クラス参照:1」「名前型参照:9」という情報を記憶している。
フィールドテーブルインデックス622(データ識別子の一例)は、フィールドテーブルへの参照番号を示す。この例において「−1」は、参照番号を記憶していないことを示している。
フィールドテーブルは、テーブル管理部640が記憶している。
フィールドテーブルは、そのフィールドのデータを実際に記憶するメモリのアドレスを記憶する。
この例では、コンスタントプール参照番号6のフィールドについて操作する場合、そのフィールドのデータを記憶しているメモリのアドレスはフィールドテーブルの参照番号35を見ればわかる。フィールドテーブルによれば、データ格納アドレス641(記憶識別子の一例)は「ABCD」なので、メモリ690(記憶装置の一例)のアドレス「ABCD」(記憶領域の一例)にアクセスすることにより、そのフィールドのデータを操作できる。
この実施の形態によるクラスファイル情報に対して、データ格納領域のアドレスを格納し、インストラクションを実行する。
後述するように、クラスファイル情報管理部620がフィールドテーブルインデックス622(データ識別子の一例)ではなく、データ格納アドレス623(記憶識別子の一例)を記憶している場合には、インストラクション格納部610の内容を書き換えて、データ操作命令611が、データ操作命令613になっている(識別子情報の一例)。
したがって、インストラクション実行部630は、データ操作命令が何であるかを判断することで、クラスファイル情報にデータ格納アドレスが設定されているかを判断する。
インストラクション実行部630は、データ格納アドレスが設定されていると判断した場合、S62に進み、インストラクションの実行手続をする。
インストラクション実行部630は、データ格納アドレスが設定されていないと判断した場合、S59に進む。
この例でいえば、コンスタントプールの参照番号6から、フィールドテーブルインデックス622「35」を取得し、これをオブジェクトオフセット値として、フィールドの値を格納した領域のアドレスであるデータ格納アドレス「ABCD」を求める。
インストラクション実行部630は、メモリ配置判定部660が移動の多い領域であると判定した場合、S62に進み、算出したデータ格納アドレスを用いて、インストラクションの実行手続を行う。
インストラクション実行部630は、メモリ配置判定部660が移動の多い領域でないと判定した場合、S61に進む。
インストラクション実行部630が実行終了であると判断した場合には、プログラムの実行を終了する。
例えば、世代別GCにおいては、新世代領域のデータは頻繁に移動するが、旧世代領域のデータは頻繁に移動しない。
したがって、メモリ配置判定部660は、そのアドレスから、そのメモリが新世代領域であるか旧世代領域であるかを判断することにより、頻繁に移動するか否かを判定する。
なお、メソッドの参照解決のためには、クラス名やメソッド名からメソッドのプログラム格納位置を指定する参照テーブル(メソッドテーブル)がある。
メソッドテーブルについても、ここで説明したのと同様、インストラクションおよび関連する参照用情報から読み取ったメソッド名により、メソッドテーブル内のインデックスを取得することでメソッドの参照解決を行うと共に、インストラクションを書き換える構成とすることができる。
この場合、書き換えられたインストラクションのオペランドとして、メソッドテーブルのインデックスを書き込む。本発明では、メソッドに関しても、メソッドが格納されたデータ格納領域のアドレスをオペランドに設定した命令に書き換えを行う。
実施の形態6を、図1、図2、図15、図19、図20を用いて説明する。
図20は、この実施の形態において、インストラクション格納部610、クラスファイル情報管理部620、テーブル管理部640が記憶する内容の一例を示す図である。
この実施の形態では、実施の形態5と異なり、インストラクションを実行しながら、未解決の参照が要求された段階で、参照解決を行なう方式を採っている。
しかし、起動時にあらかじめ参照解決処理を行う構成としてもよい。
後述するように、オペランドが参照番号612(データ識別子の一例)ではなく、データ格納アドレス(記憶識別子の一例)を直接指定する場合には、データ操作命令611(データ操作指令識別子の一例)をデータ操作命令616(記憶操作指令識別子の一例)に書き換えてある。
したがって、インストラクション実行部630は、データ操作命令が何であるかを判定することにより、オペランドが参照番号であるか、データ格納アドレスであるかを判断する。
インストラクション実行部630は、データ格納アドレスが指定されていると判断した場合には、S83に進み、インストラクションの実行手続を行う。
インストラクション実行部630は、データ格納アドレスが指定されていないと判断した場合には、S80に進む。
この例でいえば、参照番号612が「6」であるから、クラスファイル情報管理部620がメモリ690に記憶したコンスタントプールの参照番号「6」を見る。
次に、フィールドテーブルインデックス622が「35」であるから、テーブル管理部640がメモリ690に記憶したフィールドテーブルの参照番号「35」を見る。
そして、データ格納アドレス641が「ABCD」であるから、これが、そのフィールドのデータを記憶したメモリ690のアドレスであることがわかる。
メモリ配置判定部660は、そのデータ格納アドレスが移動の多い領域に配置されていると判定した場合には、S83に進み、インストラクションを実行する。
メモリ配置判定部660は、そのデータ格納アドレスが移動の多い領域に配置されていないと判定した場合には、S82に進む。
すなわち、参照番号612をデータ格納アドレス617に書き換えるとともに、データ操作命令611をデータ操作命令616に書き換える。
S84において、インストラクション実行部630は、プログラム実行の終了か否かを判断し、終了でない場合には、S74に戻る。
実施の形態7を、図1、図2、図15、図21、図22を用いて説明する。
例えば、使用するメモリ領域に使用用途を示すヘッダを付加しておき、その値によってクラスインスタンスであるかオブジェクトインスタンスであるかを判断する。
メモリ再配置GC部680は、その記憶領域が記憶したデータがオブジェクトインスタンスであると判断した場合、S94に進む。
すなわち、再配置リストを先頭から読み込み、データの種類がクラスインスタンスであるものについて、先に再配置先のアドレスを決定する。
次に、それ以外のデータについて、再配置先のアドレスを決定する。
アドレスの決定は、最初に再配置先のメモリ690の先頭アドレスから始めて、1つ決定するたびに、そのアドレスに決定したデータのサイズを足して、次の再配置先を求める。データのサイズは、例えば、使用するメモリ領域に設けたヘッダによって判別する。
決定した再配置先アドレスは、再配置リストに記憶する。
例えば、実施の形態5及び実施の形態6において、図17及び図20を用いて説明したように、テーブル管理部640(対応関係記憶部の一例)がメモリ690に記憶したフィールドテーブル(対応関係)は、データ格納アドレス641(記憶識別子の一例)を記憶している。
メモリ再配置GC部680は、このデータ格納アドレス641を、再配置後のデータ格納アドレスに変更する。
また、メモリ再配置GC部680は、クラスファイル情報管理部620がメモリ690に記憶したクラスファイル情報のデータ格納アドレス623、インストラクション格納部610がメモリ690に記憶したインストラクションのデータ格納アドレス617も、同様に書き換える。
あるいは、クラスファイル情報やインストラクションは、もとの状態に戻してもよい。
例えば、インストラクションを書き換えたときに書き換えた場所及び書換前のデータをメモリ690に別に記憶しておき、それに基づいて書換え、あるいは、書き戻しをする。
これに対し、従来の方式で、クラスインスタンスとオブジェクトインスタンスとを区別しないで再配置すると、クラスインスタンスとオブジェクトインスタンスとが混在する状態になる。
実施の形態8を、図1、図2、図18、図23、図24を用いて説明する。
図23において、プログラム実行装置600は、インストラクション格納部610、クラスファイル情報管理部620、インストラクション実行部630、テーブル管理部640、参照解決部650、メモリ配置判定部660、動的メモリ確保部670、世代別GC部685、メモリ690を有する。
このうち、インストラクション格納部610、クラスファイル情報管理部620、インストラクション実行部630、テーブル管理部640、参照解決部650、メモリ配置判定部660、動的メモリ確保部670、メモリ690の動作は、実施の形態5において、図15を用いて説明したものと同様なので、ここでは説明を省略する。
世代別GCでは、基本的に、新世代領域についてGCを行なう。そして、新世代領域をGCしただけではメモリ領域が足りなくなった場合に、旧世代領域についてGCを行なう。
したがって、世代別GCでは、旧世代領域のデータは、移動することが少ない。
例えば、新世代領域と旧世代領域の境界のアドレスを記憶しておき、そのアドレスとデータ格納アドレスの大小関係を比較する比較器を設けることにより、簡単に判定が可能である。
なお、この例では、記憶領域がクラスインスタンスかオブジェクトインスタンスかは区別しないので、再配置リストは、データの種類を記憶する必要はない。
アドレスの決定は、例えば、最初に再配置先のメモリ690の先頭アドレスから始めて、1つ決定するたびに、そのアドレスに決定したデータのサイズを足して、次の再配置先を求める。データのサイズは、例えば、使用するメモリ領域に設けたヘッダによって判別する。
求めたアドレスは、再配置リストに記憶する。
すなわち、現在のデータ格納アドレスからデータを読み出し、再配置先のアドレスに書き込む。
すなわち、テーブル管理部640(対応関係記憶部の一例)がメモリ690に記憶したフィールドテーブル、クラスファイル情報管理部620がメモリ690に記憶したクラスファイル情報、インストラクション格納部610がメモリ690に記憶したインストラクションなどの中で、メモリのデータ格納アドレスを直接参照している部分について、再配置後のデータ格納アドレスに書き換える。
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを保持する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムへのリンク情報内に保持する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムの命令を書き換えると共にオペランドに保持する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
ガーベージコレクションのメモリコンパクション時に、シンボルのデータを格納するアドレスの変更が少なくするようにメモリ領域の配置を行う手段を備えるガーベージコレクションを行うインタプリタ型プログラム実行装置である。
ガーベージコレクションのメモリコンパクション時に、シンボルのデータを格納するアドレスの変更が少なくするようにクラスインスタンスを移動しない領域である前方に集めるメモリ領域の配置を行う手段を備えるガーベージコレクションを行うインタプリタ型プログラム実行装置である。
メモリ配置判定手段は、世代別ガーベージコレクションの旧世代領域をアドレス変更が少なくなるように配置されたと判断するガーベージコレクションを行うインタプリタ型プログラム実行装置である。
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを保持する手段とガーベージコレクションは、解決済みシンボルのデータ格納領域のアドレスが無効となった際に保持する解決済みシンボルのデータ格納領域のアドレスを廃棄する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムへのリンク情報内に保持する手段と、
ガーベージコレクションは、解決済みシンボルのデータ格納領域のアドレスが無効となった際に実行用プログラムへのリンク情報内の解決済みシンボルのデータ格納領域のアドレスを廃棄する手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
解決済みシンボルのデータ格納領域のアドレス変更が少なくなるように配置されたことを判断する手段と、
前記手段の判断結果に基づき、解決済みシンボルのデータ格納領域のアドレスを、実行用プログラムの命令を書き換えると共にオペランドに保持する手段と、
ガーベージコレクションは、解決済みシンボルのデータ格納領域のアドレスが無効となった際に実行用プログラムの命令のオペランドに保持した解決済みシンボルのデータ格納領域のアドレスを廃棄し、実行用プログラムの命令を書き換えると共にインデックス等の間接参照のオフセットに書きかえる手段を備えることを特徴とするガーベージコレクションを行うインタプリタ型プログラム実行装置である。
上記のように、メモリコンパクションを伴うガーベージコレクションを行うインタプリタ型プログラム実行装置においては、ガーベージコレクションの処理時間を短くするために、参照または設定するデータの格納アドレスをテーブルとオフセットという形式で保存している。しかし、その反面、テーブルの先頭アドレスとオフセットを加算するアドレス計算が行われることで命令の実行速度を低下させている。
Claims (8)
- データを記憶する記憶領域を複数有する記憶装置と、
データを識別するデータ識別子と、上記データ識別子によって識別されるデータを記憶した記憶領域を識別する記憶識別子との対応関係を、上記記憶装置の記憶領域に記憶する対応関係記憶部と、
データを識別するデータ識別子と、データを記憶した記憶領域を識別する記憶識別子とのいずれかを対象識別子として、上記記憶装置の記憶領域に記憶する対象識別子記憶部と、
上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断する対象識別子判断部と、
上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対応関係記憶部が上記記憶装置の記憶領域に記憶したデータ識別子と記憶識別子との対応関係に基づいて、上記対象識別子記憶部が記憶領域に記憶したデータ識別子に対応する記憶識別子を求める対象記憶領域算出部と、
上記対象記憶領域算出部が求めた記憶識別子によって記憶領域を識別し、識別した記憶領域が所定の記憶領域であるか否かを判断する対象記憶領域判断部と、
上記対象記憶領域判断部が識別した記憶領域が所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が対象識別子を記憶した記憶領域に、上記対象記憶領域算出部が求めた記憶領域識別子を記憶する対象識別子書換部と、
上記記憶装置の記憶領域がデータを記憶しているか否かを判断する空き領域判断部と、
データを記憶する記憶領域の確保を要求する領域確保要求を取得する領域確保要求取得部と、
上記領域確保要求取得部が上記領域確保要求を取得した場合に、データを記憶していないと上記空き領域判断部が判断した記憶領域を、上記データを記憶する記憶領域として確保し、確保した記憶領域を識別する記憶識別子を通知する領域確保部と、
上記領域確保要求取得部が領域確保要求を取得した場合に、上記領域確保部が確保する記憶領域が記憶するデータの種別を取得し、データ種別とする種別取得部と、
上記種別取得部が取得したデータ種別が所定のデータ種別であるか否かを判断する種別判断部と、
上記種別取得部が取得したデータ種別が上記所定のデータ種別であると上記種別判断部が判断した場合に、上記記憶領域のうち上記所定の記憶領域を上記領域確保部に確保させ、上記種別取得部が取得したデータ種別が所定のデータ種別ではないと上記種別判断部が判断した場合に、上記記憶領域のうち上記所定の記憶領域以外の記憶領域を上記領域確保部に確保させるデータ割振り部とを有することを特徴とする記憶管理装置。 - データを記憶する記憶領域を複数有する記憶装置と、
データを識別するデータ識別子と、上記データ識別子によって識別されるデータを記憶した記憶領域を識別する記憶識別子との対応関係を、上記記憶装置の記憶領域に記憶する対応関係記憶部と、
データを識別するデータ識別子と、データを記憶した記憶領域を識別する記憶識別子とのいずれかを対象識別子として、上記記憶装置の記憶領域に記憶する対象識別子記憶部と、
上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断する対象識別子判断部と、
上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対応関係記憶部が上記記憶装置の記憶領域に記憶したデータ識別子と記憶識別子との対応関係に基づいて、上記対象識別子記憶部が記憶領域に記憶したデータ識別子に対応する記憶識別子を求める対象記憶領域算出部と、
上記対象記憶領域算出部が求めた記憶識別子によって記憶領域を識別し、識別した記憶領域が所定の記憶領域であるか否かを判断する対象記憶領域判断部と、
上記対象記憶領域判断部が識別した記憶領域が所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が対象識別子を記憶した記憶領域に、上記対象記憶領域算出部が求めた記憶領域識別子を記憶する対象識別子書換部と、
上記記憶領域が記憶したデータの種別を判別してデータ種別とし、判別したデータ種別が所定のデータ種別であるか否かを判断する種別判断部と、
上記データを記憶した記憶領域が上記所定の記憶領域であるか否かを判断する領域判断部と、
上記記憶領域が記憶したデータの種別が所定のデータ種別であると上記種別判断部が判断し、かつ、上記データを記憶した記憶領域が上記所定の記憶領域でないと上記領域判断部が判断した場合に、上記記憶領域が記憶したデータを読み出し、読み出したデータを上記所定の記憶領域に記憶させ、上記記憶領域が記憶したデータの種別が上記所定のデータ種別でないと上記種別判断部が判断し、かつ、上記データを記憶した記憶領域が上記所定の記憶領域であると上記領域判断部が判断した場合に、上記記憶領域が記憶したデータを読み出し、読み出したデータを上記所定の記憶領域以外の記憶領域に記憶させるデータ移動部とを有することを特徴とする記憶管理装置。 - 上記記憶管理装置は、更に、
上記記憶装置の記憶領域がデータを記憶しているか否かを判断する空き領域判断部と、
データを記憶する記憶領域の確保を要求する領域確保要求を取得する領域確保要求取得部と、
上記領域確保要求取得部が上記領域確保要求を取得した場合に、データを記憶していないと上記空き領域判断部が判断した記憶領域を、上記データを記憶する記憶領域として確保し、確保した記憶領域を識別する記憶識別子を通知する領域確保部と、
上記領域確保部が通知した記憶識別子を取得し、取得した記憶識別子を他の記憶領域に記憶させる記憶識別子記憶部と、
上記データ移動部がデータを読み出した記憶領域を識別する記憶識別子を記憶した記憶領域に、上記データ移動部がデータを記憶させた記憶領域を識別する記憶識別子を記憶する記憶識別子書換部とを有することを特徴とする請求項2に記載の記憶管理装置。 - 上記記憶管理装置は、更に、
上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを区別する情報を、識別子情報として記憶領域に記憶する識別子情報記憶部と、
上記対象記憶領域判断部が識別した記憶領域が上記所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを区別する識別子情報を上記識別子情報記憶部が記憶した記憶領域に、上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であることを示す識別子情報を記憶する識別子情報書換部とを有し、
上記対象識別子判断部は、上記識別子情報記憶部が記憶領域に記憶した識別子情報に基づいて、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断することを特徴とする請求項1乃至請求項3のいずれかに記載の記憶管理装置。 - 上記記憶管理装置は、更に、
記憶識別子によって識別される記憶領域が記憶したデータの操作を指令する記憶操作指令識別子と、データ識別子によって識別されるデータの操作を指令するデータ操作指令識別子とのいずれかである操作指令識別子を記憶領域に記憶する操作指令記憶部と、
上記対象記憶領域判断部が識別した記憶領域が上記所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記操作指令記憶部が操作指令識別子を記憶した記憶領域に、上記記憶領域が記憶したデータ操作指令識別子と同一のデータの操作を指令する記憶操作指令識別子を記憶する操作指令書換部とを有し、
上記対象識別子判断部は、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であるかデータ操作指令識別子であるかを判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であると判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子がデータ操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であると判断することを特徴とする請求項1乃至請求項3のいずれかに記載の記憶管理装置。 - データを記憶する記憶領域を複数有する記憶装置と、
データを識別するデータ識別子と、上記データ識別子によって識別されるデータを記憶した記憶領域を識別する記憶識別子との対応関係を、上記記憶装置の記憶領域に記憶する対応関係記憶部と、
データを識別するデータ識別子と、データを記憶した記憶領域を識別する記憶識別子とのいずれかを対象識別子として、上記記憶装置の記憶領域に記憶する対象識別子記憶部と、
上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であるか記憶識別子であるかを判断する対象識別子判断部と、
上記対象識別子記憶部が上記記憶装置の記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対応関係記憶部が上記記憶装置の記憶領域に記憶したデータ識別子と記憶識別子との対応関係に基づいて、上記対象識別子記憶部が記憶領域に記憶したデータ識別子に対応する記憶識別子を求める対象記憶領域算出部と、
上記対象記憶領域算出部が求めた記憶識別子によって記憶領域を識別し、識別した記憶領域が所定の記憶領域であるか否かを判断する対象記憶領域判断部と、
上記対象記憶領域判断部が識別した記憶領域が所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記対象識別子記憶部が対象識別子を記憶した記憶領域に、上記対象記憶領域算出部が求めた記憶領域識別子を記憶する対象識別子書換部と、
記憶識別子によって識別される記憶領域が記憶したデータの操作を指令する記憶操作指令識別子と、データ識別子によって識別されるデータの操作を指令するデータ操作指令識別子とのいずれかである操作指令識別子を記憶領域に記憶する操作指令記憶部と、
上記対象記憶領域判断部が識別した記憶領域が上記所定の記憶領域であると上記対象記憶領域判断部が判断した場合に、上記操作指令記憶部が操作指令識別子を記憶した記憶領域に、上記記憶領域が記憶したデータ操作指令識別子と同一のデータの操作を指令する記憶操作指令識別子を記憶する操作指令書換部とを有し、
上記対象識別子判断部は、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であるかデータ操作指令識別子であるかを判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子が記憶操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であると判断し、上記操作指令記憶部が記憶領域に記憶した操作指令識別子がデータ操作指令識別子であると判断した場合に、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であると判断することを特徴とする記憶管理装置。 - 上記記憶管理装置は、更に、
上記操作指令記憶部が記憶領域に記憶した操作指令識別子が指令するデータの操作を解読する操作指令解読部と、
上記対象識別子記憶部が記憶領域に記憶した対象識別子が記憶識別子であると上記対象識別子判断部が判断した場合に、上記対象識別子記憶部が記憶領域に記憶した記憶識別子によって記憶領域を識別し、上記対象識別子記憶部が記憶領域に記憶した対象識別子がデータ識別子であると上記対象識別子判断部が判断した場合に、上記対象記憶領域算出部が算出した記憶識別子によって記憶領域を識別する操作対象識別部と、
上記操作対象識別部が識別した記憶領域が記憶したデータに対し、上記操作指令解読部が解読したデータの操作を実行する操作実行部とを有することを特徴とする請求項5または請求項6に記載の記憶管理装置。 - データを記憶する記憶領域を複数有する記憶装置を備えるコンピュータを、請求項1乃至請求項7のいずれかに記載の記憶管理装置として機能させることを特徴とするコンピュータプログラム。
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)
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)
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(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム |
-
2005
- 2005-06-24 JP JP2005184233A patent/JP4773143B2/ja not_active Expired - Fee Related
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 |