JP5044816B2 - オブジェクトを記憶・管理するシステム - Google Patents

オブジェクトを記憶・管理するシステム Download PDF

Info

Publication number
JP5044816B2
JP5044816B2 JP2007231126A JP2007231126A JP5044816B2 JP 5044816 B2 JP5044816 B2 JP 5044816B2 JP 2007231126 A JP2007231126 A JP 2007231126A JP 2007231126 A JP2007231126 A JP 2007231126A JP 5044816 B2 JP5044816 B2 JP 5044816B2
Authority
JP
Japan
Prior art keywords
new
old
unit
area
generation
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
JP2007231126A
Other languages
English (en)
Other versions
JP2009064217A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2007231126A priority Critical patent/JP5044816B2/ja
Priority to US12/192,766 priority patent/US8176100B2/en
Publication of JP2009064217A publication Critical patent/JP2009064217A/ja
Application granted granted Critical
Publication of JP5044816B2 publication Critical patent/JP5044816B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、オブジェクトを記憶・管理するシステムに関する。特に、本発明は、プログラムの実行に応じて順次生成させるオブジェクトを記憶・管理するシステムに関する。
近年、Java(登録商標)言語などの、オブジェクト指向プログラム言語が広く用いられている。そのような言語で記述されたプログラムは、オブジェクトを単位として演算処理および入出力処理を行う。即ち、プログラムの実行システムは、プログラムの実行に応じ、そのプログラムの指令に従って各種のオブジェクトを動的に生成する。生成されたオブジェクトは、メモリ内のヒープと呼ばれる領域に記憶される。
オブジェクトを効率的に記憶・管理するためには、オブジェクトの遊休および重複をなるべく少なくすることが好ましい。オブジェクトの遊休とは、オブジェクトの全部または一部が既に使用されなくなったことをいう。オブジェクトの重複とは、他のオブジェクトと少なくとも一部が同一であることをいう。オブジェクトの遊休は、例えばガーベジ・コレクション(以下GCと呼ぶ)などのメモリ管理技術を応用することで解消されることが知られている。
オブジェクトの重複は、例えば、重複する複数のオブジェクトに対する参照を、それらのうちの1つのオブジェクトに対する参照に統合することで、解消されると考えられる。そのオブジェクトが、内容が変更されないことが保証された不変オブジェクトである場合には、オブジェクトの重複解消は特に有効である。即ち、プログラムは、その後の実行において、参照の統合されたそのオブジェクトを、あたかも統合前の複数のオブジェクトのそれぞれであるかのように使用し続けることができる。
ガーベジ・コレクションに関する技術は特許文献1を、オブジェクト指向プログラムを実行する装置における文字列データの管理については特許文献2を参照されたい。
特開2001−184219号公報 特開2003−256209号公報
オブジェクトの重複を解消するためには、新たにオブジェクトを生成する場合に、例えば以下の処理を行うとよい。実行システムは、(1)その新たなオブジェクトと内容が同一の他のオブジェクトをヒープから検索し、(2)検索された場合には、その新たなオブジェクトに対する参照に代えて、検索されたそのオブジェクトに対する参照を生成する。これにより、新たなオブジェクトは生成される必要が無く、あるいは、仮に生成されたとしてもそれに対する参照が無いのでその記憶領域はその後に解放される。
しかしながら、上記(1)の検索処理は、既に生成されたオブジェクトの数に応じた時間を要する。この処理は、ハッシュテーブルなどのデータ構造を用いて効率化されることも可能だが、それでもある程度の時間を要する。さらには、オブジェクトによっては生成されてから短期間で使用されなくなる場合がある。そのようなオブジェクトについては、重複解消のために費やす時間に比べて、重複解消により得られる記憶領域の効率化の効果が小さい。即ち、そのようなオブジェクトについては、重複解消のための検索に時間を費やすよりも、使用されなくなった後にGCによって回収された方が、効率がよい。
そこで本発明は、上記の課題を解決することのできるシステム、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
上記課題を解決するために、本発明の一側面においては、プログラムの実行により生成されるオブジェクトを管理するシステムであって、生成されてから予め定められた基準期間が経過したオブジェクトである旧オブジェクト、および、生成されてから基準期間が経過していないオブジェクトである新オブジェクトを区別可能に記憶している記憶装置と、プログラムの実行に応じて新たにオブジェクトを生成した場合に、生成した当該オブジェクトを新オブジェクトとして記憶装置に格納する生成部と、記憶装置に記憶されている新オブジェクトの中から、生成されてから基準期間が経過した新オブジェクトを選択する選択部と、選択した当該新オブジェクトと内容が等しい旧オブジェクトを記憶装置から検索する検索部と、選択した当該新オブジェクトと内容が等しい旧オブジェクトが検索されなかったことを条件に、選択した当該新オブジェクトを新たな旧オブジェクトとして記憶装置に格納する格納部と、検索部により当該旧オブジェクトが検索されたことを条件に、選択した当該新オブジェクトに対する参照を、検索された当該旧オブジェクトに対する参照に統合する、統合部とを備えるシステムを提供する。また、当該システムとしてコンピュータを機能させるプログラム、および、当該システムによりオブジェクトを管理する方法を提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、本実施形態に係るコンピュータ10の全体構成を示す。コンピュータ10は、ハードウェアの主要な構成要素として、演算装置の一例であるCPU1000、および、記憶装置の一例であるRAM1020を備える。そして、RAM1020は、プログラムを記憶するためのコード領域30と、プログラムの実行により生成されるヒープ領域20とを有する。CPU1000は、プログラムをコード領域30から読み出して実行する。
例えば、CPU1000は、システム・プログラムをコード領域30から読み出して実行することで、実行システム40として機能する。このシステム・プログラムは、オペレーティング・システムおよびデバイスドライバなどのプログラムのみならず、Java仮想機械およびそのクラス・ライブラリなどの、ミドルウェアを含む。
実行システム40は、ユーザ・プログラム50をコード領域30から読み出す。このユーザ・プログラム50は、例えばJavaなどのオブジェクト指向言語により記述されている。そして、実行システム40は、ユーザ・プログラム50を実行する。その実行中に、実行システム40は、ユーザ・プログラム50内に記述された指令、例えばオブジェクトを新たに生成する指令に応じて、ヒープ領域20に記憶領域を確保する。ユーザ・プログラム50がオブジェクト指向言語で記述されている場合において、この指令は例えばクラス・ライブラリに対するメソッド呼び出しである。
そして、実行システム40は、確保した記憶領域にデータを格納する。また、実行システム40は、ユーザ・プログラム50内に記述された他の指令に応じて、ヒープ領域20からデータを読み出す。読み出されたデータは、例えば、メソッド呼び出しに対する戻り値としてユーザ・プログラム50に返される。これに加えて、実行システム40は、ユーザ・プログラム50内の指令に従ってヒープ領域20に記憶されたオブジェクトを変更してもよい。
ここで、実行システム40がユーザ・プログラム50内の指令に単に従ってオブジェクトを生成すると、同じ内容のオブジェクトが重複してヒープ領域20に格納され、ヒープ領域20の必要容量が大きくなってしまう場合がある。特に、オブジェクトが、一旦生成された後にはユーザ・プログラム50内の指令によっては変更されることのない不変オブジェクトの場合、同じ内容の複数のオブジェクトをヒープ領域20内に別々に記憶するのは非効率的である。
これに対し、本実施形態に係る実行システム40は、ヒープ領域20内に重複して記憶されているオブジェクトを検出して統合する処理を、適度な頻度で行う。これにより、記憶容量の節約と処理速度の向上をバランスさせて、全体としてユーザ・プログラム50を効率的に実行できる。以下、具体的に説明する。
図2は、本実施形態に係るヒープ領域20に記憶されるオブジェクトの一例を示す。ヒープ領域20は、オブジェクトの具体例として文字列オブジェクトを記憶している。この文字列オブジェクトは、一旦生成されるとユーザ・プログラム50によってはその内容が変更されないことが保証されている。この保証は、例えば、そのオブジェクトがユーザ・プログラム50において定義される型(type)およびプログラム言語の仕様に基づく。
一例として、Java(登録商標)言語において、String型のオブジェクトは、一旦生成されるとユーザ・プログラム50によってはその内容が変更されないことが保証されている。これに代えて、本実施形態に係るオブジェクトは、文字列以外の他の種類の不変オブジェクトであってよい。例えば、Java言語におけるBigDecimal(ビッグ・デシマル)オブジェクトのような、高精度の演算実現のため実数の各桁の数値を要素とする配列変数型のオブジェクトであってよい。
具体的には、いま、図2に示すように、このオブジェクトは、ヘッダ部22およびボディ部25を有する。ヘッダ部22は、他のオブジェクトから直接参照される。
ここでいう参照とは、例えば、他のオブジェクトが当該オブジェクトへのポインタを有することをいう。ポインタは、一例として、メモリ上の当該オブジェクトが記憶されている領域の先頭アドレスである。即ち、図2の例では、ヘッダ部22の先頭アドレスが、他のオブジェクトの何れかのフィールドに格納されている。
ヘッダ部22は、オブジェクトの操作を効率化するための各種のデータフィールドを有する。例えば、ヘッダ部22は、バリュー(value)フィールド、オフセット(offset)フィールド、および、カウント(count)フィールドを有する。バリューフィールドは、ボディ部25に対する参照を記憶する。
ここでいう参照も上記の例と同様である。即ち、バリューフィールドは、例えば、ボディ部25の先頭アドレスを記憶する。オフセットフィールドは、ボディ部25のうち有効な文字列が記憶されている領域の、ボディ部25の先頭からのオフセット値を記憶する。いま、オフセット値は4である。従って、ボディ部25のうち先頭の4文字を除外した5文字目からが有効な文字列である。
カウントフィールドは、ボディ部25のうち有効な文字列の文字数を示す。いま、カウントフィールドの値は6である。従って、ボディ部25のうち先頭の4文字目から6文字が有効な文字列である。
ヒープ領域20は、このように、文字列オブジェクトをその実体のみならずオフセット値などに対応付けて記憶している。これにより、例えばオフセット値またはカウント値を変更することで、文字列の一部削除または分割などをした新たな文字列オブジェクトを迅速に生成することができる。
図3は、本実施形態に係る実行システム40およびヒープ領域20の構成の具体例を示す。実行システム40は、ユーザ・プログラム50をCPU1000により適切に実行させる機能の他、ユーザ・プログラム50の実行に応じて生成されるオブジェクトを適切に記憶・管理するための機能を有する。具体的には、この機能は、文字列クラス・ライブラリ400と、システムクラス・ライブラリ500と、制御プログラム群600等により実現される。
文字列クラス・ライブラリ400は、文字列オブジェクトの生成、文字列オブジェクトの更新、および、文字列オブジェクトの参照などの、各種の処理を実現する。具体的には、文字列クラス・ライブラリ400は、文字列クラスを定義する。文字列クラスにはフィールドおよびメソッドが定義される。文字列クラス・ライブラリ400がこれらのメソッドの呼び出しを受けると、文字列クラス・ライブラリ400を実行するCPU1000は、ヒープ領域20中の文字列オブジェクトにアクセスする。
システムクラス・ライブラリ500は、例えばガーベジ・コレクションなどの、明示的にユーザ・プログラム50に含まれている指令によらなくても実行される各種の処理を実現する。システムクラス・ライブラリ500を実行するCPU1000は、ガーベジ・コレクションとして、既に他のオブジェクトから参照されなくなったオブジェクトの記憶領域を解放してよい。
また、ヒープ領域20は、オブジェクトを効率的に記憶・管理するために、複数の記憶領域を有する。具体的には、ヒープ領域20は、新世代領域300と、旧世代領域310と、制御用領域320とを有する。新世代領域300および旧世代領域310は、いわゆる世代別ガーベジ・コレクションにより使用される領域である。新世代領域300は、生成されてから予め定められた基準期間が経過していない新オブジェクトを記憶するための領域である。
一方、旧世代領域310は、生成されてから上記基準期間が経過した旧オブジェクトを記憶するための領域である。新世代領域300は、第1領域305および第2領域307を有してよい。システムクラス・ライブラリ500により実現されるガーベジ・コレクタは、第1領域305および第2領域307を交互に使用することで、いわゆるコピーGCを行う。その概略を以下に示す。
一例として、実行システム40は、まず、第1領域305を、オブジェクトを記憶するための領域として設定している。即ち、文字列クラス・ライブラリ400を実行するCPU1000は、新たなオブジェクトを生成する指令に応じて、新たなオブジェクトを第1領域305内に格納する。そして、ガーベジ・コレクタは、予め定められた条件が成立した場合に、例えば予め定められたインターバル・タイムが経過した場合に、ユーザ・プログラム50の動作を一旦中止させた上で、第1領域305内のオブジェクトのうち他のオブジェクトから参照されているオブジェクトを第2領域307にコピーする。
そして、ガーベジ・コレクタは、第1領域305内のオブジェクトに対する参照を、第2領域307内のオブジェクトに対する参照に変更する。そして、実行システム40は、第2領域307を、オブジェクトを記憶するための領域に新たに設定する。そして、実行システム40は、ユーザ・プログラム50の動作を再開させる。これにより、ユーザ・プログラム50は何の処理も行われなかったように正常動作を続けることができる。
この結果、第1領域305のうち既に使用されなくなったオブジェクトは、第2領域307には格納されない。また、第1領域305のうち使用中のオブジェクトは、いわゆるコンパクション処理により、第2領域307の中の連続領域に配置される。この結果、その後の処理において第2領域307を有効かつ効率的に利用できる。
ガーベジ・コレクタは、上記コピーGCよりも低い頻度で、旧世代領域310内のオブジェクトについてガーベジ・コレクションを行う。例えば、ガーベジ・コレクタは、旧世代領域310内のオブジェクトについては、コピーGCとは異なる方式、例えば、マーク・アンド・スイープ方式により、既に参照されなくなったオブジェクトを検出してもよい。
なお、新世代領域に十分長期間存在したオブジェクトはコピー時に旧世代領域に移動される。これを殿堂入りと呼ぶ。
以上のGCによる処理機能に加えて、制御プログラム群600が、文字列オブジェクトを整理する処理を実現する。制御プログラム群600は、例えばガーベジ・コレクタの動作に同期してこの処理を行ってもよい。制御プログラム群600を実行するCPU1000は、例えば内容が等しい複数のオブジェクトをヒープ領域20内で統合してもよい。内容の等しいオブジェクトを検索し易くするために、制御用領域320は、ハッシュテーブル325を記憶・管理してもよい。
図4は、本実施形態に係る実行システム40の構成のうち文字列クラス・ライブラリ400に関する機能の構成を示す。CPU1000は、文字列クラス・ライブラリ400を読み込んで実行することで、生成部410と、参照部430として機能する。生成部410は、ユーザ・プログラム50の実行に応じて新たにオブジェクトを生成した場合に、生成した当該オブジェクトを、生成されてから基準期間が経過していないオブジェクトである新オブジェクトとしてヒープ領域20内に格納する。その具体例を図4の第1領域305Aおよび第1領域305Bに示す。
第1領域305Aは、生成部410によりオブジェクトが生成される前の第1領域305を示す。あるオブジェクト28が、ある文字列オブジェクトのヘッダ部22−1と、他の文字列オブジェクトのヘッダ部22−2を参照している。また、ヘッダ部22−1は、ボディ部25−1を参照しており、ヘッダ部22−2は、ボディ部25−2を参照している。
第1領域305Bは、生成部410によりオブジェクトが生成された後の第1領域305を示す。生成部410は、あらたに他の文字列オブジェクトを生成して第1領域305内に格納する。この文字列オブジェクトは、ヘッダ部22−3およびボディ部25−3を有する。オブジェクト28は、このヘッダ部22−3を新たに参照する。
参照部430は、ユーザ・プログラム50内の指令に応じて文字列オブジェクトの内容を参照する。例えば、参照部430は、図2において説明した上記オフセット値などに基づいて、ボディ部25−1に記憶された文字列データから有効部分を読み出してもよい。
なお、本実施形態において、ある第1オブジェクトが他の第2オブジェクトを参照している、とは、当該技術分野ではよくあることだが、当該第1オブジェクトの何れかのデータフィールドが、当該第2オブジェクトへのポインタ(例えばメモリ中のアドレス)を含むことをいう。以降の説明においても、説明の簡潔化のためこのような表現を使用する。
図5は、本実施形態に係る実行システム40の構成のうちシステムクラス・ライブラリ500に関する機能の構成を示す。CPU1000は、システムクラス・ライブラリ500を読み込んで実行することで、ガーベジ・コレクタ部510として機能する。ガーベジ・コレクタ部510は、本発明に係る世代別ガーベジ・コレクタ部の一例である。具体的には、ガーベジ・コレクタ部510は、他の何れのオブジェクトからも参照されていないオブジェクトを検出したことを条件に当該オブジェクトの記憶領域を解放する処理を、新世代領域300および旧世代領域310のそれぞれについて別々に行う。
詳細には、まず、ガーベジ・コレクタ部510は、この処理を、旧世代領域310と比較して新世代領域300に対しより高い頻度で行う。そして、新世代領域300に対するこの処理の毎に、ガーベジ・コレクタ部510は、新世代領域300において予め定められた条件を満たすオブジェクトがあるかどうかを判断する。例えば、ガーベジ・コレクタ部510は、新世代領域300に記憶されてから、上記処理が予め定められた基準回数行われても、新世代領域300に記憶され続けているオブジェクトを、当該条件を満たすオブジェクトと判断する。
このようなオブジェクトは、長期間に渡り参照され続けており、その後も長期間参照され続けることが予想される。このため、ガーベジ・コレクタ部510は、このオブジェクトを、新世代領域300から旧世代領域310に移動させる。この移動の処理のことを殿堂入りという。移動されたオブジェクトに対しては、そのオブジェクトは旧世代領域310に記憶されているので、その後低頻度でガーベジ・コレクションが行われる。
具体例として、第1領域305Cに、新世代領域300に対するガーベジ・コレクションが処理される前の第1領域305を示す。これは、図4において説明した第1領域305Bと同様である。また、旧世代領域310Cに、新世代領域300に対するガーベジ・コレクションが処理される前の旧世代領域310を示す。
旧世代領域310Cは、文字列オブジェクトでないオブジェクト26およびオブジェクト27を記憶している。また、旧世代領域310Cは、2つの文字列オブジェクトを記憶している。ある文字列オブジェクトは、ヘッダ部22−4およびボディ部25−4を含む。他の文字列オブジェクトはヘッダ部22−5およびボディ部25−5を含む。オブジェクト26はオブジェクト27およびヘッダ部22−4を参照している。オブジェクト27は、ヘッダ部22−5を参照している。ヘッダ部22−4はボディ部25−4を参照している。ヘッダ部22−5はボディ部25−5を参照している。
第2領域307Dに、新世代領域300に対するガーベジ・コレクションが処理された後の第2領域307を示す。旧世代領域310Dに、新世代領域300に対するガーベジ・コレクションが処理された後の旧世代領域310を示す。ヘッダ部22−3およびボディ部25−3は、例えば図4の生成部410により生成されたばかりなので、新世代領域300中に留まっている。また、オブジェクト28も新世代領域300中に留まっている。
一方で、ヘッダ部22−1、ボディ部25−1、ヘッダ部22−2およびボディ部25−2は、予め定められた条件を満たすので、殿堂入りにより旧世代領域310Dに移動されている。また、ガーベジ・コレクタ部510は、オブジェクト28から第1領域305C中のヘッダ部22−1およびヘッダ部22−2に対する参照を、オブジェクト28から旧世代領域310D中のヘッダ部22−1およびヘッダ部22−2に対する参照に変更する。
以上により、ヘッダ部22−1、ボディ部25−1、ヘッダ部22−2およびボディ部25−2を、その後の新世代領域300に対するガーベジ・コレクションの対象から除外できる。この結果、新世代領域300の記憶容量を新たなオブジェクトのために空けることができると共に、その後の新世代領域300に対するガーベジ・コレクションを効率化できる。
しかしながら、図5の旧世代領域310Dとして示したように、ボディ部25−1およびボディ部25−4が、共に同一の文字列「aaa」を含んでいる。このように、ガーベジ・コレクションによっては、使用されなくなったオブジェクトを除外することはできるが、重複を解消することはできない。これに対し、本実施形態に係るガーベジ・コレクタ部510は、以下に示すように制御プログラム群600と協調動作することで、そのような重複を適切に解消することができる。
図6は、本実施形態に係る実行システム40の構成のうち制御プログラム群600に関する機能の構成を示す。CPU1000は、制御プログラム群600を読み込んで実行することで、選択部610と、検索部620と、格納部630と、統合部640として機能する。選択部610は、ヒープ領域20に記憶されている新オブジェクトの中から、生成されてから基準期間が経過した新オブジェクトを選択する。
具体的には、選択部610は、ある新オブジェクトが、ガーベジ・コレクタ部510によって新世代領域300から旧世代領域310に殿堂入りすると判断されたことを条件に、当該新オブジェクトが生成されてから基準期間が経過したと判断してよい。この殿堂入りは、上記のように、予め定められた条件が満たされたことに応じて行われる。
具体例として、第1領域305Cに、新世代領域300に対するガーベジ・コレクションが処理される前の第1領域305を示す。これは、図5において説明した第1領域305Cと略同一である。第2領域307Eに、新世代領域300に対するガーベジ・コレクションが処理された後の第2領域307を示す。
ヘッダ部22−3およびボディ部25−3は、例えば図4の生成部410により生成されたばかりなので、新世代領域300中に留まっている。一方で、ヘッダ部22−1、ボディ部25−1、ヘッダ部22−2およびボディ部25−2は、予め定められた条件を満たすので、殿堂入りすると判断される。
このように殿堂入りするとして選択部610により選択された新オブジェクトについて、検索部620は、当該新オブジェクトと内容が等しい旧オブジェクトをヒープ領域20の旧世代領域310から検索する。この検索の処理には、制御用領域320に記憶されたハッシュテーブル325が利用される。
具体例として、旧世代領域310Cに、新世代領域300に対するガーベジ・コレクションが処理される前の旧世代領域310を示す。これは、図5において説明した旧世代領域310Cと略同一である。また、制御用領域320Cに、新世代領域300に対するガーベジ・コレクションが処理される前の制御用領域320を示す。
制御用領域320Cは、所望の旧オブジェクトを旧世代領域310Cから検索し易くするためにハッシュテーブル325を記憶している。このハッシュテーブル325は、旧世代領域310Cに記憶されているそれぞれの旧オブジェクトに対する参照を、当該旧オブジェクトの内容に基づき算出されるハッシュ値に対応付けている。
オブジェクトが文字列オブジェクトの場合、当該ハッシュ値は、例えば、文字列オブジェクトが示す各文字の文字コードに対し、予め定められた演算を行うことで算出される数値である。例えば、文字列「aaa」に対し数値22、および、文字列「bbb」に対し数値60などのように、オブジェクトの内容に基づきハッシュ値は一意に定まる。
これを利用した検索部620の処理は以下の通りである。まず、検索部620は、選択部610により選択された新オブジェクトの内容に基づきハッシュ値を算出する。検索部620は、このハッシュ値を、次の利用の利便のため、ヘッダ部22中の所定のフィールドに格納してもよい。これに代えて、ハッシュ値はオブジェクトの生成時または更新時に既に算出されてヘッダ部22中に格納されていてもよい。この場合、検索部620は、単にそのハッシュ値をヘッダ部22から読み出す。
次に、検索部620は、当該ハッシュ値に対応する参照をハッシュテーブル325から読み出す。これにより、当該新オブジェクトと内容が等しい旧オブジェクトが検索される。読み出した参照は統合部640に通知される。また、ハッシュ値がハッシュテーブル325に格納されていないことは、そのような旧オブジェクトが旧世代領域310から検索されないことを示す。この場合には、検索部620は、ハッシュ値がハッシュテーブル325に格納されていないことを、格納部630に通知する。
具体例として、第1領域305Cおよび第2領域307Eを対比して理解されるように、選択部610により選択された新オブジェクトは2つであり、その一方は文字列「aaa」を示し、他方は文字列「bbb」を示す。従って、検索部620は、まず、それらの新オブジェクトのそれぞれについて、その内容に基づきハッシュ値を算出する。
一例として、検索部620は、ボディ部25−1に記憶された文字列「aaa」に基づきハッシュ値22を算出し、ボディ部25−2に記憶された文字列「bbb」に基づきハッシュ値60を算出する。そして、検索部620は、ハッシュ値22に対応する参照をハッシュテーブル325から読み出す。その結果、ヘッダ部22−4に対する参照が読み出される。読み出された参照は統合部640に対し通知される。
一方、検索部620は、ハッシュ値60に対応する参照をハッシュテーブル325から読み出す。しかし、このハッシュ値はハッシュテーブル325に登録されていない。従って、検索部620は、当該新オブジェクトと内容が等しい他の旧オブジェクトは検索できなかった旨、格納部630に通知する。
なお、互いに異なる文字列について同一のハッシュ値が算出される場合もある。この場合には、ハッシュテーブル325は、同じハッシュ値を有する複数のオブジェクトのそれぞれに対する参照をリスト形式のデータで表し、そのリスト形式のデータをそのハッシュ値に対応付けて記憶している。
その場合には、検索部620は、まず、選択部610により選択された新オブジェクトの内容に基づくハッシュ値に対応する、そのリスト形式のデータをハッシュテーブル325から読み出す。そして、検索部620は、そのリスト形式のデータを先頭から走査して、複数の参照を次々に読み出す。
そして、検索部620は、参照を読み出す毎に、その参照先のヘッダ部22およびボディ部25に基づき旧オブジェクトの内容を特定する。それが選択部610により選択された新オブジェクトの内容と一致すれば、検索部620は、旧オブジェクトを検索できたと判断する。一方、何れの参照の参照先についても、選択部610により選択された新オブジェクトの内容と一致しなければ、検索部620は、旧オブジェクトを検索できなかったと判断する。
但し、図6を含め本実施形態においては、説明の簡潔化のため、上記のように同じハッシュ値を有する複数のオブジェクトは旧世代領域310内に無いものとして、説明をすすめる。
次に、格納部630について説明する。格納部630は、選択部610により選択された新オブジェクトと内容が等しい旧オブジェクトが検索されなかったことを条件に、選択された当該新オブジェクトを新たな旧オブジェクトとしてヒープ領域20に格納する。
具体的には、第1領域305C内の文字列「bbb」を示す新オブジェクトと、内容が同一の旧オブジェクトは、旧世代領域310Cに格納されていない。従って、格納部630は、当該新オブジェクトに含まれるヘッダ部22−2およびボディ部25−2を読み出したうえで、これらを、新たな旧オブジェクトのヘッダ部およびボディ部として旧世代領域310に格納する。その結果、旧世代領域310Eには、ヘッダ部22−2およびボディ部25−2が記憶される。
この格納の処理に応じ、格納部630は、当該旧オブジェクトの内容に基づきハッシュ値を算出し、当該ハッシュ値を当該旧オブジェクトに対する参照に対応付けてハッシュテーブル325に追加する。例えば格納部630は、ボディ部25−2に記憶された文字列「bbb」に基づきハッシュ値60を算出し、そのハッシュ値をヘッダ部22−2に対する参照に対応付けてハッシュテーブル325に追加する。これにより、その後の処理において新オブジェクトと旧オブジェクトとを容易に区別することができると共に、所望の旧オブジェクトを検索し易くすることができる。
また、この格納の処理に応じ、格納部630は、当該新オブジェクトに対する参照を、あらたな当該旧オブジェクトに対する参照に変更してもよい。例えば、第1領域305Cに示すように、ヘッダ部22−2は、オブジェクト28から参照されている。従って、格納部630は、このオブジェクト28からヘッダ部22―2に対する参照を、第2領域307Eに移動されたオブジェクト28から新たに旧世代領域310Eに格納したヘッダ部22−2に対する参照に変更する。これにより、ユーザ・プログラム50のその後の実行において各オブジェクトは正しく参照されることができる。
なお、この参照の変更は必ずしも行わなくてよい。例えば、新オブジェクトを新たに旧オブジェクトとして格納する場合において、オブジェクトを記憶するアドレスを変更しなくとも、オブジェクトを例えばハッシュテーブル325に単に登録すればよい他の形態において、当該新オブジェクトと当該旧オブジェクトの記憶されるアドレスは等しい。従って、格納部630は、他のオブジェクトからの参照を変更しなくても、プログラムを正しく継続動作させることができる。
さらに、格納部630は、新たな当該旧オブジェクトが将来参照されなくなって、その記憶域がガーベジ・コレクタ部510により解放される場合には、当該旧オブジェクトへの参照をハッシュテーブル325から削除する。
次に、統合部640について説明する。統合部640は、検索部620により旧オブジェクトが検索されたことを条件に、選択部610により選択された新オブジェクトに対する全ての参照を、検索された当該旧オブジェクトに対する参照に統合する。具体的には以下の通りである。
第1領域305Cと旧世代領域310Cを対比して理解されるように、ボディ部25−1に記憶された文字列「aaa」と等しい内容の旧オブジェクトが旧世代領域310Cに記憶されている。この旧オブジェクトは、検索部620によりハッシュテーブル325を利用して検索される。この結果、ヘッダ部22−4に対する参照が統合部640に対し出力される。
従って、統合部640は、ヘッダ部22−1に対するオブジェクト28からの参照を、検索されたこのヘッダ部22−4に対するオブジェクト28からの参照に変更する。具体的には、統合部640は、オブジェクト28内におけるヘッダ部22−1の先頭アドレスを、ヘッダ部22−4の先頭アドレスと同じになるように変更してよい。
この例においてヘッダ部22−1に対する参照は1つだけだが、この参照が複数の場合には統合部640は全ての参照を同様にヘッダ部22−4に対する参照に変更する。以上の処理により、文字列「aaa」を内容とする2つのオブジェクトは1つに統合されると共に、オブジェクト26およびオブジェクト28はその統合されたオブジェクトを正しく参照し続けることができる。
ヘッダ部22−1に対する参照がヘッダ部22−4に対する参照に変更された結果、ヘッダ部22−1は何れのオブジェクトからも参照されなくなる。したがって、ガーベジ・コレクタ部510は、ガーベジ・コレクションを継続することで、ヘッダ部22−1およびボディ部25−1の記憶領域を解放する。このため、統合部640は、この記憶領域を解放するための明示的な処理を行わなくてもよい。
以上、図6に示した例によれば、文字列の重複を排除することで、ヒープ領域20の占有量を低減してユーザ・プログラム50の実行を効率化できる。例えば、図5および図6を対比すると、文字列「aaa」を内容とするオブジェクトの重複が解消されて、その結果旧世代領域310Dよりも旧世代領域310Eの空き容量が増加している。
図7は、本実施形態に係る実行システム40によりオブジェクトが操作される処理の流れを示す。生成部410は、ユーザ・プログラム50によりオブジェクト生成のためのメソッドが呼び出されたことに応じて(S700:YES)、オブジェクトを生成して新オブジェクトとして新世代領域300に格納する(S710)。このメソッドは、一例として、オブジェクト指向プログラム言語におけるコンストラクタ・メソッドである。
なお、処理の対象が不変オブジェクトではない場合には、実行システム40は、オブジェクトを変更する処理を行ってもよい。例えば、実行システム40は、ユーザ・プログラム50によりオブジェクト変更のためのメソッドが呼び出されたことに応じて(S720:YES)、新世代領域300または旧世代領域310に記憶されたオブジェクトを変更する(S730)。このメソッドは、具体的には、オブジェクトの結合・分割などのメソッドである。
また、参照部430は、150によりオブジェクト参照のためのメソッドが呼び出されたことに応じて(S740:YES)、新世代領域300または旧世代領域310に記憶されたオブジェクトを読み出して、例えば他のオブジェクト内にその内容を格納し、または、画面に表示等する(S750)。何れの場合も、生成部410および参照部430は、処理の結果を戻り値として出力してよい(S760)。
図8は、本実施形態に係る実行システム40によりオブジェクトが統合される処理の流れを示す。実行システム40は、以下の処理を、例えばガーベジ・コレクタ部510による新世代領域300に対するガーベジ・コレクションのタイミングで行う。まず、ガーベジ・コレクタ部510は、新世代領域300内の各新オブジェクトが、殿堂入りのための予め定められた条件を満たすか判定する(S800)。
次に、選択部610は、殿堂入りのための当該条件を満たす新オブジェクトがあったかどうかを判断する(S810)。そのような新オブジェクトが無ければ(S810:NO)、選択部610は、図8の処理を終了する。一方、そのような新オブジェクトがある場合に(S810:YES)、選択部610は、その新オブジェクトが不変オブジェクトかどうかを判断する(S820)。
その新オブジェクトが不変オブジェクトの場合に(S820:YES)、選択部610は、その新オブジェクトを、重複を解消する候補のオブジェクトとして選択する(S830)。次に、検索部620は、選択したその新オブジェクトと内容が等しい旧オブジェクトをRAM1020から検索する(S840)。
ここで、内容が等しいとは、オブジェクトのデータ構造の一致を必ずしも意味しない。例えば、図2に例示した文字列オブジェクトのように、ボディ部25の中の有効部分をヘッダ部22により特定する場合においては、その有効部分が等しければ、その他の部分が異なっていても、内容が等しいものとみなす。
新オブジェクトと内容が等しい旧オブジェクトが検索されたことを条件に(S850:YES)、統合部640は、選択部610により選択されたその新オブジェクトに対する参照を、検索部620により検索されたその旧オブジェクトに対する参照に統合する(S860)。一方、新オブジェクトと内容が等しい旧オブジェクトが検索されなかったことを条件に(S850:NO)、格納部630は、選択部610により選択されたその新オブジェクトを、新たな旧オブジェクトとしてRAM1020に格納する。
新オブジェクトと新たな旧オブジェクトとで格納されるアドレスが異なる場合には、統合部640は、選択部610により選択されたその新オブジェクトに対する参照を、当該旧オブジェクトに対する参照に変更する(S880)。これにより、その新オブジェクトを参照していたオブジェクトを利用した処理を、その後も適切に継続させることができる。
図9は、本実施形態に係る実行システム40を実現するプログラムコードの一例を示す。(a)に、比較のため、ガーベジ・コレクタを実現するプログラムコードの断片を示す。このプログラムコードは、文字列オブジェクトの重複を解消する機能は有しない。一方、(b)に、ガーベジ・コレクションに同期して文字列オブジェクトの重複を解消する機能を実現するプログラムコードの断片を示す。
何れのプログラム断片も、あるオブジェクトを殿堂入りさせると判断した場合に、そのオブジェクトを新世代領域から旧世代領域にコピーする関数(CopyToTenuredSpace)を示す。(a)の1行目に示すように、まず、殿堂入りするオブジェクトのポインタが引数として関数に与えられる。
そして、2行目に示すように、そのオブジェクトのデータサイズが変数sizeに代入される。そして、3行目に示すように、そのデータサイズの記憶領域が旧世代領域(ここではTenuredSpace)に確保される。その記憶領域へのポインタは変数newobjに代入される。
そして、4行目に示すように、殿堂入りさせようとするオブジェクトが、新たに旧世代領域に確保された記憶領域にコピーされる。これに応じ、5行目に示すように、殿堂入りさせようとするオブジェクトに対する参照が、新たに旧世代領域に確保されたその記憶領域に対する参照に変更される。
本実施形態に係る重複文字列の解消の機能は、(a)に示す関数に、ほんの僅かな変更を加えることで実現される。具体的には、(a)と比較して(b)には3−5行目および9行目が追加されている。なお、厳密には、(a)の3行目と(b)の7行目は異なるが、これは、char型のデータへのポインタを示す変数newobjが定義される位置が異なるためで、実質的な処理内容は同じである。
2行目は、char型のデータへのポインタを示す変数newobjを定義する。3行目は、殿堂入りさせようとするオブジェクトのクラスが不変文字列クラス(例えばJava言語におけるStringClass)であるかどうかを判断するコードを示す。これは、上記の選択部610の一部機能に相当する。
4行目のコードは、検索部620および格納部630の機能に相当する。即ち、4行目のコードは、殿堂入りさせようとするオブジェクトと内容の等しい旧オブジェクトを、ハッシュテーブル325を利用して旧世代領域310から検索する処理、検索されたならばその旧オブジェクトへのポインタを変数newobjに代入する処理、および、検索されなかったならば、殿堂入りさせようとするそのオブジェクトを旧世代領域にコピー(殿堂入り)し、コピーしたオブジェクトを新たにハッシュテーブル325に登録する処理、を示す。
ここで用いられる「intern」というメソッドは、予め準備された、文字列をハッシュテーブルから検索して、検索されなければ新たに登録するという処理を実現するためのメソッドである。このメソッドをこのタイミングで呼び出すことで、文字列重複の解消というある程度の時間を要する処理を、適度なタイミングで行わせることができる。このメソッドは、Java言語の内部処理で用いるために予め準備されたものであってよいし、このような処理を行うために独自に開発されたものであってもよい。
5−9行目のコードは、上記(a)の2−4行目と同様である。即ち、不変文字列以外のオブジェクトについては、通常の殿堂入りに対応した処理が行われる。
以上、図9に関連して説明したように、本実施形態の諸機能は、例えば、既存のガーベジ・コレクションに対する僅かな改変で実現することができる。このため、プログラム開発や保守の手間は極めて小さく、更には、同様のガーベジ・コレクタを有する実行システムに広く適用することができる。
以上、図1から図9において説明したように、本実施形態によれば、ガーベジ・コレクタと同期した適度な頻度で、これまである程度の期間参照され続けており今後も参照され続けることが見込まれるオブジェクトについてのみ、重複を排除する処理を行う。これにより、記憶領域の節約および処理オーバヘッドの低減をバランスして、全体としてユーザ・プログラムを効率的に実行することができる。
続いて、文字列の重複を解消する他の例を、図10において変形例として説明する。本例においては、オブジェクトのボディ部25のみを統合し、ヘッダ部22は統合しない。これにより、ヒープ領域20の占有容量をある程度節約できると共に、別々のオブジェクトは別々のヘッダ部22を有することがユーザ・プログラム50の言語使用上厳格に要求される場合であっても、ユーザ・プログラム50を正常動作させることができる。
図10は、本実施形態の変形例に係る実行システム40について、制御プログラム群600に関する機能の構成を示す。本変形例においても、CPU1000は、制御プログラム群600を読み込んで実行することで、選択部610と、検索部620と、格納部630と、統合部640として機能する。この変形例は、統合部640により参照が統合される部分の処理が、図6の例とは異なるので、以下、相違点を中心に説明する。
まず、図6の例と同様に、ガーベジ・コレクションの前の第1領域305を第1領域305Cに示す。その中で、文字列「aaa」を内容とするオブジェクト(即ち、ヘッダ部22−1およびボディ部25−1)と、文字列「bbb」を内容とするオブジェクト(即ち、ヘッダ部22−2およびボディ部25−2)とが、殿堂入りされると判断される。選択部610は、これらのオブジェクトを選択する。
次に、検索部620は、選択されたこれらのオブジェクトのそれぞれについて、当該オブジェクトと内容が等しい旧オブジェクトを旧世代領域310から検索する。この検索にはハッシュテーブル325が用いられる。その結果、文字列「aaa」を内容とする旧オブジェクト(即ちヘッダ部22−4およびボディ部25−4)が検索される。一方、文字列「bbb」を内容とする旧オブジェクトは検索されない。
従って、格納部630は、文字列「bbb」を内容とする新オブジェクト(即ちヘッダ部22−2およびボディ部25−2)を、新たな旧オブジェクトとして、旧世代領域310Eに格納する。ここまでの処理は、図6の例と略同一である。一方、統合部640により参照が統合される部分の処理は、図6の例と異なる。
本例において、統合部640は、オブジェクトのヘッダ部を除くボディ部のみを統合する。具体的には、統合部640は、ある新オブジェクトと内容が等しい旧オブジェクトが検索されたことに応じて、当該新オブジェクトのヘッダ部から当該新オブジェクトのボディ部に対する参照を、当該新オブジェクトのヘッダ部から当該旧オブジェクトのボディ部に対する参照に統合する。
図10の例において、文字列「aaa」を内容とする新オブジェクト(ヘッダ部22−1およびボディ部25−1)と内容が等しい旧オブジェクト(ヘッダ部22−4およびボディ部25−4)が検索されている。従って、統合部640は、この新オブジェクトのヘッダ部22−1からボディ部25−1に対する参照を、この新オブジェクトのヘッダ部22−1からこの旧オブジェクトのボディ部25−4に対する参照に統合する。その結果、参照されなくなったボディ部25−1の記憶域は、ガーベジ・コレクタによって解放される。
以上、本変形例によっても、相互に内容が等しいオブジェクトのボディ部を統合することで、オブジェクトを記憶するための必要容量を節約できる。更に、本変形例によれば、別々のオブジェクトは別々のヘッダ部を有することを前提としたプログラムを正しく動作させることができる。
一例として、Java(登録商標)などのプログラム言語では、synchronized method(シンクロナイズド・メソッド)により、様々なオブジェクトを排他資源として設定して、スレッド間の排他処理を実現することができる。例えば複数の不変文字列オブジェクトを独立した排他資源に設定した場合においては、複数のスレッドのそれぞれがこれらのオブジェクトのそれぞれを排他資源として独立して獲得し、動作することもできる。この場合には、これらのスレッド間では排他制御は行われない。
しかしながら、もしこれらのオブジェクトのヘッダ部を本実施形態のように統合したならば、本来別々の排他資源であるべき複数のオブジェクトが同一の排他資源を表すこととなる。従って、この場合にはスレッド間で予期しない排他制御が行われ、デッドロックが生じるおそれがある。これに対し、本変形例によれば、このような予期しない排他制御の発生を防ぎ、ユーザ・プログラムを正しく動作させることができる。
なお、このように不変文字列オブジェクトを排他資源として設定することは、極めて稀であるから、多くの場合には図1から図9に示す実施形態により、ヘッダ部を含めてオブジェクトを統合することが有効である。
図11は、本実施形態に係るコンピュータ10のハードウェア構成の一例を示す。コンピュータ10は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、及びグラフィックコントローラ1075を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ1040は、コンピュータ10が使用するプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からプログラム又はデータを読み取り、RAM1020又はハードディスクドライブ1040に提供する。
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、コンピュータ10の起動時にCPU1000が実行するブートプログラムや、コンピュータ10のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からプログラム又はデータを読み取り、入出力チップ1070を介してRAM1020またはハードディスクドライブ1040に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
コンピュータ10に提供されるプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ1070及び/又は入出力コントローラ1084を介して、記録媒体から読み出されコンピュータ10にインストールされて実行される。プログラムがコンピュータ10等に働きかけて行わせる動作は、図1から図10において説明したコンピュータ10における動作と同一であるから、説明を省略する。
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ10に提供してもよい。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることのできることが当業者にとって明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
図1は、本実施形態に係るコンピュータ10の全体構成を示す。 図2は、本実施形態に係るヒープ領域20に記憶されるオブジェクトの一例を示す。 図3は、本実施形態に係る実行システム40およびヒープ領域20の構成の具体例を示す。 図4は、本実施形態に係る実行システム40の構成のうち文字列クラス・ライブラリ400に関する機能の構成を示す。 図5は、本実施形態に係る実行システム40の構成のうちシステムクラス・ライブラリ500に関する機能の構成を示す。 図6は、本実施形態に係る実行システム40の構成のうち制御プログラム群600に関する機能の構成を示す。 図7は、本実施形態に係る実行システム40によりオブジェクトが操作される処理の流れを示す。 図8は、本実施形態に係る実行システム40によりオブジェクトが統合される処理の流れを示す。 図9は、本実施形態に係る実行システム40を実現するプログラムコードの一例を示す。 図10は、本実施形態の変形例に係る実行システム40について、制御プログラム群600に関する機能の構成を示す。 図11は、本実施形態に係るコンピュータ10のハードウェア構成の一例を示す。
符号の説明
10 コンピュータ
20 ヒープ領域
22 ヘッダ部
25 ボディ部
26 オブジェクト
27 オブジェクト
28 オブジェクト
30 コード領域
40 実行システム
50 ユーザ・プログラム
300 新世代領域
305 第1領域
307 第2領域
310 旧世代領域
320 制御用領域
325 ハッシュテーブル
400 文字列クラス・ライブラリ
410 生成部
430 参照部
500 システムクラス・ライブラリ
510 ガーベジ・コレクタ部
610 選択部
620 検索部
630 格納部
640 統合部
600 制御プログラム群
1000 CPU
1020 RAM

Claims (9)

  1. プログラムの実行により生成されるオブジェクトを管理するシステムであって、
    生成されてから予め定められた基準期間が経過したオブジェクトである旧オブジェクト、および、生成されてから前記基準期間が経過していないオブジェクトである新オブジェクトを区別可能に記憶している記憶装置と、
    プログラムの実行に応じて新たにオブジェクトを生成した場合に、生成した当該オブジェクトを前記新オブジェクトとして前記記憶装置に格納する生成部と、
    前記記憶装置に記憶されている前記新オブジェクトの中から、生成されてから前記基準期間が経過した新オブジェクトを選択する選択部と、
    選択した当該新オブジェクトと内容が等しい前記旧オブジェクトを前記記憶装置から検索する検索部と、
    選択した当該新オブジェクトと内容が等しい前記旧オブジェクトが検索されなかったことを条件に、選択した当該新オブジェクトを新たな前記旧オブジェクトとして前記記憶装置に格納する格納部と、
    前記検索部により当該旧オブジェクトが検索されたことを条件に、選択した当該新オブジェクトに対する参照を、検索された当該旧オブジェクトに対する参照に統合する、統合部と
    を備えるシステム。
  2. 前記記憶装置内のある記憶領域を旧世代領域とし、前記記憶装置内の他の記憶領域を新世代領域とし、他の何れのオブジェクトからも参照されていないオブジェクトを検出したことを条件に、当該オブジェクトの記憶領域を解放する処理を、前記旧世代領域と比較して前記新世代領域に記憶されたオブジェクトについてより高い頻度で行うと共に、予め定められた条件を満たすオブジェクトを前記新世代領域から前記旧世代領域に殿堂入りさせる、世代別ガーベジ・コレクタ部を更に備え、
    前記記憶装置は、前記旧世代領域に前記旧オブジェクトを、前記新世代領域に前記新オブジェクトを記憶し、
    前記生成部は、プログラムの実行に応じて新たにオブジェクトを生成した場合に、生成した当該オブジェクトを前記新世代領域に格納し、
    前記選択部は、ある新オブジェクトが、世代別ガーベジ・コレクタ部によって前記新世代領域から前記旧世代領域に殿堂入りすると判断されたことを条件に、当該新オブジェクトが生成されてから前記基準期間が経過したと判断する、請求項1に記載のシステム。
  3. 前記世代別ガーベジ・コレクタ部は、前記新世代領域に新たに記憶されてから、前記新世代領域についてオブジェクトの記憶領域を解放する処理が、予め定められた基準回数行われても、前記新世代領域に記憶され続けているオブジェクトを、前記予め定められた条件を満たすオブジェクトとして、前記新世代領域から前記旧世代領域に殿堂入りさせる、請求項2に記載のシステム。
  4. 前記格納部は、前記選択部が選択した当該新オブジェクトと内容が等しい前記旧オブジェクトが検索されなかったことを条件に、選択した当該新オブジェクトと内容が同一の新たな前記旧オブジェクトを、前記旧世代領域に生成し、
    前記統合部は、前記選択部が選択した当該新オブジェクトと内容が等しい前記旧オブジェクトが検索されなかったことを条件に、選択した当該新オブジェクトに対する参照を、前記格納部が格納した当該旧オブジェクトに対する参照に変更し、
    前記世代別ガーベジ・コレクタ部は、前記統合部により前記新オブジェクトに対する他のオブジェクトからの参照が、前記旧オブジェクトに対する参照に変更されことを条件に、前記新オブジェクトの記憶領域を解放する、請求項2に記載のシステム。
  5. 前記記憶装置は、前記オブジェクトとして、不変文字列オブジェクトを記憶している、請求項1に記載のシステム。
  6. それぞれの前記オブジェクトは、他のオブジェクトから直接参照されるヘッダ部、および、前記ヘッダ部から参照されるボディ部を有し、
    前記統合部は、ある新オブジェクトと内容が等しい前記旧オブジェクトが検索されたことに応じて、当該新オブジェクトのヘッダ部から当該新オブジェクトのボディ部に対する参照を、当該新オブジェクトのヘッダ部から当該旧オブジェクトのボディ部に対する参照に統合する、請求項1に記載のシステム。
  7. 前記記憶装置は、記憶しているそれぞれの前記旧オブジェクトに対する参照を、当該旧オブジェクトの内容に基づき算出されるハッシュ値に対応付けた、ハッシュテーブルを記憶しており、
    前記検索部は、ある新オブジェクトが生成されてから前記基準期間が経過した場合に、当該新オブジェクトの内容に基づくハッシュ値に対応する参照を前記ハッシュテーブルから読み出すことで、当該新オブジェクトと内容が等しい旧オブジェクトを検索し、
    前記格納部は、新オブジェクトを新たに旧オブジェクトとして格納したことを条件に、更に、当該旧オブジェクトの内容に基づきハッシュ値を算出し、当該ハッシュ値を当該旧オブジェクトに対する参照に対応付けて前記ハッシュテーブルに追加し、当該旧オブジェクトが将来ガーベジ・コレクタにより解放される場合に前記ハッシュテーブルからも削除する、
    請求項1に記載のシステム。
  8. プログラムの実行により生成されるオブジェクトをコンピュータにより管理する方法であって、
    前記コンピュータは、
    生成されてから予め定められた基準期間が経過したオブジェクトである旧オブジェクト、および、生成されてから前記基準期間が経過していないオブジェクトである新オブジェクトを区別可能に記憶している記憶装置を備え、
    前記コンピュータにより、
    プログラムの実行に応じて新たにオブジェクトを生成した場合に、生成した当該オブジェクトを前記新オブジェクトとして前記記憶装置に格納するステップと、
    前記記憶装置に記憶されている前記新オブジェクトの中から、生成されてから前記基準期間が経過した新オブジェクトを選択するステップと、
    選択した当該新オブジェクトと内容が等しい前記旧オブジェクトを前記記憶装置から検索するステップと、
    選択した当該新オブジェクトと内容が等しい前記旧オブジェクトが検索されなかったことを条件に、選択した当該新オブジェクトを新たな前記旧オブジェクトとして前記記憶装置に格納するステップと
    当該検索するステップにおいて当該旧オブジェクトが検索されたことを条件に、選択した当該新オブジェクトに対する参照を、検索された当該旧オブジェクトに対する参照に統合するステップと
    を備える方法。
  9. プログラムの実行により生成されるオブジェクトを管理するシステムとして、コンピュータを機能させるプログラムであって、
    前記コンピュータを、
    生成されてから予め定められた基準期間が経過したオブジェクトである旧オブジェクト、および、生成されてから前記基準期間が経過していないオブジェクトである新オブジェクトを区別可能に記憶している記憶装置と、
    プログラムの実行に応じて新たにオブジェクトを生成した場合に、生成した当該オブジェクトを前記新オブジェクトとして前記記憶装置に格納する生成部と、
    前記記憶装置に記憶されている前記新オブジェクトの中から、生成されてから前記基準期間が経過した新オブジェクトを選択する選択部と、
    選択した当該新オブジェクトと内容が等しい前記旧オブジェクトを前記記憶装置から検索する検索部と、
    選択した当該新オブジェクトと内容が等しい前記旧オブジェクトが検索されなかったことを条件に、選択した当該新オブジェクトを新たな前記旧オブジェクトとして前記記憶装置に格納する格納部と、
    前記検索部により当該旧オブジェクトが検索されたことを条件に、選択した当該新オブジェクトに対する参照を、検索された当該旧オブジェクトに対する参照に統合する、統合部と
    して機能させるプログラム。
JP2007231126A 2007-09-06 2007-09-06 オブジェクトを記憶・管理するシステム Expired - Fee Related JP5044816B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007231126A JP5044816B2 (ja) 2007-09-06 2007-09-06 オブジェクトを記憶・管理するシステム
US12/192,766 US8176100B2 (en) 2007-09-06 2008-08-15 System for storing and managing objects

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007231126A JP5044816B2 (ja) 2007-09-06 2007-09-06 オブジェクトを記憶・管理するシステム

Publications (2)

Publication Number Publication Date
JP2009064217A JP2009064217A (ja) 2009-03-26
JP5044816B2 true JP5044816B2 (ja) 2012-10-10

Family

ID=40433214

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007231126A Expired - Fee Related JP5044816B2 (ja) 2007-09-06 2007-09-06 オブジェクトを記憶・管理するシステム

Country Status (2)

Country Link
US (1) US8176100B2 (ja)
JP (1) JP5044816B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8387003B2 (en) * 2009-10-27 2013-02-26 Oracle America, Inc. Pluperfect hashing
JP4959781B2 (ja) 2009-12-22 2012-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクト生成地点記録方法およびプログラム
US8533671B2 (en) * 2010-06-07 2013-09-10 Microsoft Corporation Assigning type parameters
JP5615220B2 (ja) * 2011-03-30 2014-10-29 三菱電機株式会社 ヒットテスト装置及びヒットテスト方法
JP5525658B2 (ja) * 2011-06-14 2014-06-18 株式会社日立製作所 計算機、リソース使用量計算方法及びリソース使用量計算プログラム
US8468138B1 (en) 2011-12-02 2013-06-18 International Business Machines Corporation Managing redundant immutable files using deduplication in storage clouds
JP5883300B2 (ja) * 2012-02-02 2016-03-09 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation オブジェクトを特定するためのハッシュコードを生成するための方法、プログラム及びシステム
JP5885616B2 (ja) * 2012-08-08 2016-03-15 キヤノン株式会社 情報処理装置、インストール方法、およびプログラム
US10120796B2 (en) * 2012-09-14 2018-11-06 Sap Se Memory allocation for long-lived objects
US10146684B2 (en) * 2016-10-24 2018-12-04 Datrium, Inc. Distributed data parallel method for reclaiming space
KR20200027204A (ko) * 2018-09-04 2020-03-12 삼성전자주식회사 전자장치 및 그 제어방법

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6438560B1 (en) * 1999-09-16 2002-08-20 International Business Machines Corporation Reuse of immutable objects during object creation
US6839725B2 (en) * 2000-05-16 2005-01-04 Sun Microsystems, Inc. Dynamic adaptive tenuring of objects
US6598141B1 (en) * 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
JP2003256209A (ja) * 2002-03-06 2003-09-10 Matsushita Electric Ind Co Ltd プログラム実行装置
JP4589095B2 (ja) * 2004-12-14 2010-12-01 三菱電機株式会社 プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム

Also Published As

Publication number Publication date
JP2009064217A (ja) 2009-03-26
US8176100B2 (en) 2012-05-08
US20090070740A1 (en) 2009-03-12

Similar Documents

Publication Publication Date Title
JP5044816B2 (ja) オブジェクトを記憶・管理するシステム
CN106575297B (zh) 使用盲更新操作的高吞吐量数据修改
US8046521B2 (en) Computer virtualization apparatus and program and method therefor
US7865885B2 (en) Using transactional memory for precise exception handling in aggressive dynamic binary optimizations
RU2433453C2 (ru) Оптимизация операций программной транзакционной памяти
US6247027B1 (en) Facilitating garbage collection during object versioning for space and time dimensional computing
KR100368166B1 (ko) 컴퓨터 처리 시스템에서 스택 레퍼런스를 변경하는 방법
KR20210063862A (ko) 키-값 기반의 데이터 저장 장치 및 이를 포함하는 시스템
JPWO2012127590A1 (ja) エンディアン変換方法、およびシステム
KR100931460B1 (ko) 단일 스레드 응용을 지원하기 위한 시간-멀티플렉스된스펙큘레이티브 멀티 스레딩
JP5773493B2 (ja) 情報処理装置
JP5697195B2 (ja) アクセス予測に基づいてテーブルのミラーリングを制御する管理システム、プログラムおよび方法
JP5160483B2 (ja) ストレージシステム及びデータマイグレーション対応検索システム
Li et al. Leveraging NVMe SSDs for building a fast, cost-effective, LSM-tree-based KV store
JP3973129B2 (ja) キャッシュメモリ装置及びそれを用いた中央演算処理装置
US20070255771A1 (en) Method and system for renewing an index
JP2006163596A (ja) 情報処理システム、制御方法、及びプログラム
CN117377953A (zh) 基于树的数据结构
JP2933628B2 (ja) 主記憶装置管理方法および計算機システム
JP4701611B2 (ja) 動的変換方式のエミュレータ向けメモリ管理方法
JP5303943B2 (ja) 演算処理装置および演算処理装置の制御方法
JP5577518B2 (ja) メモリ管理方法、計算機及びメモリ管理プログラム
JP5212216B2 (ja) ジョブ処理装置
JP5246014B2 (ja) 仮想化プログラム、仮想化処理方法及び装置
CN117642735A (zh) 数据结构中的项的版本化

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100524

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20120606

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120626

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

Free format text: PAYMENT UNTIL: 20150727

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