JP4079684B2 - ヒープメモリ管理方法およびそれを用いた計算機システム - Google Patents
ヒープメモリ管理方法およびそれを用いた計算機システム Download PDFInfo
- 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
Links
- 238000007726 management method Methods 0.000 title claims description 54
- 238000000034 method Methods 0.000 claims description 292
- 230000004083 survival effect Effects 0.000 claims description 181
- 230000032683 aging Effects 0.000 claims description 38
- 230000008569 process Effects 0.000 description 261
- 238000012545 processing Methods 0.000 description 47
- 230000008707 rearrangement Effects 0.000 description 45
- 230000004048 modification Effects 0.000 description 23
- 238000012986 modification Methods 0.000 description 23
- 238000007796 conventional method Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 14
- 238000004364 calculation method Methods 0.000 description 11
- 230000018109 developmental process Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
- G06F12/0276—Generational garbage collection
-
- Y—GENERAL 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
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage 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
【発明の属する技術分野】
本発明は、計算機システムに関し、特に計算機システムにおけるメモリ管理方法の分野に関する。具体的には、世代別ガベージコレクション(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記載のヒープメモリ管理方法。
- 前記生存率は、前回のマイナーコレクションの実行以降に生成した新規オブジェクトのうちの生存するオブジェクトの数であることを特徴とする請求項1記載のヒープメモリ管理方法。
- オブジェクトをその上に生成し、必要に応じて該オブジェクトを保持するためのヒープメモリの管理方法であって、
前記ヒープメモリを論理的に新世代ヒープと旧世代ヒープとに分割して管理し、
新規オブジェクトに前記新世代ヒープ内のメモリブロックを割り当て、
前記新世代ヒープに対してガベージコレクションを行うマイナーコレクションを繰り返し実行し、
所定回数のマイナーコレクションを経てもまだ生存と判断されるオブジェクトを前記新世代ヒープか前記旧世代ヒープに再配置し、
前記マイナーコレクションを複数回実行したことをひとつの条件に、前記旧世代ヒープを少なくとも含むヒープに対してガベージコレクションを行うメジャーコレクションを実行し、
各マイナーコレクションは、
前回のマイナーコレクションの実行以降に生成した新規オブジェクトの生存率を算出し、
過去のマイナーコレクションの実行の時から前記新規オブジェクトの生存率が継続して第1の閾値を超えた回数を継続カウンタに記録し、
継続カウンタの値が第2の閾値を超えた場合に、前記新規オブジェクトのうちの生存オブジェクトを前記旧世代ヒープに直接再配置し、それ以外の場合は前記新規オブジェクトのうちの生存オブジェクトを前記新世代ヒープ内のエイジング領域に再配置するステップを有するヒープメモリの管理方法。
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)
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)
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 |
-
2002
- 2002-05-08 JP JP2002132324A patent/JP4079684B2/ja not_active Expired - Fee Related
-
2003
- 2003-01-10 US US10/339,338 patent/US7167881B2/en not_active Expired - Fee Related
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 |