JP5381624B2 - メモリ管理機能を有するプログラム及び装置 - Google Patents

メモリ管理機能を有するプログラム及び装置 Download PDF

Info

Publication number
JP5381624B2
JP5381624B2 JP2009253531A JP2009253531A JP5381624B2 JP 5381624 B2 JP5381624 B2 JP 5381624B2 JP 2009253531 A JP2009253531 A JP 2009253531A JP 2009253531 A JP2009253531 A JP 2009253531A JP 5381624 B2 JP5381624 B2 JP 5381624B2
Authority
JP
Japan
Prior art keywords
area
memory
heap
heap area
size
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
JP2009253531A
Other languages
English (en)
Other versions
JP2011100230A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009253531A priority Critical patent/JP5381624B2/ja
Priority to US12/916,808 priority patent/US8352700B2/en
Publication of JP2011100230A publication Critical patent/JP2011100230A/ja
Application granted granted Critical
Publication of JP5381624B2 publication Critical patent/JP5381624B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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

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

本発明は、連続したメモリ領域を拡張可能とするメモリ管理機能を有するプログラム及び装置に関する。
Java(登録商標)言語の実行環境である仮想マシン(JVM)はメモリ管理機能の一つとしてガベージコレクション(以下、単にGCと記載する)を有する。GCは従来から利用されている(例えば特許文献1参照)。
GCはアプリケーションソフトが動的に割り当てたメモリ領域(以下、オブジェクトという)のうち、使用しなくなった領域を自動的に開放する機能である。この際、使用しているオブジェクトが連続するように再配置する事で、ヒープ領域上に連続した未使用領域を作る(この処理を特にコンパクションとよび区別する場合もあるが、本願明細書ではこの処理も含めGCとする)。なお、JVM以外にも例えばC# の共通言語ランタイム(CLR)はGCを有しており、幅広い範囲で活用されている。
GCによるメモリ管理機能を実装したプロセス(仮想マシン等)ではアプリケーションソフトから動的にオブジェクト生成要求があった場合、プロセスの仮想メモリ空間内のヒープ領域にオブジェクトを割り当てる。GCはアプリケーションソフトがヒープ領域上に動的に割り当てたオブジェクトのうち、不要と判断されたオブジェクトを自動的に開放する。なお、一般的にヒープ領域は用途によって様々種類がある。本願明細書においてヒープ領域はGCの対象となるオブジェクト群が割り当てられるメモリ領域を指す。
アプリケーションソフトの実行と共にオブジェクトの生成を繰り返し行うと、ヒープ領域は次第に埋め尽くされていき、空き容量が不足し、新たにオブジェクトの生成が行えなくなる。新たにオブジェクトの生成が行えない状態になったとき、GCは実行される。アプリケーションソフトで使用されず不要と判断されたオブジェクトはGCによって解放される。このように、新しいオブジェクトを割り当てるための空き容量はGCによって確保される。
GCの一方式では処理の高速化(ヒープ領域内のオブジェクトのシーケンシャル精査の効率化、キャッシュ効率向上)のため、仮想メモリ空間内の連続する領域をヒープ領域として獲得・管理する。以下では連続するヒープ領域上でのオブジェクト割り当て状態の遷移について簡単に説明する。
図1は、連続するヒープ領域上でのオブジェクト割り当てを表した一例のイメージ図である。アプリケーションソフトから動的に生成要求のあったオブジェクトはヒープ領域上に連続して割り当てられる。オブジェクトの割り当ては、ヒープ領域の低位アドレスから高位アドレス方向に向かって順に行われる。
図2は、連続するヒープ領域上の空き領域が不足している様子を表した一例のイメージ図である。オブジェクト生成を繰り返し行うことにより、ヒープ領域はオブジェクト割当済み領域で埋め尽くされる。ヒープ領域は空き容量が不足し、新たにオブジェクトの生成が行えなくなる。図2の状態となったとき、GCは実行される。
図3は、連続するヒープ領域上でGCを実行した直後の様子を表した一例のイメージ図である。GCでは、不要と判断されたオブジェクトが開放される。また、GCでは使用中と判断されたオブジェクト(以下、生存オブジェクトという)がヒープ領域内に残されている。生存オブジェクトはヒープ領域の低位アドレス側に集められる。ヒープ領域の高位アドレス側には新しいオブジェクトを割り当てるための空き領域が確保される。
なお、GCを実行しても多数の生存オブジェクトがヒープ領域内に残り、空き領域を確保できない場合は、アウト・オブ・メモリ・エラー(Out Of Memory Error)となる。
特開昭59−158459号公報
上記したGCの一方式ではプロセスの仮想メモリ空間内の連続するメモリ領域をヒープ領域として割り当てる。しかし、ライブラリのマッピングなど、ヒープ領域以外の目的で使用される領域(以下、ヒープ領域以外のメモリ領域という)の影響で、ヒープ領域として使用可能なメモリ領域は分断され、断片化してしまうことがある。ヒープ領域として使用可能なメモリ領域が断片化してしまうと、1つの連続したヒープ領域として扱えるサイズが小さくなってしまうという問題があった。
図4はヒープ領域以外のメモリ領域の影響で断片化したヒープ領域として使用可能なメモリ領域を表した一例のイメージ図である。図4の例では「ヒープ領域として使用可能な連続領域1」と「ヒープ領域として使用可能な連続領域2」との間に「ヒープ領域以外のメモリ領域」が存在している。
「ヒープ領域以外のメモリ領域」が存在するため、「ヒープ領域として使用可能な連続領域1」と「ヒープ領域として使用可能な連続領域2」とは、どちらか一方しかヒープ領域として扱えない。結果、「ヒープ領域として使用可能な連続領域1」と「ヒープ領域として使用可能な連続領域2」とは連続領域として扱うことができなかった。
なお、ヒープ領域を連続するメモリ領域でなく分割されたメモリ領域から獲得・管理するGCの方式は従来にもあった。ヒープ領域を分割されたメモリ領域から獲得・管理するGCの方式は、分割された不連続なメモリ領域をヒープ領域としている為、ヒープ領域以外のメモリ領域の存在に関係なく、ヒープ領域の追加獲得が行える。
しかし、ヒープ領域を連続するメモリ領域でなく分割されたメモリ領域から獲得・管理するGCの方式は、以下のデメリットの影響が大きいため、現在、ほとんど使用されていない。
ヒープ領域を連続するメモリ領域でなく分割されたメモリ領域から獲得・管理するGCの方式は、アドレス管理テーブルを用いることで、ヒープ領域を仮想的に連続領域にみせている。このため、各オブジェクトにアクセスする際はアドレス管理テーブルを経由して実アドレスを求める必要があり性能に大きな問題があった。例えばヒープ領域を連続するメモリ領域から獲得・管理するGCの方式では、実アドレスでオブジェクトにアクセスするため、アドレス管理テーブルを経由しない分、処理が速い。
また、ヒープ領域を連続するメモリ領域でなく分割されたメモリ領域から獲得・管理するGCの方式は、アドレス管理テーブル分のメモリ領域を余分に必要とするという問題もあった。
本発明の一実施形態は、上記の点に鑑みなされたもので、ヒープ領域を連続領域として獲得した場合の処理が速い等の優位性を保持したまま、分割されたヒープ領域を連続したヒープ領域として管理することを可能にしたメモリ管理機能を有するプログラム及び装置を提供することを目的とする。
上記の課題を解決するため、本発明の一実施形態は、ヒープ領域以外のメモリ領域に対し、ヒープ領域内に格納されるオブジェクト用のヘッダーを付加して、前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うメモリ管理手段として機能させるためのメモリ管理機能を有するプログラムである。
なお、本発明の一実施形態の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
上述の如く、本発明の一実施形態によれば、ヒープ領域を連続領域として獲得した場合の処理が速い等の優位性を保持したまま、分割されたヒープ領域を連続したヒープ領域として管理することを可能にしたメモリ管理機能を有するプログラム及び装置を提供可能である。
連続するヒープ領域上でのオブジェクト割り当てを表した一例のイメージ図である。 連続するヒープ領域上の空き領域が不足している様子を表した一例のイメージ図である。 連続するヒープ領域上でGCを実行した直後の様子を表した一例のイメージ図である。 ヒープ領域以外のメモリ領域の影響で断片化したヒープ領域として使用可能なメモリ領域を表した一例のイメージ図である。 メモリ管理機能を有する装置の一例のハードウェア構成図である。 メモリ管理機能を有する装置の一例のソフトウェア構成図である。 仮想マシンを実行するプロセスの仮想メモリ空間を表した模式図である。 ヒープ領域以外のメモリ領域をオブジェクトとして扱う方法を表した一例のイメージ図である。 ヒープ領域以外のメモリ領域をオブジェクトとして扱ったときの様子を表した一例のイメージ図である。 プロセス実行中に追加の連続領域を獲得できない様子を表した一例のイメージ図である。 擬似オブジェクト化されたヒープ領域以外のメモリ領域がGCを実行しても移動しない様子を表した一例のイメージ図である。 移動不可能オブジェクト管理テーブルの一例の構成図である。 GC対象ヒープ領域の管理用データを表した一例の説明図である。 従来のヒープ領域の獲得・開放の処理手順を表した一例のフローチャートである。 従来のヒープ領域に対するオブジェクト生成要求の処理手順を表した一例のフローチャートである。 本実施例のヒープ領域の獲得・開放の処理手順を表した一例のフローチャートである。 本実施例のヒープ領域に対するオブジェクト生成要求の処理手順を表した一例のフローチャートである。 ヒープ領域の連続領域拡張機能の処理手順を表した一例のフローチャートである。 ステップS35の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。 ステップS49の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。 ステップS55の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。 ステップS37の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。
次に、本発明を実施するための形態を、以下の実施例に基づき図面を参照しつつ説明していく。
図5は、メモリ管理機能を有する装置の一例のハードウェア構成図である。図5のメモリ管理機能を有する装置10は、バスBで相互に接続されている入力装置11,出力装置12,ドライブ装置13,補助記憶装置14,主記憶装置15,演算処理装置16及びインターフェース装置17を有する。図5のハードウェア構成図は入力装置11,出力装置12,ドライブ装置13,補助記憶装置14,主記憶装置15,演算処理装置16及びインターフェース装置17が一つの筐体内に設けられることを示したものではなく、複数の筐体内に分離して設けてもよい。
入力装置11はキーボードやマウス等である。入力装置11は、各種信号を入力するために用いられる。出力装置12はディスプレイ装置等である。出力装置12は、各種ウインドウやデータ等を表示するために用いられる。インターフェース装置17はモデム,LANカード等である。インターフェース装置17は、ネットワークに接続する為に用いられる。つまり、インターフェース装置17はネットワークに接続しないのであれば必須でない。
本実施例のメモリ管理機能を有するプログラムは、装置10を制御する各種プログラムの少なくとも一部である。メモリ管理機能を有するプログラムは例えば記録媒体18の配布やネットワークからのダウンロードなどによって提供される。プログラムを記録した記録媒体18は、CD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的,電気的或いは磁気的に記録する記録媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
また、プログラムを記録した記録媒体18がドライブ装置13にセットされると、プログラムは記録媒体18からドライブ装置13を介して補助記憶装置14にインストールされる。ネットワークからダウンロードされたプログラムは、インターフェース装置17を介して補助記憶装置14にインストールされる。
補助記憶装置14は、インストールされたプログラムを格納すると共に、必要なファイル,データ等を格納する。主記憶装置15は、プログラムの起動時に補助記憶装置14からプログラムを読み出して格納する。そして、演算処理装置16は主記憶装置15に格納されたプログラムに従って、後述するような各種処理を実現している。
図6はメモリ管理機能を有する装置の一例のソフトウェア構成図である。なお、図6では一例としてJVM実行時のソフトウェア構成図を表している。仮想マシン20は本実施例のメモリ管理機能を実装したプロセスの一例である。
図6の装置10は、ハードウェア上でOS(図示せず)が動作し、OS上で仮想マシン20が動作し、ユーザアプリケーション30は仮想マシン20上で動作し,共有ライブラリ40は仮想マシン20を実行するプロセスの仮想メモリ空間50にロードされる。仮想マシン20上では、クラスローダ21,インタプリタ・動的コンパイラ22,メモリ管理機能23が動作している。メモリ管理機能23は、後述の移動不可能オブジェクト管理テーブル24及びGC対象ヒープ領域の管理用データ25を有している。
図7は仮想マシンを実行するプロセスの仮想メモリ空間を表した模式図である。仮想マシン20を実行するプロセスの仮想メモリ空間50内には起動時に指定された最大ヒープ領域サイズのヒープ領域が確保される。ヒープ領域はGC対象となる。ユーザアプリケーション30はオブジェクトを仮想マシン20経由でGC対象のヒープ領域に生成する。また、メモリ管理機能23はGCで不要と判断したオブジェクトの開放を行う。なお、仮想マシン20を実行するプロセスの仮想メモリ空間50内には、共有ライブラリ40のマッピングなど、ヒープ領域以外の目的で使用される領域(ヒープ領域以外のメモリ領域)も割り当てられる。
この時、「ヒープ領域以外のメモリ領域」が、図4のように割り当てられた場合は、ヒープ領域として使用可能な連続領域は「ヒープ領域として使用可能な連続領域1」と「ヒープ領域として使用可能な連続領域2」とに分断される。結果として、「ヒープ領域として使用可能な連続領域1」と「ヒープ領域として使用可能な連続領域2」とは、どちらか一方しかヒープ領域として扱えなくなる。
そこで、本実施例は図8に示すようにヒープ領域以外のメモリ領域を1つのオブジェクト(擬似的なオブジェクト)として扱うことで、ヒープ領域以外のメモリ領域をヒープ領域内に格納することが可能となる。
図8は、ヒープ領域以外のメモリ領域をオブジェクトとして扱う方法を表した一例のイメージ図である。ヒープ領域以外のメモリ領域を1つのオブジェクトとして扱うことにより、「ヒープ領域として使用可能な連続領域1」と「ヒープ領域として使用可能な連続領域2」とは連続する一つのヒープ領域とすることができる。ヒープ領域以外のメモリ領域や空き領域の状況はシステム関数(例:実行システムがWindows(登録商標)ならばVirtualQuery()を使用)などを用いて確認する。
ユーザアプリケーション30から生成された通常のオブジェクトは、ヘッダー61及びデータ域62で構成されている。ヘッダー61はクラス情報,サイズ情報,他からの参照情報(システムによっては別の場所で一括管理することもある)等を含む。ヒープ領域以外のメモリ領域63をオブジェクトとして扱う為には、通常のオブジェクトと同じようにヘッダー64を付け加える。そして、ヒープ領域以外のメモリ領域63はデータ域として扱う。図8に示す方法では、現在のヒープ領域の終端に、常にヘッダー用の領域を確保しておく必要がある。しかし、確保しておく必要のあるヘッダー用の領域は十数バイト程度なのでユーザアプリケーション30の実行に、ほとんど影響しない。
図9はヒープ領域以外のメモリ領域をオブジェクトとして扱ったときの様子を表した一例のイメージ図である。ヒープ領域以外のメモリ領域はメモリ管理機能23から1つのオブジェクトとして認識される。
結果として、メモリ管理機能23はヒープ領域以外のメモリ領域により分断されていた2つの「ヒープ領域として使用可能な連続領域」を、1つの「ヒープ領域として使用可能な連続領域」として扱うことで、より大きな1つの「ヒープ領域として使用可能な連続領域」を獲得できる。
プロセス起動時に指定したヒープ領域のサイズが小さすぎる場合は、GCを実行してもヒープ領域内に空き領域を確保できず、アウト・オブ・メモリ・エラーとなり、システム停止に繋がる可能性がある。アウト・オブ・メモリ・エラーは、プロセス実行中に追加の連続領域を獲得することができれば避けられる。
しかしながら、図10に示すように「ヒープ領域以外のメモリ領域」がヒープ領域に隣接している場合は、プロセス実行中に追加の連続領域を獲得できない。図10はプロセス実行中に追加の連続領域を獲得できない様子を表した一例のイメージ図である。
図10ではプロセス起動時に獲得したヒープ領域に隣接するようにヒープ領域以外のメモリ領域が割り当てられている。図10では、GCを実行しても多数の生存オブジェクトがヒープ領域内に残り、空き容量が確保できていない。そこで、プロセス実行中に追加の連続領域を獲得したいが、図10の例ではプロセス起動時に獲得したヒープ領域に隣接するようにヒープ領域以外のメモリ領域が割り当てられているため、プロセス実行中に追加の連続領域を獲得できない。
結局、従来はプロセスを一度停止し、プロセス再起動時にヒープ領域のサイズを指定し直さなければならなかった。一方、本実施例はプロセス起動時に獲得したヒープ領域に隣接する「ヒープ領域以外のメモリ領域」をオブジェクトとして扱うことで、プロセス実行中に追加の連続領域を獲得できる。本実施例ではプロセスを停止することなくヒープ領域に連続領域を追加(ヒープ領域の拡張)することが可能となる。
なお、プロセスを停止せずにヒープ領域の拡張を行う場合の拡張サイズは、プロセスの起動から現在までのメモリ使用状況の統計をとり、最適な拡張サイズを算出する方法と予めユーザに許容量を指定させる方法とがある。
ヒープ領域以外のメモリ領域をオブジェクトとして扱う場合、擬似オブジェクト化されたヒープ領域以外のメモリ領域は、GC等のヒープ領域の管理を行うメモリ管理機能23から、ひとつの生存オブジェクトと見なされる。しかし、擬似オブジェクト化されたヒープ領域以外のメモリ領域は、本来、ライブラリのマッピングなどに使われている領域であるため、他からのアクセスもある。
この為、擬似オブジェクト化されたヒープ領域以外のメモリ領域は通常のオブジェクトと異なり、常に生存オブジェクトとして残される、かつ、GCを実行しても移動しないオブジェクトとして扱われる必要がある。図11は擬似オブジェクト化されたヒープ領域以外のメモリ領域がGCを実行しても移動しない様子を表した一例のイメージ図である。
オブジェクトとして扱うヒープ領域以外のメモリ領域は複数になる場合もある為、図12に示すような移動不可能オブジェクト管理テーブル24によって管理される。図12は移動不可能オブジェクト管理テーブルの一例の構成図である。移動不可能オブジェクト管理テーブル24は領域番号,開始アドレス,サイズをデータ項目として有する。
領域番号はオブジェクトとして扱うヒープ領域以外のメモリ領域を識別する為のものである。開始アドレスはヒープ領域以外のメモリ領域を擬似オブジェクトとして扱うときの開始アドレスである。また、サイズは擬似オブジェクトとして扱うメモリ領域のサイズである。移動不可能オブジェクト管理テーブル24はメモリ管理機能23が有する。
メモリ管理機能23は前述したように移動不可能オブジェクト管理テーブル24の他にGC対象ヒープ領域の管理用データ25を有する。図13はGC対象ヒープ領域の管理用データを表した一例の説明図である。GC対象ヒープ領域の管理用データ25は後述のフローチャートで使用するデータ(変数)名と用途とを表している。なお、各データの詳細は後述する。
以下では、本実施例によるメモリ管理機能についてフローチャートを参照しつつ説明していく。まず、本実施例によるメモリ管理機能の理解を容易とするため、従来の処理手順について説明する。
図14は従来のヒープ領域の獲得・開放の処理手順を表した一例のフローチャートである。ステップS1に進み、メモリ管理機能23はプロセス起動時に指定された最大ヒープ領域サイズ(max_heap_size)を、オブジェクトの割り当て先である仮想メモリ空間50内のGC対象のヒープ領域の最大サイズとする。
ステップS2に進み、メモリ管理機能23は、プロセスの仮想メモリ空間50から最大ヒープ領域サイズ分の連続領域の獲得を試みる。プロセスの仮想メモリ空間50から最大ヒープ領域サイズ分の連続領域が獲得できれば、ステップS3に進む。なお、プロセスの仮想メモリ空間50から最大ヒープ領域サイズ分の連続領域が獲得できなければ、メモリ管理機能23はステップS6に進み、初期化時エラーとなる。
ステップS3ではユーザアプリケーション30が起動される。ユーザアプリケーション30は、GC対象のヒープ領域にオブジェクトを生成する。ステップS4ではユーザアプリケーション30が終了される。ステップS5に進み、ステップS2でプロセスの仮想メモリ空間50から獲得した最大ヒープ領域サイズ分の連続領域の開放を行う。
図15は、従来のヒープ領域に対するオブジェクト生成要求の処理手順を表した一例のフローチャートである。ステップS11に進み、メモリ管理機能23はオブジェクト生成要求をユーザアプリケーション30から受ける。
ステップS12に進み、メモリ管理機能23は生成要求のあったオブジェクトを割り当てる為の空き容量がヒープ領域にあるか否かを判定する。生成要求のあったオブジェクトを割り当てる為の空き容量がヒープ領域にあれば、メモリ管理機能23はステップS15に進み、GC対象のヒープ領域に生成要求のあったオブジェクトを割り当てる。生成要求のあったオブジェクトを割り当てる為の空き容量がヒープ領域に無ければ、メモリ管理機能23はステップS13に進み、GCを実行する。
ステップS14に進み、メモリ管理機能23は生成要求のあったオブジェクトを割り当てる為の空き容量を、GCの実行により確保できた場合、ステップS15に進み、GC対象のヒープ領域に生成要求のあったオブジェクトを割り当てる。なお、メモリ管理機能23は生成要求のあったオブジェクトを割り当てる為の空き容量を、GCの実行により確保できなかった場合、ステップS16に進み、アウト・オブ・メモリ・エラーとなる。
図16は本実施例のヒープ領域の獲得・開放の処理手順を表した一例のフローチャートである。なお、図16のステップS21〜S25の処理は図14のステップS1〜S5の処理と同様であるため、説明を省略する。
ステップS22において、プロセスの仮想メモリ空間50から最大ヒープ領域サイズ分の連続領域が獲得できなければ、メモリ管理機能23はステップS26に進む。ステップS26に進み、メモリ管理機能23は、管理用データ「want_size」に最大ヒープ領域サイズ(max_heap_size)を代入する。また、メモリ管理機能23は管理用データ「start_addr」に「0」を代入する。
管理用データ「want_size」は新たに獲得したいヒープ領域サイズのうち、未獲得分のヒープ領域サイズを表す。また、管理用データ「start_addr」は獲得したいヒープ領域の先頭アドレスを表す。
ステップS27に進み、メモリ管理機能23は後述するヒープ領域の連続領域拡張機能を行うことで、プロセスの仮想メモリ空間50から最大ヒープ領域サイズ分の連続領域の獲得を試みる。
ステップS28に進み、メモリ管理機能23はステップS27のヒープ領域の連続領域拡張機能を行うことにより、管理用データ「want_size」が0以下になっているか否かを判定する。管理用データ「want_size」が0以下になっていれば、新たに獲得したいヒープ領域サイズを獲得できているため、メモリ管理機能23はステップS23に進む。
管理用データ「want_size」が0以下になっていなければ、新たに獲得したいヒープ領域サイズを獲得できていないため、メモリ管理機能23はステップS29に進み、初期化時エラーとなる。
図16に表した本実施例のヒープ領域の獲得・開放の処理手順では、プロセスの仮想メモリ空間50から最大ヒープ領域サイズ分の連続領域が獲得できない場合に、ヒープ領域の連続領域拡張機能を行うことで、初期化時エラーを発生しにくくできる。
図17は本実施例のヒープ領域に対するオブジェクト生成要求の処理手順を表した一例のフローチャートである。ステップS31に進み、メモリ管理機能23はオブジェクト生成要求をユーザアプリケーション30から受ける。
ステップS32に進み、メモリ管理機能23はヘッダー分の領域(十数バイト)と生成要求のあったオブジェクトを割り当てる為の空き容量とがヒープ領域にあるか否かを判定する。ヘッダー分の領域と生成要求のあったオブジェクトを割り当てる為の空き容量とがヒープ領域にあれば、メモリ管理機能23はステップS38に進み、GC対象のヒープ領域に生成要求のあったオブジェクトを割り当てる。
一方、ヘッダー分の領域と生成要求のあったオブジェクトを割り当てる為の空き容量とがヒープ領域に無ければ、メモリ管理機能23はステップS33に進む。ステップS33ではメモリ管理機能23がGCを実行する。
ステップS34に進み、メモリ管理機能23はヘッダー分の領域と生成要求のあったオブジェクトを割り当てる為の空き容量とを、GCの実行により確保できた場合、ステップS38に進み、GC対象のヒープ領域に生成要求のあったオブジェクトを割り当てる。
なお、メモリ管理機能23はヘッダー分の領域と生成要求のあったオブジェクトを割り当てる為の空き容量とを、GCの実行により確保できなかった場合、ステップS35に進む。ステップS35では、メモリ管理機能23が、追加で獲得するヒープ領域のサイズを算出する。メモリ管理機能23は、管理用データ「want_size」に算出した追加で獲得するヒープ領域のサイズを代入する。また、メモリ管理機能23は管理用データ「start_addr」に現在のヒープ領域の終端を代入する。
ステップS36に進み、メモリ管理機能23は後述するヒープ領域の連続領域拡張機能を行うことで、プロセスの仮想メモリ空間50から算出した追加で獲得するヒープ領域のサイズ分の連続領域の獲得を試みる。
ステップS37に進み、メモリ管理機能23はステップS36のヒープ領域の連続領域拡張機能を行うことにより、管理用データ「want_size」が0以下になっているか否かを判定する。管理用データ「want_size」が0以下になっていれば、新たに獲得したいヒープ領域サイズを獲得できているため、メモリ管理機能23はステップS38に進む。
管理用データ「want_size」が0以下になっていなければ、新たに獲得したいヒープ領域サイズを獲得できていないため、メモリ管理機能23はステップS39に進み、アウト・オブ・メモリ・エラーとなる。となる。
図17に表した本実施例のヒープ領域の獲得・開放の処理手順ではGC実行後、ヒープ領域にオブジェクトを割り当てる空き領域を確保できない場合、ヒープ領域の連続領域拡張機能を行うことで、アウト・オブ・メモリ・エラーを発生しにくくできる。
図18は、ヒープ領域の連続領域拡張機能の処理手順を表した一例のフローチャートである。ステップS41に進み、メモリ管理機能23は管理用データ「attempt_size」に管理用データ「want_size」の値を代入する。管理用データ「attempt_size」は仮想メモリ空間50から実際にヒープ領域の獲得を試みるサイズを表す。
ステップS42に進み、メモリ管理機能23は管理用データ「start_addr」と「attempt_size」とを加算したアドレスが、管理用データ「limit_addr」のアドレスより小さいか否かを判定する。管理用データ「limit_addr」は仮想メモリ空間50内でヒープ領域が獲得できる限界のアドレスを表す。
メモリ管理機能23は、管理用データ「start_addr」と「attempt_size」とを加算したアドレスが、管理用データ「limit_addr」のアドレスより小さければ、ステップS43に進み、プロセスの仮想メモリ空間50の管理用データ「start_addr」から「attempt_size」分をヒープ領域とするメモリ領域の獲得に成功するかを判定する。
ステップS43でメモリ領域の獲得に成功すれば、メモリ管理機能23はステップS46に進み、管理用データ「want_size」から「attempt_size」を減算する。ステップS47に進み、メモリ管理機能23は管理用データ「want_size」が0以下になっているか否かを判定する。管理用データ「want_size」が0以下になっていれば、新たに獲得したいヒープ領域サイズを獲得できているため、メモリ管理機能23は図18のフローチャートの処理を終了する。
管理用データ「want_size」が0以下になっていなければ、新たに獲得したいヒープ領域サイズを獲得できていないため、メモリ管理機能23はステップS48に進み、ステップS43で獲得したメモリ領域の終端を管理用データ「start_addr」に代入する。ステップS48の処理後、メモリ管理機能23はステップS49に進む。
ステップS43でメモリ領域の獲得に失敗すれば、メモリ管理機能23はステップS44に進み、管理用データ「attempt_size」から「align_size」を減算する。管理用データ「align_size」はヒープ領域獲得時のアライメントサイズを表す。メモリ管理機能23はアライメントサイズ毎に管理用データ「attempt_size」を調整する。ステップS45に進み、メモリ管理機能23は管理用データ「attempt_size」が「align_size」より小さいかを判定する。
管理用データ「attempt_size」が「align_size」より小さくなければ、メモリ管理機能23はステップS43に戻る。管理用データ「attempt_size」が「align_size」より小さければ、メモリ管理機能23はステップS49に進む。
ステップS49では、メモリ管理機能23が、管理用データ「start_addr」のアドレスから管理用データ「align_size」分の領域のメモリ獲得状況を調査し、管理用データ「start_addr」のアドレスから管理用データ「align_size」分の領域にマッピングされている「ヒープ領域以外のメモリ領域」の確認を行う。管理用データ「start_addr」のアドレスから管理用データ「align_size」分の領域にマッピングされている「ヒープ領域以外のメモリ領域」があれば、メモリ管理機能23は「ヒープ領域以外のメモリ領域」の先頭アドレスを管理用データ「om_bottom」に代入し、サイズを管理用データ「om_size」に代入する。
ステップS50に進み、メモリ管理機能23は管理用データ「start_addr」のアドレスから管理用データ「om_bottom」のアドレスまでの領域を、ヒープ領域として追加獲得する。
ステップS51に進み、メモリ管理機能23は管理用データ「om_bottom」のアドレスの前にオブジェクトのヘッダー64を付け加え、管理用データ「om_bottom」から管理用データ「om_size」のサイズ分がデータ域63となるオブジェクトとして扱えるようにする。
ステップS52に進み、メモリ管理機能23は図12に示した移動不可能オブジェクト管理テーブルに、ヒープ領域以外のメモリ領域を有したオブジェクトとして登録する。図12の移動不可能オブジェクト管理テーブルにはヒープ領域以外のメモリ領域を有したオブジェクトの開始アドレス及びサイズが登録される。開始アドレスは管理用データ「om_bottom」のアドレスからヘッダー64のサイズを減算したものである。サイズは管理用データ「om_size」のサイズにヘッダー64のサイズを加算したものである。
ステップS53に進み、メモリ管理機能23は管理用データ「om_bottom」のアドレスから管理用データ「start_addr」のアドレスを減算したサイズを管理用データ「want_size」から減算する。そして、メモリ管理機能23は管理用データ「attempt_size」に管理用データ「want_size」の値を代入する。
ステップS54に進み、メモリ管理機能23は管理用データ「want_size」が0以下になっているか否かを判定する。管理用データ「want_size」が0以下になっていれば、新たに獲得したいヒープ領域サイズを獲得できているため、メモリ管理機能23は図18のフローチャートの処理を終了する。管理用データ「want_size」が0以下になっていなければ、メモリ管理機能23はステップS55に進み、管理用データ「om_bottom」のアドレスに「om_size」のサイズを加算したアドレスを管理用データ「start_addr」のアドレスに代入する。ステップS55の処理後、メモリ管理機能23はステップS43に戻り処理を続ける。
なお、ステップS42において、メモリ管理機能23は、管理用データ「start_addr」と「attempt_size」とを加算したアドレスが、管理用データ「limit_addr」のアドレスより小さくなければ、新たに獲得したいヒープ領域サイズを獲得することができないので、図18のフローチャートの処理を終了する。
以下では図17及び図18に表したフローチャートの処理の具体例を、図19〜図22のイメージ図を参照しつつ説明する。現在のヒープ領域は、100〜300番地であるとする。100〜290番地はオブジェクト割当済み領域であるとする。290〜300番地はヒープ領域内の空き領域であるとする。300〜330番地はヒープ領域として使用可能な領域であるとする。330〜350番地はヒープ領域以外のメモリ領域であるとする。350〜1000番地はヒープ領域として使用可能な領域であるとする。1000番地はプロセスの使用可能な上限とする。なお、オブジェクトのヘッダーサイズは「2」とする。
ユーザアプリケーション30からサイズ「20」のオブジェクト生成要求があった場合を一例として、図17及び図18のフローチャートの処理を順番に追う。
ステップS31に進み、メモリ管理機能23はサイズ「20」のオブジェクト生成要求をユーザアプリケーション30から受ける。ステップS32に進み、メモリ管理機能23はヘッダー分の領域(サイズ2)とオブジェクト生成要求のあったサイズ「20」とを割り当てる為の空き容量がヒープ領域内にあるか否かを判定する。
ヘッダー分の領域(サイズ2)とオブジェクト生成要求のあったサイズ「20」とを割り当てる為の空き容量がヒープ領域内に無いため、メモリ管理機能23はステップS33に進む。ステップS33ではメモリ管理機能23がGCを実行する。ここでは空き容量を増やせなかったものとして説明を続ける。
ステップS34に進み、メモリ管理機能23は、ヘッダー分の領域(サイズ2)とオブジェクト生成要求のあったサイズ「20」とを割り当てる為の空き容量を、GCの実行により確保できなかった為、ステップS35に進む。ステップS35では、メモリ管理機能23が、追加で獲得するヒープ領域のサイズとして例えば「60」を算出する。
メモリ管理機能23は、管理用データ「want_size」に算出した追加で獲得するヒープ領域のサイズ「60」を代入する。また、メモリ管理機能23は管理用データ「start_addr」に現在のヒープ領域の終端「300番地」を代入する。
ステップS35の処理終了時のヒープ領域周辺の構成と各データの示す位置とは図19のようになる。図19はステップS35の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。
ステップS36の処理は図18のフローチャートを用いて説明する。ステップS41に進み、メモリ管理機能23は管理用データ「attempt_size」に管理用データ「want_size」の値「60」を代入する。
ステップS42に進み、メモリ管理機能23は管理用データ「start_addr」の値「300番地」と「attempt_size」の値「60」とを加算したアドレス「360番地」が、管理用データ「limit_addr」のアドレス「1000番地」より小さいため、ステップS43に進む。
ステップS43に進み、メモリ管理機能23は、330〜350番地にヒープ領域以外のメモリ領域が存在するため、管理用データ「start_addr」の値「300番地」から「attempt_size」の値「60」分のメモリ領域の獲得に失敗し、ステップS44に進む。
ステップS44に進み、メモリ管理機能23は管理用データ「attempt_size」の値「60」から「align_size」の値として例えば「4」を減算し、新たな管理用データ「attempt_size」の値として「56」を代入する。
ステップS45に進み、メモリ管理機能23は管理用データ「attempt_size」の値「56が「align_size」の値「4」より小さくないため、ステップS43に戻る。メモリ管理機能23は管理用データ「attempt_size」の値が「28」になるまでステップS43〜S45の処理を繰り返す。
ステップS43に進み、メモリ管理機能23は、330〜350番地にヒープ領域以外のメモリ領域が存在するが、管理用データ「start_addr」の値「300番地」から「attempt_size」の値「28」分のメモリ領域の獲得に成功する。メモリ管理機能23はステップS46に進み、管理用データ「want_size」の値「60」から「attempt_size」の値「28」を減算し、新たな管理用データ「want_size」の値として「32」を代入する。
ステップS47に進み、メモリ管理機能23は管理用データ「want_size」が0以下になっていないため、ステップS48に進む。ステップS48では、メモリ管理機能23がステップS43で獲得したメモリ領域の終端である「328番地」を管理用データ「start_addr」に代入する。
ステップS49に進み、メモリ管理機能23は、管理用データ「start_addr」のアドレス「328番地」から管理用データ「align_size」の値「4」分の領域のメモリ獲得(メモリマッピング)状況を調査し、「ヒープ領域以外のメモリ領域」の確認を行う。「ヒープ領域以外のメモリ領域」があるため、メモリ管理機能23は「ヒープ領域以外のメモリ領域」の先頭アドレス「330番地」を管理用データ「om_bottom」に代入し、「ヒープ領域以外のメモリ領域」のサイズ「20」を管理用データ「om_size」に代入する。
ステップS49の処理終了時のヒープ領域周辺の構成と各データの示す位置とは図20のようになる。図20はステップS49の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。
ステップS50に進み、メモリ管理機能23は管理用データ「start_addr」のアドレス「328番地」から管理用データ「om_bottom」のアドレス「330番地」までの領域を、ヒープ領域として追加獲得する。
ステップS51に進み、メモリ管理機能23は管理用データ「om_bottom」のアドレス「330番地」の前に、サイズが「2」のオブジェクトのヘッダー64を付け加えることで、328〜350番地を1つのオブジェクトとして扱えるようにする。
ステップS52に進み、メモリ管理機能23は図12に示した移動不可能オブジェクト管理テーブルに、開始アドレス「328番地」、サイズ「22」のヒープ領域以外のメモリ領域として登録する。
ステップS53に進み、メモリ管理機能23は管理用データ「om_bottom」のアドレス「330番地」から管理用データ「start_addr」のアドレス「328番地」を減算したサイズ「2」を管理用データ「want_size」の値「32」から減算する。メモリ管理機能23は管理用データ「attempt_size」に管理用データ「want_size」の値「30」を代入する。
ステップS54に進み、メモリ管理機能23は管理用データ「want_size」の値が0以下になっていないため、ステップS55に進み、管理用データ「om_bottom」のアドレス「330番地」に「om_size」のサイズ「20」を加算したアドレス「350番地」を管理用データ「start_addr」のアドレスに代入する。ステップS55の処理後、メモリ管理機能23はステップS42の処理に戻る。
ステップS55の処理終了時のヒープ領域周辺の構成と各データの示す位置とは図21のようになる。図21はステップS55の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。
ステップS43に進み、メモリ管理機能23は、管理用データ「start_addr」の値「350番地」から「attempt_size」の値「30」分のメモリ領域の獲得に成功し、ステップS46に進む。
メモリ管理機能23はステップS46に進み、管理用データ「want_size」の値「30」から「attempt_size」の値「30」を減算し、新たな管理用データ「want_size」の値として「0」を代入する。ステップS47に進み、メモリ管理機能23は管理用データ「want_size」が0以下になっているため、図18のフローチャートの処理、言い換えれば図17のステップS36の処理を終了する。
ステップS37に進み、メモリ管理機能23は管理用データ「want_size」が0以下になっているため、ステップS38に進む。ステップS37の処理終了時のヒープ領域周辺の構成と各データの示す位置とは図22のようになる。図22はステップS37の処理終了時のヒープ領域周辺の構成を表した一例のイメージ図である。
ステップS38に進み、メモリ管理機能23は新たに獲得した空き領域を含む「290〜310番地」に対し、ユーザアプリケーション30から生成要求のあったサイズ「20」のオブジェクトが割り当て可能となると同時に、「310〜328番地」および、「330〜350番地」の領域もヒープ領域として使用可能な領域となる。
本発明は、以下に記載する付記のような構成が考えられる。
(付記1)
コンピュータを、
ヒープ領域以外のメモリ領域にオブジェクト用のヘッダーを付加して、前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うメモリ管理手段として機能させるためのメモリ管理機能を有するプログラム。
(付記2)
前記メモリ管理手段は、前記メモリ領域の存在により、指定された最大ヒープ領域サイズの獲得ができなければ、ヒープ領域以外のメモリ領域にオブジェクト用のヘッダーを付加して前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うことで、前記ヒープ領域を拡張し、指定された最大ヒープ領域サイズを獲得する付記1記載のメモリ管理機能を有するプログラム。
(付記3)
前記メモリ管理手段は、前記オブジェクトが前記ヒープ領域へ動的に割り当てられたことにより前記ヒープ領域に空き領域がなくなると、前記ヒープ領域へ動的に割り当てられた前記オブジェクトのうち使用されなくなった前記オブジェクトを開放すると共に、前記ヒープ領域へ動的に割り当てられた前記オブジェクトのうち使用されている前記オブジェクトを集めて、前記ヒープ領域に連続した空き領域を生成する付記1記載のメモリ管理機能を有するプログラム。
(付記4)
前記メモリ管理手段は、前記ヒープ領域へ動的に割り当てられた前記オブジェクトのうち使用されている前記オブジェクトを集める際、前記擬似的なオブジェクトを管理するテーブルを参照して、前記擬似的なオブジェクトを移動させない付記3記載のメモリ管理機能を有するプログラム。
(付記5)
メモリ管理機能を有する装置であって、
ヒープ領域以外のメモリ領域にオブジェクト用のヘッダーを付加して、前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うメモリ管理手段
を有する装置。
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
10 メモリ管理機能を有する装置
11 入力装置
12 出力装置
13 ドライブ装置
14 補助記憶装置
15 主記憶装置
16 演算処理装置
17 インターフェース装置
18 記録媒体
20 仮想マシン
21 クラスローダ
22 インタプリタ・動的コンパイラ
23 メモリ管理機能
24 移動不可能オブジェクト管理テーブル
25 GC対象ヒープ領域の管理用データ
30 ユーザアプリケーション
40 共有ライブラリ
61,64 ヘッダー
62 データ域
63 ヒープ領域以外のメモリ領域

Claims (5)

  1. コンピュータを、
    ヒープ領域以外のメモリ領域にオブジェクト用のヘッダーを付加して、前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うメモリ管理手段として機能させるためのメモリ管理機能を有するプログラム。
  2. 前記メモリ管理手段は、前記メモリ領域の存在により、指定された最大ヒープ領域サイズの獲得ができなければ、ヒープ領域以外のメモリ領域にオブジェクト用のヘッダーを付加して前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うことで、前記ヒープ領域を拡張し、指定された最大ヒープ領域サイズを獲得する請求項1記載のメモリ管理機能を有するプログラム。
  3. 前記メモリ管理手段は、前記オブジェクトが前記ヒープ領域へ動的に割り当てられたことにより前記ヒープ領域に空き領域がなくなると、前記ヒープ領域へ動的に割り当てられた前記オブジェクトのうち使用されなくなった前記オブジェクトを開放すると共に、前記ヒープ領域へ動的に割り当てられた前記オブジェクトのうち使用されている前記オブジェクトを集めて、前記ヒープ領域に連続した空き領域を生成する請求項1記載のメモリ管理機能を有するプログラム。
  4. 前記メモリ管理手段は、前記ヒープ領域へ動的に割り当てられた前記オブジェクトのうち使用されている前記オブジェクトを集める際、前記擬似的なオブジェクトを管理するテーブルを参照して、前記擬似的なオブジェクトを移動させない請求項3記載のメモリ管理機能を有するプログラム。
  5. メモリ管理機能を有する装置であって、
    ヒープ領域以外のメモリ領域にオブジェクト用のヘッダーを付加して、前記メモリ領域を擬似的なオブジェクトとして扱い、前記メモリ領域により分割されている複数のヒープ領域を1つの連続したヒープ領域として扱うメモリ管理手段
    を有する装置。
JP2009253531A 2009-11-04 2009-11-04 メモリ管理機能を有するプログラム及び装置 Expired - Fee Related JP5381624B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2009253531A JP5381624B2 (ja) 2009-11-04 2009-11-04 メモリ管理機能を有するプログラム及び装置
US12/916,808 US8352700B2 (en) 2009-11-04 2010-11-01 Memory management program and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009253531A JP5381624B2 (ja) 2009-11-04 2009-11-04 メモリ管理機能を有するプログラム及び装置

Publications (2)

Publication Number Publication Date
JP2011100230A JP2011100230A (ja) 2011-05-19
JP5381624B2 true JP5381624B2 (ja) 2014-01-08

Family

ID=43926610

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009253531A Expired - Fee Related JP5381624B2 (ja) 2009-11-04 2009-11-04 メモリ管理機能を有するプログラム及び装置

Country Status (2)

Country Link
US (1) US8352700B2 (ja)
JP (1) JP5381624B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014078175A (ja) * 2012-10-11 2014-05-01 Canon Inc 情報処理装置、その制御方法、及びプログラム
US9582413B2 (en) * 2014-12-04 2017-02-28 International Business Machines Corporation Alignment based block concurrency for accessing memory
US11334329B2 (en) 2018-06-08 2022-05-17 Shanghai Cambricon Information Technology Co., Ltd. General machine learning model, and model file generation and parsing method
KR102700419B1 (ko) * 2018-09-04 2024-08-30 삼성전자주식회사 전자장치 및 그 제어방법

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59158459A (ja) 1983-03-01 1984-09-07 Nec Corp 構造体メモリ回収方式
JPH03204048A (ja) * 1989-12-30 1991-09-05 Ricoh Co Ltd メモリ管理方法
JPH0520090A (ja) 1991-07-09 1993-01-29 Fuji Facom Corp 計算機システム
JP3610528B2 (ja) * 1995-01-24 2005-01-12 ブラザー工業株式会社 メモリ管理方法及び装置
US7792880B2 (en) * 2004-01-05 2010-09-07 International Business Machines Corporation Method and apparatus for efficient implementation of discontiguous objects
JP4504756B2 (ja) * 2004-07-26 2010-07-14 株式会社アプリックス Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム
US8250121B2 (en) * 2009-11-18 2012-08-21 Oracle America, Inc. Zero-copy maturing of large objects in generational heap with copying collection

Also Published As

Publication number Publication date
US20110107038A1 (en) 2011-05-05
JP2011100230A (ja) 2011-05-19
US8352700B2 (en) 2013-01-08

Similar Documents

Publication Publication Date Title
US8805896B2 (en) System and method for use with garbage collected languages for enabling the allocated heap memory to be updated at runtime
US7024436B2 (en) Computer system with two heaps in contiguous storage
US7263700B1 (en) Serially, reusable virtual machine
US6446257B1 (en) Method and apparatus for pre-allocation of system resources to facilitate garbage collection
JP4917138B2 (ja) オブジェクト最適配置装置、オブジェクト最適配置方法、及びオブジェクト最適配置プログラム
US8156492B2 (en) System and method to improve memory usage in virtual machines running as hypervisor guests
US9384129B2 (en) Garbage collection based on total resource usage and managed object metrics
US7107426B2 (en) Computer system with heap reset for performing generational garbage collection implemented by card-marking between successive applications
US9037830B2 (en) Organization of a small object area and a large object area in a Java heap
US8943290B2 (en) Automatic management of heterogeneous memory resources
US6804765B2 (en) Computer system with multiple heaps
JP5980916B2 (ja) コンピュータにより実行される方法及びコンピュータシステム
US7454448B1 (en) Synchronizing object promotion in a multi-tasking virtual machine with generational garbage collection
US20070203959A1 (en) Apparatus and method for managing resources using virtual ID in multiple Java application environment
US20100011357A1 (en) System and method for garbage collection in a virtual machine
JP2014517434A (ja) コンピュータにより実行される方法及びコンピュータシステム
CN108196937B (zh) 字符串对象的处理方法、装置、计算机设备和存储介质
JP5381624B2 (ja) メモリ管理機能を有するプログラム及び装置
US8972629B2 (en) Low-contention update buffer queuing for large systems
US20080195681A1 (en) Method and system for garbage collection in a multitasking environment
US8447793B2 (en) Efficient remembered set for region-based garbage collectors
US20090228537A1 (en) Object Allocation System and Method
JP5489884B2 (ja) 命令実行装置、命令実行方法、及び命令実行プログラム
US8140597B2 (en) Computer system memory management
JP4589095B2 (ja) プログラム実行装置及びプログラム実行方法及びデータ領域管理プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120720

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130823

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130916

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131015

LAPS Cancellation because of no payment of annual fees