JP4079684B2 - ヒープメモリ管理方法およびそれを用いた計算機システム - Google Patents

ヒープメモリ管理方法およびそれを用いた計算機システム Download PDF

Info

Publication number
JP4079684B2
JP4079684B2 JP2002132324A JP2002132324A JP4079684B2 JP 4079684 B2 JP4079684 B2 JP 4079684B2 JP 2002132324 A JP2002132324 A JP 2002132324A JP 2002132324 A JP2002132324 A JP 2002132324A JP 4079684 B2 JP4079684 B2 JP 4079684B2
Authority
JP
Japan
Prior art keywords
heap
new
collection
survival rate
objects
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
JP2002132324A
Other languages
English (en)
Other versions
JP2003323336A (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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2002132324A priority Critical patent/JP4079684B2/ja
Priority to US10/339,338 priority patent/US7167881B2/en
Publication of JP2003323336A publication Critical patent/JP2003323336A/ja
Application granted granted Critical
Publication of JP4079684B2 publication Critical patent/JP4079684B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、計算機システムに関し、特に計算機システムにおけるメモリ管理方法の分野に関する。具体的には、世代別ガベージコレクション(generational garbage collection)方法およびそれを用いた計算機システムに関する。
【0002】
【従来の技術】
すべてのアプリケーションプログラムは、様々なリソースを用いて記述される。例えば、オブジェクト指向環境におけるプログラミングでは、リソースをオブジェクトとして扱う。プログラマは、オブジェクト毎に明示的にメモリを確保し、そのオブジェクトに対応したメモリブロックを初期化して、プログラム実行時にオブジェクトを利用する。利用後はオブジェクトの状態情報を破棄し、最終的にオブジェクトを割り当てたメモリを解放する。ところが、プログラマによるこれら一連のメモリ管理操作はバグの巣窟であり、メモリリークやオブジェクトの破壊といった、致命的なプログラミングエラーを起こしかねない。
【0003】
プログラマをメモリ管理のわずらわしさから解放するため、近年多用されているオブジェクト指向型のプログラミングシステムは、メモリ管理を自動的かつ動的に行う。オブジェクト指向言語処理系(プログラミングシステム、以下単にシステムという)はヒープとよぶ有限サイズのメモリを管理し、オブジェクトのヒープへの割り当てを自動的かつ動的に行う。アプリケーションプログラム実行時、システムによるオブジェクトのヒープ割り当ては継続して行われるため、いつかは有限なヒープを使い尽くしてしまう。この問題を解決するためには、ガベージコレクションにより、ヒープ内の使用していないメモリブロックを回収し、再利用する必要がある。
【0004】
一般に、オブジェクト指向のプログラミング実行環境では、ヒープ内オブジェクトへのポインタ(メモリのロケーション情報)がなくなるとオブジェクトにアクセスすることができないため、アクセス不可能になったオブジェクトに対して割り当てられたメモリブロックを他のオブジェクトのために再利用できる。この事実に基づきガベージコレクションは、実行中のアプリケーションプログラムがアクセス可能なオブジェクトを識別し、アクセス可能であれば生存オブジェクトとして保持する。アクセス不可能であったオブジェクトは不必要なオブジェクトとして後のヒープ割り当てのために解放し、そのメモリブロックを後に再利用する。
【0005】
オブジェクトがアクセス可能かどうかは、ルーツをたどることにより判断する。すべてのアプリケーションプログラムはルーツを持つ。ルーツはメモリロケーション情報のリストであり、ヒープ内のオブジェクトか、ヒープ内のnullをセットされたオブジェクト(プログラムからの参照がなくなったもの)のどちらかを参照する。たとえば、アプリケーションプログラム内のすべてのグローバルな静的オブジェクトポインタ、スタック上にあるローカル変数や引数オブジェクトポインタ、ヒープ内のオブジェクトを指すポインタを格納するCPUレジスタはすべて、アプリケーションプログラムのルーツの一部とみなされる。ガベージコレクションはルーツをたどり、オブジェクトがルーツから到達可能であればアクセス可能であると判断する。
【0006】
ガベージコレクション方法としては、様々な手法が提案されている。これら従来手法については、Richard JonesおよびRafael Linsによる「Garbage Collection:Algorithms for Automatic Dynamic Memory Management」、John Wiley&Sons出版社(ISBN 0−147−94148−4)に詳細が記述されているため、ここでは説明を省略する。その中で、近年のオブジェクト指向プログラミングシステムは、最も効率よくガベージコレクションを行う方法として、世代別ガベージコレクションを採用している。
【0007】
世代別ガベージコレクションは、ほとんどのオブジェクトの生存期間は短く、かつ、新しいオブジェクト程生存期間が短く、古いオブジェクト程生存期間も長いという前提の下で、ガベージコレクション実行時に調査対象になるオブジェクトの数、すなわち、ガベージコレクションの対象となるオブジェクトを割り当てたメモリのサイズ、を限定することにより、ガベージコレクションによりアプリケーションプログラム実行が中断する時間を削減する。
【0008】
世代別ガベージコレクションでは、ヒープを世代とよぶ複数グループに論理的に分割して管理する。世代はオブジェクトの生存期間に関連し、一般にそのオブジェクトが生存したガベージコレクションサイクルで決定される。例えば、ヒープを新世代と旧世代という2つのグループに論理的に分割した場合、最新オブジェクトを新世代ヒープのメモリブロックに配置し、何回かガベージコレクションを行った後も生存するオブジェクトを旧世代ヒープのメモリブロックに再配置する。通常は新世代ヒープのみを対象としてガベージコレクションを行い(マイナーコレクション)、新世代ヒープに新規オブジェクトに割り当てるための空きメモリブロックがなくなった場合にのみ、少なくとも旧世代を含むヒープに対してガベージコレクションを行う(メジャーコレクション)。マイナーコレクションは、アプリケーションプログラム実行中に、新規オブジェクトを割り当てたメモリサイズがあらかじめ決められた閾値に達するか、あるいはあらかじめ決められた時間が経過すると行われ、メジャーコレクションに比べ頻繁に行われる。マイナーコレクションは、ルーツをたどることによりガベージコレクションの対象となる新世代ヒープのメモリブロックを割り当てたオブジェクト群の中でアクセスできないオブジェクトを識別し、アクセス可能なオブジェクトを別の場所に再配置する。また、十分に長く生き残ったオブジェクトを旧世代ヒープに再配置する。
【0009】
一般に、再配置とは、アクセス可能なオブジェクトを別のメモリブロックにコピーする処理である。コピー処理後もアプリケーションプログラムがコピー先のオブジェクトにアクセスできるように、そのオブジェクトへのポインタをコピー先のメモリブロックへとつけかえる。マイナーコレクションでは、再配置の対象となるオブジェクト数がメジャーコレクションに比べると非常に少ないため、高速にガベージコレクションを行うことができる。
【0010】
図1にヒープを旧世代と新世代の2グループに論理的に分割した世代別ガベージコレクションシステムの1例を示す。図中、100はヒープ、101は旧世代ヒープ、102は新世代ヒープである。新世代ヒープ102はさらにオブジェクト作成領域110とエイジング領域111に論理分割される。また、図示のように新世代ヒープではあるがまだ利用されていない領域も含む。120、130、140はヒープに保持するオブジェクトであり、ここでは同じ内容を示す。
【0011】
新規オブジェクトは、オブジェクト作成領域110に割り当てる。エイジング領域111には、オブジェクト作成領域110においてマイナーコレクションを行った結果生存したオブジェクトを再配置する。旧世代ヒープ101には、エイジング領域111において一定ガベージコレクションサイクル後もアクセス可能であった生存オブジェクトを再配置する。
【0012】
オブジェクト作成領域110には新規オブジェクト120を割り当てる。オブジェクト作成領域110におけるマイナーコレクションの結果、オブジェクト120がアプリケーションプログラムからアクセス可能であった場合には、オブジェクト120をエイジング領域111のオブジェクト130として再配置し、ポインタを更新する。再配置の結果、オブジェクト作成領域110のオブジェクト120は無効になり、アプリケーションプログラムからは、再配置先のオブジェクト130が参照される。エイジング領域111のオブジェクト130が一定ガベージコレクションサイクル後もアクセス可能であった場合には、旧世代ヒープ101のオブジェクト140として再配置する。再配置後、再配置先のオブジェクト140がアプリケーションプログラムから参照される。
【0013】
図2は、ヒープを3世代に論理分割する世代別ガベージコレクションシステムの別の例を示す。図中、200はヒープ、201は第0世代ヒープ、202は第1世代ヒープ、203は第2世代ヒープを示す。210、211、212はオブジェクトを示し、同じ内容を含む。第0世代ヒープ201には、新規オブジェクトを割り当てる。第1世代ヒープ202には、第0世代ヒープにおいて少なくともN(Nは1から4までの整数値)ガベージコレクションサイクルの間生存したオブジェクトを再配置する。第2世代ヒープ203は、システム中で最も古いオブジェクトを保持しており、第1世代ヒープ202において少なくともN(Nは1から4までの整数値)ガベージコレクションサイクルの間生存したオブジェクトを再配置する。通常Nは1に設定する。
【0014】
第0世代ヒープ201には新規オブジェクト210を割り当てる。一定ガベージコレクションサイクル後、第0世代ヒープ201のオブジェクト210がアプリケーションプログラムからアクセス可能であった場合には、オブジェクト210を第1世代ヒープ202のオブジェクト211として再配置する。再配置の結果、第0世代ヒープ201のオブジェクト210は無効になり、アプリケーションプログラムからは、再配置先のオブジェクト211が参照される。第1世代ヒープ202のオブジェクト211が一定ガベージコレクションサイクル後もアクセス可能であった場合には、第2世代ヒープ203のオブジェクト212として再配置する。再配置後、アプリケーションプログラムからはオブジェクト212が参照される。
【0015】
上述の世代別ガベージコレクション方法については、以下に示す従来例が公知である。
【0016】
例えば、特開平11−151802号公報では、マルチプロセッサ環境において、世代別ガベージコレクションを行う方法が記載されている。ガベージコレクションをマルチプロセッサ環境で行うために、特定プロセッサが世代別ガベージコレクションを行う条件を検出し、条件が成立する場合、複数のプロセッサはその特定プロセッサからの指示に従いプログラム処理を停止し、一斉に世代別ガベージコレクションを行う。複数のプロセッサは、ガベージコレクションが終了したことを検出すると、通常のプログラム処理を再開する。世代別ガベージコレクションでは、図1に示すヒープを旧世代と新世代の2グループに論理的に分割し、新世代をさらに作成領域とエイジング領域に分割する方法を用いる。マイナーコレクション時、作成領域内の各オブジェクトがアプリケーションプログラムからアクセス可能であるかどうかを識別し、アクセス可能であった作成領域内の生存オブジェクトはエイジング領域に再配置される。エイジング領域のオブジェクトで、N(Nは1から4までの整数値)ガベージコレクションサイクル後もアクセス可能であるオブジェクトは、旧世代ヒープに再配置される。(第1の公知例)
USP 5,652,883では、世代別ガベージコレクション方法とコンサバティブガベージコレクションのアプローチを融合することにより、マイナーコレクション時に生存するオブジェクトを正確に識別するための手法が記載されている。メモリはスタックとヒープを含み、ヒープは新世代と旧世代に論理分割され、それぞれにはポインタにより識別される新規オブジェクトと古いオブジェクトを割り当てる。スタックはそのエントリに、オブジェクトへのポインタである可能性があるものを保持する。
【0017】
オブジェクトへのポインタである可能性があるものを保持するとは以下の理由による。例えば、あるオブジェクトがオブジェクトへの参照とvalue値の構造体として定義されている場合、オブジェクトを参照するときに、中身がポインタである場合とvalue値である場合がある。コンサバティブガベージコレクションでは、ポインタの場合もvalue値である場合もアクセス可能であると認識する。その結果、ガベージコレクション時に生存したオブジェクトを圧縮して別のメモリ領域に移す場合に、オブジェクトのポインタでないものはアドレスが分からないので移動することが出来ない。そこで、ここで述べている従来手法では、オブジェクトへのポインタである可能性のあるものとは通常とは別管理とすることで、アクセス可能かどうかを正確に切り分け、問題を解決する手法を用いている。
【0018】
また、新世代ヒープのルーツからたどることのできない旧世代ヒープから新世代ヒープのオブジェクト参照をサポートするために、リメンバーリストを設ける。リメンバーリストには、新世代ヒープ内のオブジェクトへのポインタを持つ旧世代ヒープのオブジェクトを登録する。ガベージコレクション時に、スタックおよびリメンバーリスト経由でアクセス可能なオブジェクトは生存オブジェクトとして識別する。この方式では、ガベージコレクション時、ガベージコレクションの対象となるオブジェクトがアクセス可能かどうかを、新世代ヒープのルーツを用いるだけでなく、スタックエントリおよびリメンバーリストを用いて判断することにより、より正確に生存オブジェクトを識別する。マイナーコレクションでは、上記手法により識別した生存オブジェクトをより古い世代に再配置する。(第2の公知例)
USP 6,226,653 B1では、リメンバーセットを用いて効率よく旧世代ヒープのオブジェクトから新世代ヒープのオブジェクトへの参照を行う世代別ガベージコレクション方法について記載されている。ここでは、図2に示すヒープを3世代に論理分割する方法を用いている。リメンバーセットは、第2の公知例と同様、新世代オブジェクトへのポインタを持つ旧世代オブジェクトを登録するために使用する。一旦、オブジェクトを旧世代ヒープに再配置すると、アプリケーションプログラムがそのオブジェクトをアクセスしなくなってもメジャーコレクション実行時までは回収されないため、旧世代ヒープを有効に利用することができない。そこで、旧世代ヒープに再配置するオブジェクト数を出来る限り削減することを目的として、新世代と旧世代の間に位置する中間世代を設け、各世代間での再配置のタイミングを遅らせ、旧世代へ再配置するオブジェクト数を削減する。(第3の公知例)
マイナーコレクションのオーバヘッドを削減する方法として、情報処理学会論文誌Vol.38 No.4 APR.1997 pp.835−844「オブジェクトの生存率の理論的解析に基づいた世代別ガーベッジコレクション」では、マイナーコレクションにおいて、オブジェクトの生存率に基づきwatermarkと呼ぶ閾値を動的に変更する世代別ガベージコレクション方法が開示されている。ここでは、ヒープを旧世代と新世代の2グループに論理的に分割し、新世代を更に作成領域とエイジング領域に分割する方法を用いている。watermarkと呼ぶ閾値アドレスを作成領域中に設定することで、マイナーコレクション時に閾値より低いアドレスにあってアクセス可能なオブジェクトは旧世代ヒープに直接再配置し、閾値よりも高いアドレスにあってアクセス可能なオブジェクトは新世代ヒープのエイジング領域に再配置する。ここでは、watermarkをオブジェクトがどれくらい長く生存するかという理論計算に基づいてシステムが動的に設定する。(第4の公知例)
【0019】
【発明が解決しようとする課題】
上記第1、第2および第3の公知例で記載されている世代別ガベージコレクション方法では、ほとんどのオブジェクトの生存期間は短く、かつ新しいオブジェクト程生存期間が短く、古いオブジェクト程生存期間も長いという前提をおいている。言い換えると、マイナーコレクションにおいて、再配置(コピー)の対象となる生存オブジェクトは少なく、結果として旧世代ヒープに再配置するオブジェクトも少ないことを前提としている。その前提の下、マイナーコレクションにおいて再配置の対象となる生存オブジェクトを正確に識別するための手法について記載されている。
【0020】
ところが、ブロードバンド時代の企業情報システムでは、短期間に数多くのアプリケーションプログラムを開発する必要があるため、個々のアプリケーションプログラムをチューニングする時間が減少する。また、作成したアプリケーションプログラムを企業情報システム上で運用し始めると、運用を停止しメンテナンスすることは困難であるため、ほとんど変更されない。このような状況下で開発されたプログラムではオブジェクトの生存期間が長くなる。また、ブロードバンド時代の企業情報システムでは、アプリケーションプログラムをネットワーク経由でアクセスするため、本質的にオブジェクトの生存期間が長くなる。このようなオブジェクトの生存期間が長いプログラムでは、マイナーコレクションの結果アクセス可能と識別される生存オブジェクト数が多く、世代内あるいは世代間でのオブジェクトの再配置量、すなわちコピー量が多くなる。
例えば、上記第3の公知例のように0、1、2世代で構成される世代別ガベージコレクションにおいて、生存オブジェクトが多い場合、マイナーコレクションの対象となる新規オブジェクトのほとんどが第0世代から第1世代へと再配置され、さらにこれらのオブジェクトはそのまま第1世代から第2世代へと再配置される。あるいは、上記第1の公知例のように、新旧二つの世代で構成され、新世代がさらに作成領域とエイジング領域で構成される世代別ガベージコレクションでは、マイナーコレクション時にほとんどのオブジェクトが作成領域からエイジング領域に再配置され、さらにエイジング領域から旧世代領域へと再配置される。すなわち、大多数のオブジェクトが2回以上の再配置(コピー処理)を行うことになる。特に、マイナーコレクションにおけるアプリケーションプログラムの中断時間を最小にするため、コピー処理をアプリケーションプログラム本来の処理と並行して行うことがある。その結果、再配置により発生するコピー処理がアプリケーションプログラム本来の処理に悪影響を及ぼし、アプリケーションプログラムの性能が大きく低下する。上記第1、第2および第3の公知例では、マイナーコレクション時の生存オブジェクト数が少ないことを前提としているため、これらコピー処理によるアプリケーションプログラム処理への影響は小さいが、生存オブジェクト数が多いブロードバンド時代のアプリケーションプログラムでは、オブジェクトの世代間のコピー処理が増加し、結果としてアプリケーションプログラムの性能が低下してしまう。
【0021】
第4の公知例について述べると以下のようである。従来技術ではガベージコレクション処理はプログラム処理を中断して行うことを前提に、オブジェクトがどのくらい長時間生存するかという理論的計算に基づきwatermarkの最適値を決定してガベージコレクションのオーバヘッドを削減する。ところが、現実はガベージコレクション処理によるプログラムの中断時間を最小にするため、ガベージコレクション処理のコピー処理部分はプログラム本来の処理と並行して行なわれる。この従来技術ではコピー処理がプログラム本来の処理と並行して行なわれることによるアプリケーションプログラムの処理性能の低下を考慮していないため、最適な閾値を決定することは難しい。また、閾値アドレスにより再配置先を変更するため、生成領域中のほとんどのオブジェクトが生存する場合にも閾値アドレスよりも上位アドレスに割り当てられたオブジェクトは新世代ヒープのエイジング領域に再配置されてしまい、コピー量を削減することが出来ない。
【0022】
この問題点を解決するために、マイナーコレクションにおいてアクセス可能と識別されるオブジェクト数が多い場合、すなわち再配置の対象になるメモリブロックサイズが大きい場合には、オブジェクトの再配置先を変更し、コピー処理を削減する必要がある。
【0023】
また、アプリケーションプログラムの性能低下の問題に対しては、アプリケーションプログラムを設計しなおし、不要なオブジェクトを生成しない、不必要なオブジェクトを解放する、オブジェクトを再利用するといったソースコードレベルのチューニングを行うことで対策可能である。ところが、ソースコードレベルのチューニングを行うと、プログラムの開発コストが増大してしまう。
【0024】
この問題点を解決するために、マイナーコレクション時にアクセス可能と識別される生存オブジェクト数が多い場合でも、アプリケーションプログラムを改変することなく、アプリケーションプログラムの処理時間を削減する必要がある。
【0025】
本発明の第1の課題は、ブロードバンド時代のアプリケーションプログラムの性能低下を防止するために、世代別ガベージコレクションのマイナーコレクションにおいて、アプリケーションプログラムからアクセス可能な生存オブジェクトが多い場合、そのオブジェクトの再配置処理(すなわちコピー処理)を削減する世代別ガベージコレクション方法を提供することにある。
【0026】
本発明の第2の課題は、プログラマがアプリケーションプログラムのソースコードを改変することなく、オブジェクトの再配置先を変更するための閾値を設定できる世代別ガベージコレクションのパラメータ設定方法を提供することにある。
【0027】
【課題を解決するための手段】
本発明の第1の課題は、世代別ガベージコレクションのマイナーコレクションにおける生存オブジェクト再配置プロセスを、少なくとも2回のマイナーコレクション間にアプリケーションプログラムが生成した新規オブジェクトのために、システムに要求して割り当てられたメモリサイズに対する、新規オブジェクトのうち生存するオブジェクトに割り当てられているメモリサイズの比率を算出するオブジェクト生存率算出プロセスと、オブジェクト生存率と閾値を比較するオブジェクト生存率比較プロセスと、オブジェクト生存率が閾値を超える場合に生存オブジェクトを旧世代ヒープに直接再配置する生存オブジェクト再配置プロセスで行うことで解決できる。
【0028】
本発明の第2の課題は、第1の課題を解決する手段に加えて、アプリケーションプログラマがプログラムの実行時パラメータとして再配置先を変更するための閾値を設定する手段を設けることで解決できる。
【0029】
【発明の実施の形態】
以下、本発明に係るメモリ管理方法について、図面を参照しながら詳細に説明する。
【0030】
<発明の実施の形態>
図3に本発明の実施の形態におけるアプリケーションプログラムの開発フローを示す。アプリケーションプログラムの開発は、プログラム実行環境の構築(ステップ302)、プログラムのコーディング(ステップ303)、プログラムの静的パラメータの設定(ステップ304)、プログラムのコンパイル(ステップ305)、プログラムの実行時パラメータの設定(ステップ306)、プログラムの実行(ステップ307)、プログラムの評価(ステップ308)の順に行う。ステップ302は、複数のアプリケーションプログラムのコーディングを行う前に唯一度だけ行う。プログラマはプログラムの実行ファイルが完成するまでは、ステップ303、ステップ304、ステップ305の処理を繰り返す。プログラムの実行ファイル完成後は、ステップ306以降の処理を行うことができるが、プログラム実行し、ステップ308においてプログラムの評価を行った結果、処理性能が十分でない場合には、ステップ306あるいはステップ304に戻り様々なパラメータを設定し直してチューニングを行う。ステップ306あるいはステップ304においてチューニングを行っても処理性能が改善しない場合には、ステップ303に戻り、プログラムを再コーディングする。プログラムの実行ステップ307では、計算機システムのメモリリソースを用いてプログラムを実行するが、本発明の実施の形態ではプログラマがメモリを管理するのではなく、システムがヒープメモリを管理することを前提とする。また、ヒープメモリ管理では世代別ガベージコレクションを用いる。
【0031】
本発明の実施の形態における世代別ガベージコレクションを行うヒープメモリの概略構成を図4に示す。ヒープメモリ400は旧世代ヒープ401と新世代ヒープ402で構成される。これら2つは論理的に分割されている。またヒープメモリ400は、管理領域403を持つ。新世代ヒープ402は最新オブジェクトを保持するオブジェクト作成領域410とエイジング領域411で構成される。オブジェクト作成領域410には新規オブジェクトを割り当てる。エイジング領域411には、オブジェクト作成領域410内の生存するオブジェクトを再配置する。旧世代ヒープ401には、エイジング領域411内の生存オブジェクトを再配置する。
【0032】
管理領域403は、ヒープ管理情報420や実行時パラメータ421等を管理する領域である。ヒープ管理情報420には、システムがヒープメモリ管理を行うのに必要な各種管理情報を保持する。実行時パラメータ421は、プログラマが実行時に設定するものであり、具体的にはプログラム実行開始時のヒープメモリサイズや、新世代ヒープサイズ等である。ここで、ヒープメモリ管理や実行時パラメータ等を管理する領域を世代別ヒープとは別の領域に設けているが、世代別ヒープ内部に設けてもよい。本発明の実施例ではヒープを2世代に論理分割したヒープを用いた場合のガベージコレクション方法について説明しているが、図2のように3世代に論理分割したヒープにも適用可能である。第0世代、第1世代、第2世代のように3つの世代に論理分割したヒープの場合、第0世代はオブジェクト作成領域410、第1世代はエイジング領域411、第2世代は旧世代ヒープ401に対応する。
【0033】
図4に示すヒープメモリ400の構成および管理情報の管理方法については、従来の技術と同じ手法で実現できるため、詳細説明を省略する。本発明の実施の形態では、管理領域403が従来のヒープ管理情報に加えてオブジェクト生存率を記録し、プログラマが実行時パラメータとしてオブジェクト生存率の閾値を設定する。また、設定した閾値を管理領域403の実行時パラメータ421に保持する。
【0034】
次に図4のヒープメモリ400を管理するヒープメモリ管理プロセスを図5に示す。ヒープメモリ管理プロセスは、オブジェクト割り当てプロセス502とガベージコレクションプロセス506で構成する。ガベージコレクションプロセス506は、マイナーコレクションプロセス507とメジャーコレクションプロセス508からなる。アプリケーションプログラム実行時、プログラムが新規オブジェクトを生成するために、メモリ割り当て要求をシステムに発行すると、システムはヒープメモリ管理プロセスを起動する(501)。次に、オブジェクト割り当てプロセス502は、新規オブジェクトをヒープの空きメモリブロックに割り当てる。オブジェクト割り当てプロセス502は、従来と同じ手法により実現可能であるため、ここでは詳細を説明しない。
【0035】
プロセス503では、新規オブジェクトにメモリブロックを割り当てる場合に、ヒープが不足してないかどうかを判定する。ヒープが足りている場合には、新規オブジェクトにメモリブロックを割り当て、メモリ管理プロセスを終了する(504)。プロセス503においてヒープが足りない場合には、ガベージコレクションプロセス506を起動する。ここで、ガベージコレクションプロセス506を実行するプログラム部をガベージコレクタとも言う。
【0036】
ガベージコレクションプロセス506を起動するにあたって、世代別ガベージコレクションを行うため、プロセス505により新世代ヒープに空きがあるかどうかを判定する。新世代ヒープに空きがある場合には、マイナーコレクションプロセス507を起動する。新世代ヒープに空きがない場合には、メジャーコレクションプロセス508を起動する。
【0037】
マイナーコレクションプロセス507は、新世代ヒープに割り当てた新規オブジェクトが一定のメモリサイズに達するか、あるいはガベージコレクションプロセス506を実行した後一定の時間が経過した場合に起動する。マイナーコレクションプロセス507は、新世代ヒープのガベージコレクション対象のメモリブロックに割り当てた新規オブジェクト群について、アプリケーションプログラムがアクセス可能なオブジェクトを識別し、アクセス可能な生存オブジェクトは別の世代に移動し、アクセスできないオブジェクトに割り当てたメモリブロックを解放する。
【0038】
メジャーコレクションプロセス508は、ヒープメモリに割り当てた少なくとも旧世代のオブジェクトについて、本例ではヒープメモリに割り当てた全てのオブジェクトについて、アプリケーションプログラムからアクセス可能かどうかを識別し、アクセス不可能なオブジェクトに割り当てたメモリブロックを解放する。メジャーコレクションプロセス508は、生存オブジェクトがまとまったメモリブロックに配置されるように、メモリ割り当ての最適化も行う。
【0039】
マイナーコレクションプロセス507あるいはメジャーコレクションプロセス508によりメモリブロックを解放する。解放後、再度オブジェクト割り当てプロセス502により、新規オブジェクトにメモリブロックを割り当て、メモリ管理プロセスを終了する(504)。
【0040】
本発明の実施の形態では、マイナーコレクションプロセス507の処理フローが従来の技術とは異なる。
【0041】
図6にマイナーコレクションプロセス507の処理フローを示す。マイナーコレクションプロセス507は、ポインタ位置特定プロセス602と生存オブジェクト再配置プロセス603とポインタ位置更新プロセス604で実現する。
【0042】
ポインタ位置特定プロセス602は、マイナーコレクションプロセス507起動時に、アプリケーションプログラムからアクセス可能なオブジェクトに対するポインタを特定するプロセスである。
【0043】
生存オブジェクト再配置プロセス603は、マイナーコレクションの結果生存したオブジェクトを異なる世代のメモリブロックあるいは同じ世代の異なるメモリブロックに再配置するプロセスである。
【0044】
ポインタ位置更新プロセス604は、アプリケーションプログラムが再配置先のオブジェクトをアクセスすることができるように、再配置した生存オブジェクトに対するポインタを更新するプロセスである。
【0045】
本発明の実施の形態では、マイナーコレクションにおける生存オブジェクト再配置プロセス603が新規である。ポインタ位置特定プロセス602およびポインタ位置更新プロセス604は従来技術で実現できるため、ここでは詳細説明を省略する。
【0046】
図7に、マイナーコレクションプロセスにおける生存オブジェクト再配置プロセス603の処理フローを示す。生存オブジェクト再配置プロセス603は、オブジェクト生存率算出プロセス702と、オブジェクト生存率比較プロセス703と、生存オブジェクト再配置プロセス704からなる。
【0047】
オブジェクト生存率算出プロセス702は、オブジェクト生存率を算出するプロセスである。オブジェクト生存率比較プロセス703は、オブジェクト生存率算出プロセス702で算出したオブジェクト生存率が高いかどうかを判定する。生存オブジェクト再配置プロセス704は、オブジェクト生存率比較プロセス703の結果に従い、生存オブジェクトの再配置先を変更するプロセスである。
【0048】
本発明の実施の形態では、マイナーコレクションにおける生存オブジェクト再配置プロセス603がオブジェクト生存率算出プロセス702およびオブジェクト生存率比較プロセス703および生存オブジェクト再配置プロセス704からなる。さらに、生存オブジェクト再配置プロセス704がオブジェクト生存率比較プロセス703の実行結果に従って動作する。
【0049】
図8に、生存オブジェクト再配置プロセス603の処理フローの詳細を示す。生存オブジェクト再配置プロセス603は、オブジェクト生存率を算出するプロセス802と、オブジェクト生存率が閾値を超えているかどうかを判定するプロセス803と、オブジェクト生存率が閾値を超えている場合に生存オブジェクトを新世代ヒープ402のオブジェクト作成領域410から旧世代ヒープ401にダイレクトに再配置するプロセス804と、オブジェクト生存率が閾値以下である場合には従来の技術と同じ手法を用いて新世代ヒープのオブジェクト作成領域410の生存オブジェクトを新世代ヒープ402のエイジング領域411に再配置するプロセス805からなる。
【0050】
プロセス802は、オブジェクト生存率を算出する。オブジェクト生存率は、マイナーコレクション間で新規オブジェクトを割り当てた新世代ヒープメモリサイズと新規オブジェクトのうち生存するオブジェクトが割り当てられたメモリサイズの比率である。新規オブジェクトに割り当てたメモリが一定サイズに達するたびにマイナーコレクションプロセス507を起動する場合、オブジェクト生存率の分母にあたる新規オブジェクトを割り当てるメモリサイズは一定である。一方、マイナーコレクションプロセスを一定時間毎に起動する場合には、プログラムの処理内容によりオブジェクト生存率の分母にあたるメモリサイズはかわりうる。プロセス802で算出するオブジェクト生存率は図4に示す管理領域403に記録する。オブジェクト生存率は現在処理中のマイナーコレクションプロセスでのみ使用するため、テンポラリ領域に記録してもよい。
【0051】
プロセス803で使用する閾値Xは、図3に示すプログラム開発フローの中の実行時パラメータ設定ステップ306により、プログラマがプログラムの実行時パラメータとして設定する。プログラム実行が開始されると、これらの実行時パラメータは図4に示すヒープメモリ400の管理領域403に記録される。プロセス803では、あらかじめ設定した閾値と、プロセス802によりマイナーコレクション毎に新しく算出するオブジェクト生存率を比較する。
【0052】
本発明の実施の形態では、オブジェクト生存率をマイナーコレクション間で新規オブジェクトを割り当てた新世代ヒープメモリサイズと新規オブジェクトのうち生存するオブジェクトが割り当てられたメモリサイズの比率として算出している。オブジェクト生存率は、生存オブジェクトが割り当てられるメモリのサイズあるいは生存オブジェクト数でもよい。同様に、閾値もオブジェクト生存率と同様に比率として設定しているが、生存オブジェクトが割り当てられるメモリのサイズあるいは生存オブジェクト数でもよい。また、本発明の実施の形態では、現在マイナーコレクションの対象となるヒープメモリに関する生存オブジェクトの情報に基づきオブジェクト生存率を算出しているが、過去の履歴に基づいてオブジェクト生存率を算出してもよい。その場合は、生存オブジェクト再配置プロセス603においてオブジェクト生存率算出プロセス702を行わなくとも、ヒープメモリの管理領域403に記録したオブジェクト生存率に基づいて生存オブジェクトを再配置すればよい。
【0053】
本発明の実施の形態では、マイナーコレクションにおける生存オブジェクトの再配置プロセス603を、オブジェクト生存率を算出するプロセス802と、オブジェクト生存率が閾値を超えているかどうかを判定するプロセス803と、判定結果に従って、プロセス804あるいはプロセス805の処理を行い、生存オブジェクトの再配置先を変更する。
【0054】
また、本発明の実施の形態では、プロセス802で算出するオブジェクト生存率およびプロセス803で使用する閾値を管理領域403に保持する。また、プロセス803で使用する閾値をプログラマがプログラムの実行時パラメータとして設定する。また、プログラマが実行時パラメータとして設定したオブジェクト生存率の閾値を管理領域403に保持する。
【0055】
図9は、図5に示すメジャーコレクションプロセス508の処理フローを示す。メジャーコレクションプロセス508は、ポインタ位置特定プロセス902と、生存オブジェクト再配置プロセス903と、ポインタ位置更新プロセス904で実現する。
【0056】
生存オブジェクト再配置プロセス903は、ヒープ全体についてアプリケーションプログラムからアクセス可能なオブジェクトを識別し、プロセス910によりアクセス可能な生存オブジェクトを再配置する。メジャーコレクションプロセス508は、従来の技術と同じ方法で実現できるため、ここでは詳細説明を省略する。
【0057】
次に本発明の実施の形態における世代別ガベージコレクションの処理フローについて各図を用いて説明する。
【0058】
図3にプログラム開発のフローを示す。プログラマがアプリケーションプログラムを開発する場合、まずステップ302のプログラム実行環境を構築する。次に、アプリケーションプログラムをコーディングし(303)、プログラムの静的パラメータを設定し(304)、プログラムをコンパイルする(305)。コンパイルが終了すると、プログラムを実行する。プログラマはプログラムの実行に先立ち、実行時パラメータを設定する。実行時パラメータの設定(306)において、ヒープサイズや新世代ヒープサイズ等を設定し、同時にオブジェクト生存率の閾値を設定する。
【0059】
本発明では、プログラマは実行時パラメータの設定において、オブジェクト生存率の閾値を設定する。
【0060】
図10にプログラム実行時におけるマイナーコレクション回数とオブジェクト生存率の推移の例を示す。本発明の実施の形態では、プログラマが実行時パラメータとしてオブジェクト生存率の閾値を75%に設定する。プログラマは図3に示すステップ307により、閾値を含む実行時パラメータを用いてプログラムを実行する。プログラム実行が開始されると、プログラムはシステムのヒープメモリを使用して処理を進める。プログラムが新規オブジェクトにメモリを割り当てる場合、システムに対してメモリ割り当て要求を発行する。システムはプログラムからメモリ割り当て要求を受けとると、メモリ管理プロセスを起動して新規オブジェクトにヒープのメモリブロックを割り当てる。図5にメモリ管理プロセスの処理フローを示す。システムがメモリ管理プロセスを起動すると(501)、オブジェクト割り当てプロセス502を行う。
【0061】
オブジェクト割り当てプロセス502は、新規オブジェクトを図4に示す新世代ヒープ402の中のオブジェクト作成領域410に割り当てる。プログラムの処理が進み、新規オブジェクトを割り当てるためのオブジェクト作成領域410が満杯になると、システムは図5に示すガベージコレクションプロセス506を起動する。プロセス505の結果、新世代ヒープ402にはまだ空きがあるため、1回目のマイナーコレクションプロセス507を起動する。
【0062】
次に、図5、図6、図8を用いて、マイナーコレクションプロセス507の処理フローについて説明する。図5に示すように、システムがマイナーコレクションプロセス507を起動すると、まずポインタ位置特定プロセス602を起動する。図6に示すポインタ位置特定プロセス602は、新世代ヒープ402のオブジェクト作成領域410に割り当てた新規オブジェクトがアプリケーションプログラムからアクセス可能かどうかを識別する。次に、システムは生存オブジェクト再配置プロセス603を起動する。生存オブジェクト再配置プロセス603は、図8に示すオブジェクト生存率算出プロセス802により、オブジェクトの生存率を算出する。オブジェクト生存率はオブジェクト作成領域410のメモリサイズに対するオブジェクト作成領域410に割り当てた新規オブジェクトのうち生存するオブジェクトの比率である。図10に示すように、1回目のマイナーコレクションのオブジェクト生存率は50%、すなわちオブジェクト作成領域410の新規オブジェクトのうち半分がアクセス可能、であるから、図4の管理領域403にオブジェクト生存率を記録する。
【0063】
次に、オブジェクト生存率比較プロセス803は、図4の管理領域403に記録したオブジェクト生存率と図4に示すヒープメモリ400の管理領域403に記録しているオブジェクト生存率の閾値とを比較する。オブジェクト生存率の閾値は、図10に示すようにプログラムの実行開始時にプログラマにより75%と設定されているため、1回目のマイナーコレクションではオブジェクト生存率は閾値以下である。閾値以下であるため、比較結果はNOとなる。そして、プロセス805により、従来の技術と同様な方法でオブジェクト作成領域410の生存オブジェクトをエイジング領域411に再配置する。エイジング領域411に再配置した生存オブジェクトは数マイナーコレクションサイクル後、旧世代ヒープ401に再配置される。
【0064】
生存オブジェクト再配置プロセス603の実行後は、再配置先のオブジェクトをアプリケーションプログラムがアクセスできるように、図6に示すポインタ位置更新プロセス604を用いて、生存オブジェクトのポインタ位置を更新して1回目のマイナーコレクションプロセス507を終了する。その後、プロセス502によりオブジェクトをヒープに割り当て、メモリ管理プロセスを終了する。
【0065】
システムがプログラムからのメモリ割り当て要求に応答すると、オブジェクトにメモリブロックが割り当てられ、プログラムは次の処理を行うことができる。プログラムが次の処理において再度メモリ割り当て要求をシステムに発行すると、システムは再度メモリ管理プロセスを起動し、同様の処理を行う。メモリ管理プロセスはオブジェクト割り当てプロセス502により新規オブジェクトをヒープメモリに割り当てる。プロセス503において割り当てるメモリブロックが不足すると、新世代ヒープには空きがあるため、1回目のマイナーコレクションと同様に、マイナーコレクションプロセス507を起動する。図10に示すように2回目のマイナーコレクションでも、オブジェクト生存率は50%であり、一方オブジェクト生存率の閾値は75%であるため、生存オブジェクト再配置プロセス603では、図8に示すプロセス805により従来の技術と同様にオブジェクト作成領域410の生存オブジェクトをエイジング領域411に再配置して、2回目のマイナーコレクションを終了する。
【0066】
続いてプログラムがメモリ割り当て要求をシステムに発行すると、システムは再度メモリ管理プロセスを起動する。図5に示すメモリ管理プロセスはオブジェクト割り当てプロセス502により新規オブジェクトをオブジェクト作成領域411に割り当てる。システムは、オブジェクト作成領域411がいっぱいになると、ガベージコレクションプロセス506を起動する。新世代ヒープにはまだ空きがあるため、3回目のマイナーコレクションプロセス507を起動する。3回目のマイナーコレクションプロセス507では、最初に図6に示すポインタ位置特定プロセス602により生存オブジェクトのポインタ位置を特定する。次に、生存オブジェクト再配置プロセス603を行う。
【0067】
生存オブジェクト再配置プロセス603では、図8に示すオブジェクト生存率算出プロセス802においてオブジェクト生存率を算出する。図10に示すように、3回目のマイナーコレクションでは、オブジェクト生存率は90%である。
【0068】
オブジェクト生存率比較プロセス703は、プロセス803により、プロセス802で求めたオブジェクト生存率と閾値Xを比較する。オブジェクト生存率は90%、オブジェクト生存率の閾値Xは75%であり、比較結果はYESとなる。そこで、プロセス804において、オブジェクト作成領域410の生存オブジェクトを隣接するエイジング領域411ではなく、旧世代ヒープ401に再配置する。旧世代ヒープ401に再配置したオブジェクトは、図5に示すメジャーコレクションプロセス508が起動されるまでは再配置の対象にはならない。その後、図6に示すポインタ位置更新プロセス604により再配置したオブジェクトのポインタ位置を更新して、マイナーコレクションプロセス507を終了し、メモリ管理プロセスを終了する。図10に示すようにプログラムの処理が進むにつれ、マイナーコレクションプロセス507も複数回起動するが、3回目のマイナーコレクションから10回目のマイナーコレクションにおいては、継続してオブジェクト生存率が閾値を超えるため、図8に示す生存オブジェクト再配置プロセス704では、プロセス804によりオブジェクト作成領域410の生存オブジェクトを旧世代ヒープ401に直接再配置する。11回目のマイナーコレクションでは、オブジェクト生存率が閾値よりも低い。図8に示すプロセス803の比較結果はNOとなるため、生存オブジェクト再配置プロセス704のプロセス805により、オブジェクト作成領域410内の生存オブジェクトを隣接するエイジング領域411に再配置する。エイジング領域411に再配置したオブジェクトは、従来の技術と同様な方法を用いて数マイナーコレクションサイクルの後、旧世代ヒープ401に再配置される。
【0069】
本発明の実施の形態によれば、世代別ガベージコレクションを用いたヒープメモリの管理方法において、マイナーコレクションを行う場合に、生存するオブジェクトの比率が高い場合には生存オブジェクトをマイナーコレクションの対象となるオブジェクト作成領域から旧世代ヒープに直接再配置することにより、生存オブジェクトが多い場合に問題となるエイジング領域から旧世代ヒープへのオブジェクト再配置により発生するコピー処理を削減することができる。また、旧世代ヒープへ直接再配置するための条件をプログラマが実行時パラメータとして設定することができるため、ソースプログラムを再コーディングしなくても、プログラムに最適な閾値を設定することができ、プログラム開発コストを削減し、かつプログラムの処理時間を削減することができる。以上が本発明にかかわる実施の形態である。
【0070】
(実施の形態の変形例1)
本発明の変形例では、図7のオブジェクト生存率比較プロセス703において、生存オブジェクトの再配置先をオブジェクト生存率だけでなく継続カウンタに従って決定する。
【0071】
継続カウンタには、複数回のマイナーコレクションに渡ってオブジェクト生存率が閾値を超えた回数を記録する。また、何回か継続してオブジェクト生存率が閾値を超えた場合にのみ、生存オブジェクトの再配置先を変更するように継続カウンタの閾値を設定する。継続カウンタおよび継続カウンタの閾値はそれぞれ図4のヒープメモリ400の管理領域403に保持する。継続カウンタの閾値はプログラムの実行時に実行時パラメータとして設定できるようにする。また、継続カウンタの値は0で初期化し、またプログラマが継続カウンタの閾値を設定しない場合には、あらかじめ0に設定しておく。
【0072】
変形例1では、図2に示すヒープメモリを3世代に論理分割した世代ヒープを用いる。システムはヒープメモリを、第0世代、第1世代、第2世代の3つに分割して管理する。第0世代ヒープは図4のオブジェクト作成領域410に対応し、最新のオブジェクトを割り当てる。第1世代ヒープは図4のエイジング領域411に対応し、第0世代ヒープで生存したオブジェクトを再配置する。第2世代ヒープは旧世代ヒープに対応し、最も古いオブジェクトを割り当てる。マイナーコレクションは通常第0世代ヒープに対して行われ、第2世代ヒープはマイナーコレクションの対象にはならない。
【0073】
図11に、マイナーコレクションプロセス507における生存オブジェクト再配置プロセス603の詳細フローを示す。図6の生存オブジェクト再配置プロセス603は、まずプロセス1102でオブジェクト生存率を算出する。オブジェクト生存率は図8に示したオブジェクト生存率算出プロセス802と同じ方法で算出する。次にプロセス1103は、オブジェクト生存率とオブジェクト生存率の閾値Xを比較する。オブジェクト生存率が閾値Xを超えた場合には、プロセス1104において、継続カウンタNCに1を加算する。加算の結果、継続カウンタNCの上限を超える場合には、継続カウンタNCの値は上限値のまま維持する。次に、プロセス1106において、継続カウンタNCの値とカウンタ閾値Yを比較する。比較結果より、オブジェクト生存率が閾値Xを連続Y回超えた場合にはYESとなり、プロセス1107により、第0世代ヒープの生存オブジェクトを第2世代ヒープに再配置する。プロセス1103の結果、オブジェクト生存率が閾値Xよりも小さい場合には、プロセス1105により継続カウンタNCの値をリセットし、プロセス1108により従来の技術と同様に第0世代の生存オブジェクトを第1世代ヒープに再配置する。プロセス1103において、オブジェクト生存率が閾値Xを超えるがプロセス1106において継続カウンタNCがカウンタ閾値Y以下である場合には、比較結果がNOとなり、プロセス1108により従来の技術と同様な方法で第0世代の生存オブジェクトを第1世代ヒープに再配置する。システムは、Nマイナーコレクションサイクル後(通常Nは1から4までの整数値)、プロセス1108により再配置した第1世代ヒープの生存オブジェクトを第2世代ヒープに再配置する。プロセス1107により再配置した第2世代ヒープのオブジェクトはメジャーコレクションプロセスが起動されるまでは再配置の対象にはならない。
【0074】
本発明の実施形態の変形例1では、生存オブジェクトの再配置先をオブジェクト生存率と継続カウンタにより変更する。
【0075】
図13(a)は、プログラム実行時のマイナーコレクション回数とオブジェクト生存率の関係を示す。プログラムを実行し、プログラムがシステムにメモリ割り当て要求を発行すると、システムは順次メモリ割り当てプロセスにより新規オブジェクトをヒープメモリに割り当てる。図13(a)に示すプログラムでは、1、2回目のマイナーコレクションにおけるオブジェクト生存率は50%であり、3回目から10回目のマイナーコレクションにおけるオブジェクト生存率は90%である。プログラマはプログラム実行時に実行時パラメータによりオブジェクト生存率の閾値Xを75%、カウンタ閾値Yを3に設定する。
【0076】
3回目のマイナーコレクションまでは、オブジェクト生存率は閾値Xよりも低いため、図11のプロセス1103の結果はNOであり、プロセス1108により従来手法と同様に、第0世代の生存オブジェクトは第1世代に再配置される。3回目のマイナーコレクションでは、オブジェクト生存率は90%であり閾値Xを超えている。プロセス1103の比較結果はYESとなり、プロセス1104において、継続カウンタNCの値をインクリメントする。継続カウンタNCの値は1である。プロセス1106では、継続カウンタNCの値とカウンタ閾値を比較する。カウンタ閾値Yは3であるため、比較結果はNOとなり、プロセス1108により従来と同じように第0世代ヒープの生存オブジェクトを第1世代ヒープに再配置する。4回目、5回目のマイナーコレクションも3回目と同様に行う。一方、6回目から10回目のマイナーコレクションでは、オブジェクト生存率が90%であり閾値Xを超える。プロセス1103の比較結果はYESとなる。プロセス1104において継続カウンタに1を加算する。6回目のマイナーコレクションでは、継続カウンタNCの値は4となる。7回目ではNCは5、8回目のNCは6となる。プロセス1106では、継続カウンタNCの値とカウンタ閾値Yを比較する。比較結果はYESとなり、プロセス1107により、従来技術とは異なり、第0世代ヒープの生存オブジェクトを第2世代ヒープに再配置する。生存オブジェクトの再配置先を、オブジェクト生存率と継続カウンタの両方を用いて制御することで、より効率よくヒープメモリを管理できる。本発明の実施の形態では、オブジェクト生存率が一回でも閾値を超えると生存オブジェクトの再配置先を変更していたが、変形例1では継続してオブジェクト生存率が高いプログラムの場合に生存オブジェクトの再配置先を変更するため、より効率よくヒープメモリを管理できる。
【0077】
(実施の形態の変形例2)
本発明の変形例1では、図7のオブジェクト生存率比較プロセス703において、生存オブジェクトの再配置先をオブジェクト生存率だけでなく継続カウンタに従って決定していたが、本発明の変形例2では、オブジェクト生存率の閾値を2種類設ける。
【0078】
オブジェクト生存率の閾値の一方は、継続カウンタの閾値を超えた場合にのみ生存オブジェクトの再配置先を変更するために使用する。もう一方は、本発明の実施例と同様、オブジェクト生存率が一回でも閾値を超えた場合に、継続カウンタの値には関係なく生存オブジェクトの再配置先を変更するために使用する。
【0079】
オブジェクト生存率に関する2つの閾値および継続カウンタに関するカウンタ閾値は、それぞれプログラムの実行時に実行時パラメータとして設定する。また、それぞれの閾値はシステムが初期値を設定する。
【0080】
本発明の変形例2では、システムが図4に示すヒープメモリを使用する。プログラムが新規オブジェクトにメモリブロックを割り当てる場合、システムに対してメモリ割り当て要求を発行する。システムは、メモリ割り当て要求を受け、新規オブジェクトを図4に示す新世代ヒープ402のオブジェクト作成領域410に割り当てる。オブジェクト作成領域410がいっぱいになると、システムはマイナーコレクションプロセス507を起動する。
【0081】
図12に、マイナーコレクションプロセス507における生存オブジェクト再配置プロセス603の詳細フローを示す。最初にプロセス1202において、オブジェクト生存率を算出する。オブジェクト生存率は図8に示したオブジェクト生存率を算出するプロセス802と同じ方法で算出する。次にプロセス1203においてオブジェクト生存率と閾値Xを比較する。オブジェクト生存率が閾値Xを超えた場合には、プロセス1204において、継続カウンタNCに1を加算する。NCの値は、プログラム実行開始時に0に初期化する。加算の結果、継続カウンタ値がカウンタの上限を超える場合には、継続カウンタNCの値を上限値にセットする。次に、プロセス1206において継続カウンタNCの値とカウンタ閾値Yを比較する。比較結果より、オブジェクト生存率が閾値Xを連続Y回超えた場合には、プロセス1208によりオブジェクト作成領域411の生存オブジェクトを旧世代ヒープに再配置する。プロセス1203において、オブジェクト生存率が閾値Xよりも小さい場合には、プロセス1205により継続カウンタNCの値をリセットし、プロセス1208により従来の技術と同様にオブジェクト作成領域410の生存オブジェクトをエイジング領域411に再配置する。エイジング領域411に再配置したオブジェクトは、Nマイナーコレクションサイクル後(通常Nは1から4までの整数値)に旧世代ヒープ401に再配置される。プロセス1206において、オブジェクト生存率が閾値Xを超えるが継続カウンタNCがカウンタ閾値Y以下である場合には、プロセス1207においてオブジェクト生存率と閾値Zを比較する。比較の結果、オブジェクト生存率が閾値Zを超える場合には、プロセス1208によりオブジェクト作成領域410の生存オブジェクトを直接旧世代ヒープ401に再配置する。旧世代ヒープ401に再配置したオブジェクトは、メジャーコレクションプロセス508が起動されるまで再配置の対象にはならない。プロセス1207において、オブジェクト生存率と閾値Zを比較し、オブジェクト生存率が閾値Z以下である場合には、プロセス1209により従来の技術と同様な方法で新世代ヒープ402のオブジェクト作成領域410の生存オブジェクトを新世代ヒープ402のエイジング領域411に再配置し、処理を終了する。
【0082】
本発明の実施形態の変形例2では、生存オブジェクトの再配置プロセスを2種類のオブジェクト生存率の閾値と継続カウンタの閾値により制御することが新規である。
【0083】
図13(b)は、プログラム実行時のマイナーコレクション回数とオブジェクト生存率の関係を示す。プログラムを実行し、プログラムがシステムにメモリ割り当て要求を発行すると、システムは順次メモリ割り当てプロセスにより新規オブジェクトを新世代ヒープのオブジェクト作成領域410に割り当てる。新規オブジェクトを割り当てたメモリブロックが一定のサイズになるか、一定の時間が経過すると、マイナーコレクションプロセスが起動される。図13(b)に示すプログラムの例では、1回目のマイナーコレクションにおけるオブジェクト生存率は50%であり、2回目のマイナーコレクションにおけるオブジェクト生存率は95%である。3回目と4回目のマイナーコレクションのオブジェクト生存率は再度50%になり、5回目から10回目のマイナーコレクションにおけるオブジェクト生存率は80%である。プログラマはプログラムの実行時パラメータでオブジェクト生存率の閾値Xを75%、閾値Zを90%、カウンタ閾値Yを2に設定する。
【0084】
1回目のマイナーコレクションでは、オブジェクト生存率は閾値Xよりも小さいため、図12に示すプロセス1203による比較結果はNOとなり、プロセス1209によって、従来の技術と同様な方法でオブジェクト作成領域410の生存オブジェクトをエイジング領域に再配置する。エイジング領域に再配置した生存オブジェクトは、Nマイナーコレクションサイクル(Nは1から4までの整数値)後に旧世代ヒープに再配置される。2回目のマイナーコレクションでは、オブジェクト生存率が95%であり閾値Zを超えている。図12のプロセス1203による比較結果はYES、継続カウンタ値は1、その結果プロセス1206による比較結果はNO、プロセス1207による比較結果はYESとなる。オブジェクト生存率が第2の閾値Zを超える場合には継続カウンタに関係なく生存オブジェクトの再配置先を変更するため、プロセス1208によりオブジェクト作成領域410の生存オブジェクトを旧世代ヒープに再配置する。旧世代ヒープに再配置したオブジェクトは、プログラム処理が進みメジャーコレクションプロセスが起動されるまでは再配置されない。3回目および4回目のマイナーコレクションでは、オブジェクト生存率が50%であり閾値Xより小さい。この場合は、プロセス1203による比較結果はNOとなり、カウンタの値はリセットされ、プロセス1209によりオブジェクト作成領域410の生存オブジェクトを従来の技術と同様な方法でエイジング領域411に再配置する。5回目のマイナーコレクションでは、オブジェクト生存率は80%になる。プロセス1203により、オブジェクト生存率と閾値Xを比較する。その結果、オブジェクト生存率は閾値Xを超えているため、プロセス1207によりオブジェクト生存率と閾値Zを比較する。オブジェクト生存率は80%、閾値Zは90%である。比較結果はNOとなるため、プロセス1209により、新世代ヒープ402のオブジェクト作成領域410の生存オブジェクトを従来の方法と同様な方法で新世代ヒープ402のエイジング領域411に再配置する。一方、7回目から10回目のマイナーコレクションでは、常にオブジェクト生存率が80%であり閾値Xを超えているため、プロセス1203の比較結果はYESとなる。また毎回閾値Xを超えるため、継続カウンタの値は3、4、5のように増加する。次にプロセス1206において継続カウンタの値とカウンタ閾値を比較する。カウンタ閾値Yは2であるから、継続カウンタNCの値がカウンタ閾値Yを超え、比較結果はYESとなる。プロセス1208によりオブジェクト作成領域410の生存オブジェクトを旧世代ヒープ401に再配置する。
【0085】
変形例2では、オブジェクト生存率の閾値を2種類設け、突発的にオブジェクトの生存率が高くなる場合と、定常的にオブジェクト生存率が高い場合それぞれのケースに対応して、生存オブジェクトの再配置先を変更することが出来るため,プログラムの処理内容に合った木目細かなヒープメモリ管理が可能になる。
【0086】
(実施の形態の変形例3)
本発明の実施の形態および変形例1および変形例2では、オブジェクト生存率および継続カウンタの閾値を、プログラマがプログラム実行時に実行時パラメータとして設定する。変形例3では、プログラマが図3のステップ302のプログラム実行環境を構築する時に閾値を設定する。あるいは、プログラマが図3のステップ304における静的パラメータの設定において閾値を設定してもよい。あるいはあらかじめ閾値を設定したプログラム実行環境をプログラマに提供することも可能である。また、プログラム実行中に閾値の設定を変更することも考えられる。
【0087】
(実施の形態の変形例4)
本発明の変形例4では、図6の生存オブジェクト再配置プロセス603において、オブジェクト生存率が閾値を超えた場合には、生存オブジェクトを再配置せず、オブジェクト生存率が閾値以下の場合には従来技術と同様な方法で生存オブジェクトを再配置する。
【0088】
図14に生存オブジェクト再配置プロセスの詳細フローを示す。本発明の変形例4では、生存オブジェクト再配置プロセス704の動作が異なる。プロセス803において、プロセス802で算出したオブジェクト生存率と閾値Xを比較する。オブジェクト生存率が閾値Xを超える場合、比較結果がYESとなる。その場合には、プロセス1401により新世代ヒープ402のオブジェクト作成領域410の生存オブジェクトを移動せずに処理を終了する。一方、プロセス803における比較結果がNOの場合には、プロセス1402により、従来の技術と同様な方法でオブジェクト作成領域410からエイジング領域411に再配置する。プロセス1402により再配置した生存オブジェクトはNマイナーコレクションサイクル後(通常Nは1から4までの整数値)に旧世代ヒープ401に再配置される。
【0089】
以上のように、オブジェクト生存率が閾値よりも高い場合には、新世代ヒープのオブジェクト作成領域の生存オブジェクトを再配置しないため、再配置に伴うコピー処理を削減できる。オブジェクト生存率が高い場合には作成領域から他領域への再配置を行わないので作成領域がいっぱいになってオブジェクトにメモリ領域を割り当てられなくなることはありうる。その場合は、マイナーコレクションではなく、メジャーコレクションを行い空き領域を作成することになる。
【0090】
本発明の変形例4では、世代別ヒープを新旧2世代で構成する例を示したが、図2に示す3世代で構成する世代ヒープを用いても同様に実現できる。この場合、オブジェクト作成領域を0世代に、エイジング領域を1世代に、旧世代ヒープを2世代に対応させればよい。
【0091】
また、本発明の変形例4では閾値をオブジェクト生存率でのみ決定する例を示したが、変形例1および変形例2で示した方法で決定してもよい。
【0092】
さらに、本発明の変形例4では、オブジェクト生存率をマイナーコレクション間で新規オブジェクトを割り当てた新世代ヒープのメモリサイズと新規オブジェクトのうち生存するオブジェクトが割り当てられたメモリサイズの比率として算出している。オブジェクト生存率は、生存オブジェクトが割り当てられるメモリのサイズあるいは生存オブジェクト数でもよい。同様に、閾値もオブジェクト生存率と同様に比率として設定しているが、生存オブジェクトが割り当てられるメモリのサイズあるいは生存オブジェクト数でもよい。また、本発明の実施の形態では、現在マイナーコレクションの対象となるヒープメモリに関する生存オブジェクトの情報に基づきオブジェクト生存率を算出しているが、過去の履歴に基づいてオブジェクト生存率を算出してもよい。その場合は、生存オブジェクト再配置プロセス603においてオブジェクト生存率算出プロセス702を行わなくとも、ヒープメモリの管理領域403に記録したオブジェクト生存率に基づいて生存オブジェクトを再配置すればよい。
【0093】
本発明の実施の形態によれば、世代別ガベージコレクションのマイナーコレクションにおいて、アプリケーションプログラムからアクセス可能と識別される新規オブジェクトが多い場合には、新規オブジェクトを旧世代ヒープにダイレクトに再配置することにより、途中のコピー処理を削減し、アプリケーションプログラム本来の処理への影響を少なくして、アプリケーションプログラムの性能を向上できる。
【0094】
また、アプリケーションプログラマがプログラムの実行時にオブジェクトの再配置先を変更するための閾値を明示的に設定することができるため、アプリケーション毎に最適な閾値を設定でき、ソースプログラムを改変しなくても、アプリケーションプログラムの処理時間を削減でき、プログラム開発コストを削減できる。
【0095】
更に、第4の公知例と比較すると、本発明の実施の形態ではオブジェクト生存割合が高い場合にはマイナーコレクション時に生成領域の生存オブジェクトを直接旧世代ヒープに再配置することで新世代ヒープへのコピー処理を削減し、コピー処理がプログラム本来の処理に及ぼす影響を小さくして、アプリケーションプログラムの処理性能を改善できる。更には、オブジェクト指向プログラミングスタイルではプログラマがメモリ管理を行わないことを特徴とするため、プログラマが閾値をアドレスとして設定することは出来ない。一方、本発明の実施の形態ではアドレスとは独立したオブジェクトの生存割合と呼ぶ閾値を設け、プログラム実行時にプログラマが実行時パラメータとして閾値を設定する手段を持つことでソースプログラムを変更することなくアプリケーションプログラムの処理性能を改善できる。
【0096】
【発明の効果】
本発明によればヒープのガベージコレクションにおけるコピー回数を削減し、アプリケーションの処理性能を改善することが出来る。
【図面の簡単な説明】
【図1】本発明の従来の技術における世代別ガベージコレクションのヒープメモリの概略構成1を示す図である。
【図2】本発明の従来の技術における世代別ガベージコレクションのヒープメモリの概略構成2を示す図である。
【図3】本発明の実施の形態におけるプログラマによるプログラム開発フローを示す図である。
【図4】本発明の実施の形態におけるヒープメモリの概略構成を示す図である。
【図5】本発明の実施の形態におけるメモリ管理プロセスの処理フローを示す図である。
【図6】本発明の実施の形態におけるマイナーコレクションプロセスの処理フローを示す図である。
【図7】本発明の実施形態における、マイナーコレクションプロセスの生存オブジェクト再配置プロセスの概略フローを示す図である。
【図8】本発明の実施の形態におけるオブジェクト生存率の閾値を利用した生存オブジェクト再配置プロセスの詳細フローを示す図である。
【図9】本発明の実施の形態における、ガベージコレクションプロセスのメジャープロセスの処理フローを示す図である。
【図10】本発明の実施形態における、プログラム実行時のマイナーコレクション回数とオブジェクト生存率の推移を示す図である。
【図11】本発明の実施形態の変形例1におけるオブジェクト生存率の閾値と継続カウンタの閾値を用いた生存オブジェクト再配置プロセスの詳細フローを示す図である。
【図12】本発明の実施形態の変形例2における生存オブジェクト再配置プロセスの詳細フローを示す図である。
【図13】本発明の実施形態の変形例における、プログラム実行時のマイナーコレクション回数とオブジェクト生存率の推移を示す図である。
【図14】本発明の実施形態の変形例4におけるオブジェクト生存率の閾値を利用した生存オブジェクト再配置プロセスの詳細フローを示す図である。
【符号の説明】
100…ヒープメモリ、101…旧世代ヒープ、102…新世代ヒープ、110…オブジェクト作成領域、111…エイジング領域、403…管理領域、420…ヒープ管理情報、421…実行時パラメータ、502…オブジェクト割り当てプロセス、506…ガベージコレクションプロセス、507…マイナーガベージコレクションプロセス、508…メジャーガベージコレクションプロセス、602…ポインタ位置特定プロセス、603…生存オブジェクト再配置プロセス、604…ポインタ位置更新プロセス、702…オブジェクト生存率算出プロセス、703…オブジェクト生存率比較プロセス、704…生存オブジェクト再配置プロセス。

Claims (4)

  1. オブジェクトをその上に生成し、必要に応じて該オブジェクトを保持するためのヒープメモリの管理方法であって、
    前記ヒープメモリを論理的に新世代ヒープと旧世代ヒープとに分割して管理し、
    新規オブジェクトに前記新世代ヒープ内のメモリブロックを割り当て、
    前記新世代ヒープに対してガベージコレクションを行うマイナーコレクションを繰り返し実行し、
    所定回数のマイナーコレクションを経てもまだ生存と判断されるオブジェクトを前記新世代ヒープか前記旧世代ヒープに再配置し、
    前記マイナーコレクションを複数回実行したことをひとつの条件に、前記旧世代ヒープを少なくとも含むヒープに対してガベージコレクションを行うメジャーコレクションを実行し、
    各マイナーコレクションは、
    前回のマイナーコレクションの実行以降に生成した新規オブジェクトの生存率を算出し、
    該生存率が所定の閾値以下なら、前記新規オブジェクトのうちの生存オブジェクトを前記新世代ヒープ内のエイジング領域に再配置し、
    該生存率が前記閾値より高ければ、前記新規オブジェクトのうちの生存オブジェクトを前記旧世代ヒープに直接再配置するステップを有するヒープメモリの管理方法。
  2. 前記生存率は、前回のマイナーコレクションの実行以降に生成した新規オブジェクトを割り当てた新世代ヒープのメモリサイズと、該新規オブジェクトのうち生存するオブジェクトが割り当てられたメモリサイズとの比率であることを特徴とする請求項1記載のヒープメモリ管理方法。
  3. 前記生存率は、前回のマイナーコレクションの実行以降に生成した新規オブジェクトのうちの生存するオブジェクトの数であることを特徴とする請求項1記載のヒープメモリ管理方法。
  4. オブジェクトをその上に生成し、必要に応じて該オブジェクトを保持するためのヒープメモリの管理方法であって、
    前記ヒープメモリを論理的に新世代ヒープと旧世代ヒープとに分割して管理し、
    新規オブジェクトに前記新世代ヒープ内のメモリブロックを割り当て、
    前記新世代ヒープに対してガベージコレクションを行うマイナーコレクションを繰り返し実行し、
    所定回数のマイナーコレクションを経てもまだ生存と判断されるオブジェクトを前記新世代ヒープか前記旧世代ヒープに再配置し、
    前記マイナーコレクションを複数回実行したことをひとつの条件に、前記旧世代ヒープを少なくとも含むヒープに対してガベージコレクションを行うメジャーコレクションを実行し、
    各マイナーコレクションは、
    前回のマイナーコレクションの実行以降に生成した新規オブジェクトの生存率を算出し、
    過去のマイナーコレクションの実行の時から前記新規オブジェクトの生存率が継続して第1の閾値を超えた回数を継続カウンタに記録し、
    継続カウンタの値が第2の閾値を超えた場合に、前記新規オブジェクトのうちの生存オブジェクトを前記旧世代ヒープに直接再配置し、それ以外の場合は前記新規オブジェクトのうちの生存オブジェクトを前記新世代ヒープ内のエイジング領域に再配置するステップを有するヒープメモリの管理方法。
JP2002132324A 2002-05-08 2002-05-08 ヒープメモリ管理方法およびそれを用いた計算機システム Expired - Fee Related JP4079684B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2002132324A JP4079684B2 (ja) 2002-05-08 2002-05-08 ヒープメモリ管理方法およびそれを用いた計算機システム
US10/339,338 US7167881B2 (en) 2002-05-08 2003-01-10 Method for heap memory management and computer system using the same method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002132324A JP4079684B2 (ja) 2002-05-08 2002-05-08 ヒープメモリ管理方法およびそれを用いた計算機システム

Publications (2)

Publication Number Publication Date
JP2003323336A JP2003323336A (ja) 2003-11-14
JP4079684B2 true JP4079684B2 (ja) 2008-04-23

Family

ID=29397386

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002132324A Expired - Fee Related JP4079684B2 (ja) 2002-05-08 2002-05-08 ヒープメモリ管理方法およびそれを用いた計算機システム

Country Status (2)

Country Link
US (1) US7167881B2 (ja)
JP (1) JP4079684B2 (ja)

Families Citing this family (127)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7197521B2 (en) * 2003-11-21 2007-03-27 Intel Corporation Method and system performing concurrently mark-sweep garbage collection invoking garbage collection thread to track and mark live objects in heap block using bit vector
US7114045B1 (en) * 2003-12-23 2006-09-26 Sun Microsystems, Inc. Garbage collection with a dynamic window
US20050198088A1 (en) * 2004-03-03 2005-09-08 Sreenivas Subramoney Method and system for improving the concurrency and parallelism of mark-sweep-compact garbage collection
US7853628B1 (en) * 2004-04-09 2010-12-14 Oracle America, Inc. Selective promotion policy for generational garbage collectors
US7617264B1 (en) * 2004-04-15 2009-11-10 Sun Microsystems, Inc. Parallel remembered-set processing respecting popular-object detection
US7249235B2 (en) * 2004-06-21 2007-07-24 Oracle International Corporation Architecture for a scalable and user-extensible heap dump analysis tool
US7162605B2 (en) * 2004-06-24 2007-01-09 International Business Machines Corporation Method and system for obtaining memory usage information for a heap when a peak live count is updated
US7444484B2 (en) * 2004-06-24 2008-10-28 International Business Machines Corporation Method and system for determining memory usage of a heap
JP4589095B2 (ja) * 2004-12-14 2010-12-01 三菱電機株式会社 プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム
US7966607B1 (en) * 2004-12-22 2011-06-21 Oracle America, Inc. Method and apparatus for managing compiled methods in a unified heap
US20060161601A1 (en) * 2005-01-18 2006-07-20 Barrs John W Heap manager and application programming interface support for managing versions of objects
US7395386B2 (en) * 2005-01-18 2008-07-01 Lenovo (Singapore) Pte. Ltd. Method and apparatus for data versioning and recovery using delta content save and restore management
US20060161602A1 (en) * 2005-01-18 2006-07-20 Barrs John W Object based access application programming interface for data versioning
US20060161911A1 (en) * 2005-01-18 2006-07-20 Barrs John W Method and apparatus for managing versioning data in a network data processing system
US20060161912A1 (en) * 2005-01-18 2006-07-20 Barrs John W Infrastructure for device driver to monitor and trigger versioning for resources
US20060161751A1 (en) * 2005-01-18 2006-07-20 Barrs John W Virtual memory management infrastructure for monitoring deltas and supporting undo versioning in a paged memory system
US20060161576A1 (en) * 2005-01-18 2006-07-20 Barrs John W Method and apparatus for dimensional data versioning and recovery management
US7565645B2 (en) * 2005-01-18 2009-07-21 Lenovo (Singapore) Pte Ltd. Method and apparatus for marking code for data versioning
US20060161603A1 (en) * 2005-01-18 2006-07-20 Barrs John W Platform infrastructure to provide an operating system based application programming interface undo service
US8713524B2 (en) * 2005-04-06 2014-04-29 Microsoft Corporation Memory management configuration
US20060248103A1 (en) * 2005-04-29 2006-11-02 Cisco Technology, Inc. Method of detecting memory leaks in software applications
US20060253503A1 (en) * 2005-05-05 2006-11-09 International Business Machines Corporation Method and apparatus for aging a versioned heap system
US8701095B2 (en) * 2005-07-25 2014-04-15 Microsoft Corporation Add/remove memory pressure per object
US8234378B2 (en) * 2005-10-20 2012-07-31 Microsoft Corporation Load balancing in a managed execution environment
US7827373B2 (en) * 2005-10-31 2010-11-02 Honeywell International Inc. System and method for managing a short-term heap memory
US7599973B2 (en) * 2006-01-12 2009-10-06 Sun Microsystems, Inc. Method and apparatus for decreasing object copying by a generational, copying garbage collector
US7676511B2 (en) * 2006-01-27 2010-03-09 Sun Microsystems, Inc. Method and apparatus for reducing object pre-tenuring overhead in a generational garbage collector
US8949295B2 (en) 2006-09-21 2015-02-03 Vmware, Inc. Cooperative memory resource management via application-level balloon
US20080162709A1 (en) * 2006-12-27 2008-07-03 International Business Machines Corporation System for processing application protocol requests
US7774389B2 (en) * 2007-01-17 2010-08-10 Microsoft Corporation Optimized garbage collection techniques
JP5031470B2 (ja) * 2007-07-19 2012-09-19 株式会社日立製作所 メモリ管理方法、情報処理装置及びメモリ管理プログラム
US8868623B2 (en) * 2007-10-30 2014-10-21 International Business Machines Corporation Enhanced garbage collection in a multi-node environment
US8074025B2 (en) * 2007-12-11 2011-12-06 Intel Corporation Method and system for copying live entities of source blocks identified by source list for selected destination block to selected destination block of memory heap
US8245101B2 (en) 2007-12-27 2012-08-14 Sandisk Enterprise Ip Llc Patrol function used in flash storage controller to detect data errors
US8365041B2 (en) 2010-03-17 2013-01-29 Sandisk Enterprise Ip Llc MLC self-raid flash data protection scheme
US8583875B1 (en) 2010-07-13 2013-11-12 Vmware, Inc. Efficient readable ballooning of guest memory by backing balloon pages with a shared page
US8909982B2 (en) 2011-06-19 2014-12-09 Sandisk Enterprise Ip Llc System and method for detecting copyback programming problems
US8910020B2 (en) 2011-06-19 2014-12-09 Sandisk Enterprise Ip Llc Intelligent bit recovery for flash memory
US8938658B2 (en) 2011-11-07 2015-01-20 Sandisk Enterprise Ip Llc Statistical read comparison signal generation for memory systems
US9048876B2 (en) 2011-11-18 2015-06-02 Sandisk Enterprise Ip Llc Systems, methods and devices for multi-tiered error correction
US8954822B2 (en) 2011-11-18 2015-02-10 Sandisk Enterprise Ip Llc Data encoder and decoder using memory-specific parity-check matrix
US8924815B2 (en) 2011-11-18 2014-12-30 Sandisk Enterprise Ip Llc Systems, methods and devices for decoding codewords having multiple parity segments
US9852054B2 (en) 2012-04-30 2017-12-26 Vmware, Inc. Elastic caching for Java virtual machines
US10152409B2 (en) 2012-04-30 2018-12-11 Vmware, Inc. Hybrid in-heap out-of-heap ballooning for java virtual machines
US8694562B2 (en) * 2012-05-22 2014-04-08 Microsoft Corporation Generational garbage collection for a pool-based heap
US9015203B2 (en) * 2012-05-31 2015-04-21 Vmware, Inc. Balloon object feedback for Java Virtual Machines
US9940228B2 (en) 2012-06-14 2018-04-10 Vmware, Inc. Proactive memory reclamation for java virtual machines
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US9501398B2 (en) 2012-12-26 2016-11-22 Sandisk Technologies Llc Persistent storage device with NVRAM for staging writes
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9239751B1 (en) 2012-12-27 2016-01-19 Sandisk Enterprise Ip Llc Compressing data from multiple reads for error control management in memory systems
US9003264B1 (en) 2012-12-31 2015-04-07 Sandisk Enterprise Ip Llc Systems, methods, and devices for multi-dimensional flash RAID data protection
US9454420B1 (en) 2012-12-31 2016-09-27 Sandisk Technologies Llc Method and system of reading threshold voltage equalization
US9214965B2 (en) 2013-02-20 2015-12-15 Sandisk Enterprise Ip Llc Method and system for improving data integrity in non-volatile storage
US9329928B2 (en) 2013-02-20 2016-05-03 Sandisk Enterprise IP LLC. Bandwidth optimization in a non-volatile memory system
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9236886B1 (en) 2013-03-15 2016-01-12 Sandisk Enterprise Ip Llc Universal and reconfigurable QC-LDPC encoder
US9244763B1 (en) 2013-03-15 2016-01-26 Sandisk Enterprise Ip Llc System and method for updating a reading threshold voltage based on symbol transition information
US9092350B1 (en) 2013-03-15 2015-07-28 Sandisk Enterprise Ip Llc Detection and handling of unbalanced errors in interleaved codewords
US9367246B2 (en) 2013-03-15 2016-06-14 Sandisk Technologies Inc. Performance optimization of data transfer for soft information generation
US9009576B1 (en) 2013-03-15 2015-04-14 Sandisk Enterprise Ip Llc Adaptive LLR based on syndrome weight
US9136877B1 (en) 2013-03-15 2015-09-15 Sandisk Enterprise Ip Llc Syndrome layered decoding for LDPC codes
US10049037B2 (en) 2013-04-05 2018-08-14 Sandisk Enterprise Ip Llc Data management in a storage system
US9170941B2 (en) 2013-04-05 2015-10-27 Sandisk Enterprises IP LLC Data hardening in a storage system
EP2984570A4 (en) * 2013-04-09 2017-11-08 Emc Corporation Multiprocessor system with independent direct access to bulk solid state memory resources
US9015429B2 (en) * 2013-04-18 2015-04-21 Xerox Corporation Method and apparatus for an efficient hardware implementation of dictionary based lossless compression
US9159437B2 (en) 2013-06-11 2015-10-13 Sandisk Enterprise IP LLC. Device and method for resolving an LM flag issue
US9384126B1 (en) 2013-07-25 2016-07-05 Sandisk Technologies Inc. Methods and systems to avoid false negative results in bloom filters implemented in non-volatile data storage systems
US9043517B1 (en) 2013-07-25 2015-05-26 Sandisk Enterprise Ip Llc Multipass programming in buffers implemented in non-volatile data storage systems
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US9652766B1 (en) * 2013-08-22 2017-05-16 Amazon Technologies, Inc. Managing data stored in memory locations having size limitations
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9235509B1 (en) 2013-08-26 2016-01-12 Sandisk Enterprise Ip Llc Write amplification reduction by delaying read access to data written during garbage collection
US9519577B2 (en) 2013-09-03 2016-12-13 Sandisk Technologies Llc Method and system for migrating data between flash memory devices
US9442670B2 (en) 2013-09-03 2016-09-13 Sandisk Technologies Llc Method and system for rebalancing data stored in flash memory devices
US9158349B2 (en) 2013-10-04 2015-10-13 Sandisk Enterprise Ip Llc System and method for heat dissipation
US9323637B2 (en) 2013-10-07 2016-04-26 Sandisk Enterprise Ip Llc Power sequencing and data hardening architecture
US9442662B2 (en) 2013-10-18 2016-09-13 Sandisk Technologies Llc Device and method for managing die groups
US9298608B2 (en) 2013-10-18 2016-03-29 Sandisk Enterprise Ip Llc Biasing for wear leveling in storage systems
US9436831B2 (en) 2013-10-30 2016-09-06 Sandisk Technologies Llc Secure erase in a memory device
US9263156B2 (en) 2013-11-07 2016-02-16 Sandisk Enterprise Ip Llc System and method for adjusting trip points within a storage device
US9244785B2 (en) 2013-11-13 2016-01-26 Sandisk Enterprise Ip Llc Simulated power failure and data hardening
US9152555B2 (en) 2013-11-15 2015-10-06 Sandisk Enterprise IP LLC. Data management with modular erase in a data storage system
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9122636B2 (en) 2013-11-27 2015-09-01 Sandisk Enterprise Ip Llc Hard power fail architecture
US9280429B2 (en) 2013-11-27 2016-03-08 Sandisk Enterprise Ip Llc Power fail latching based on monitoring multiple power supply voltages in a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
US9250676B2 (en) 2013-11-29 2016-02-02 Sandisk Enterprise Ip Llc Power failure architecture and verification
US9092370B2 (en) 2013-12-03 2015-07-28 Sandisk Enterprise Ip Llc Power failure tolerant cryptographic erase
US9235245B2 (en) 2013-12-04 2016-01-12 Sandisk Enterprise Ip Llc Startup performance and power isolation
US9129665B2 (en) 2013-12-17 2015-09-08 Sandisk Enterprise Ip Llc Dynamic brownout adjustment in a storage device
US9549457B2 (en) 2014-02-12 2017-01-17 Sandisk Technologies Llc System and method for redirecting airflow across an electronic assembly
US9497889B2 (en) 2014-02-27 2016-11-15 Sandisk Technologies Llc Heat dissipation for substrate assemblies
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US9519319B2 (en) 2014-03-14 2016-12-13 Sandisk Technologies Llc Self-supporting thermal tube structure for electronic assemblies
US9485851B2 (en) 2014-03-14 2016-11-01 Sandisk Technologies Llc Thermal tube assembly structures
US9348377B2 (en) 2014-03-14 2016-05-24 Sandisk Enterprise Ip Llc Thermal isolation techniques
US9454448B2 (en) 2014-03-19 2016-09-27 Sandisk Technologies Llc Fault testing in storage devices
US9390814B2 (en) 2014-03-19 2016-07-12 Sandisk Technologies Llc Fault detection and prediction for data storage elements
US9448876B2 (en) 2014-03-19 2016-09-20 Sandisk Technologies Llc Fault detection and prediction in storage devices
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9390021B2 (en) 2014-03-31 2016-07-12 Sandisk Technologies Llc Efficient cache utilization in a tiered data structure
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US9703491B2 (en) 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US9093160B1 (en) 2014-05-30 2015-07-28 Sandisk Technologies Inc. Methods and systems for staggered memory operations
US8891303B1 (en) 2014-05-30 2014-11-18 Sandisk Technologies Inc. Method and system for dynamic word line based configuration of a three-dimensional memory device
US9645749B2 (en) 2014-05-30 2017-05-09 Sandisk Technologies Llc Method and system for recharacterizing the storage density of a memory device or a portion thereof
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US9070481B1 (en) 2014-05-30 2015-06-30 Sandisk Technologies Inc. Internal current measurement for age measurements
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US9418004B1 (en) * 2014-06-29 2016-08-16 International Business Machines Corporation JNI object access
US9443601B2 (en) 2014-09-08 2016-09-13 Sandisk Technologies Llc Holdup capacitor energy harvesting
US9710379B2 (en) * 2015-02-27 2017-07-18 International Business Machines Corporation Tuning utilization and heap memory size for real-time garbage collection
WO2016204758A1 (en) * 2015-06-18 2016-12-22 Hewlett Packard Enterprise Development Lp Randomized heap allocation
US9588778B2 (en) * 2015-06-29 2017-03-07 International Business Machines Corporation JNI object access
JP2018097817A (ja) * 2016-12-16 2018-06-21 富士通株式会社 情報処理装置、情報処理方法及びプログラム
US10769063B2 (en) * 2018-05-22 2020-09-08 International Business Machines Corporation Spin-less work-stealing for parallel copying garbage collection
US20220374158A1 (en) * 2019-12-20 2022-11-24 Intel Corporation Managing runtime apparatus for tiered object memory placement
CN116049025B (zh) * 2023-01-29 2023-08-11 荣耀终端有限公司 动态调整内存回收gc参数的方法、电子设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69332696T2 (de) * 1992-06-15 2003-08-21 Microsoft Corp Rechnerverfahren und System zur Speicherverwaltung
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6226653B1 (en) * 2000-01-10 2001-05-01 International Business Machines Corporation Method and apparatus for performing generational garbage collection using remembered set counter

Also Published As

Publication number Publication date
US7167881B2 (en) 2007-01-23
US20030212719A1 (en) 2003-11-13
JP2003323336A (ja) 2003-11-14

Similar Documents

Publication Publication Date Title
JP4079684B2 (ja) ヒープメモリ管理方法およびそれを用いた計算機システム
JP3027845B2 (ja) プログラム制御装置および方法
US7010555B2 (en) System and method for compacting a computer system heap
JP4064404B2 (ja) 適応型ガーベージコレクション方法及び前記方法を行う装置
JP4265610B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
JP2006092532A (ja) 最近アクセスしたリソースのデータ局所性の増加
US20050050531A1 (en) System of benchmarking and method thereof
US20070136546A1 (en) Use of Region-Oriented Memory Profiling to Detect Heap Fragmentation and Sparse Memory Utilization
JP4756231B2 (ja) 掃除用のガーベッジコレクションの効果を高めるための方法、コンピュータ読み取り可能媒体、コンピュータシステム、及び、メモリ
US20150261670A1 (en) Deferred destruction for efficient resource reclamation
US20180217779A1 (en) Multiple stage garbage collector
US6999979B2 (en) Efficient encoding of references into a collection set
US7620943B1 (en) Using class properties to segregate objects in a generation managed by the train algorithm
Richter Garbage collection: Automatic memory management in the Microsoft .NET Framework
JP4333676B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US7062518B2 (en) Efficiently supporting the existence of long trains in a generation managed by the train algorithm
CN112579259A (zh) 一种面向大数据处理框架的gc自适应调节方法及装置
US6965905B2 (en) Lock-free, parallel remembered sets
US8589456B2 (en) Prompt large object reclamation
US20050066305A1 (en) Method and machine for efficient simulation of digital hardware within a software development environment
JP3826626B2 (ja) プログラム制御装置、プログラム制御方法、およびプログラム記録媒体
US7676801B1 (en) Scanning of evacuated objects in a generation managed by the train algorithm
JP2004503869A (ja) モジュール式ガーベッジコレクタを実現するための方法および装置
JP4345748B2 (ja) メモリ割当装置、メモリ割当方法、およびプログラム記録媒体
US20040162860A1 (en) Parallel card table scanning and updating

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050311

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070809

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070821

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071022

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20071022

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080205

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

Free format text: PAYMENT UNTIL: 20110215

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