JP4116877B2 - ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム - Google Patents
ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム Download PDFInfo
- Publication number
- JP4116877B2 JP4116877B2 JP2002378194A JP2002378194A JP4116877B2 JP 4116877 B2 JP4116877 B2 JP 4116877B2 JP 2002378194 A JP2002378194 A JP 2002378194A JP 2002378194 A JP2002378194 A JP 2002378194A JP 4116877 B2 JP4116877 B2 JP 4116877B2
- Authority
- JP
- Japan
- Prior art keywords
- size
- heap
- heap size
- time
- information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
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
Description
【発明の属する技術分野】
本発明は,ガベージコレクション(Garbage Collection)を実装するコンピュータシステムにおいて,最適なヒープサイズを求めるためのヒープサイズ自動最適化処理方法に関するものである。
【0002】
以下では,ガベージコレクションをGCと記す。ここで,GCを実装するコンピュータシステムとして,例えば,JVM(Java Virtual Machine:Java(登録商標)仮想マシン)がある。本明細書では,GCを実装するコンピュータシステムとしてJVMの例を用いて説明するが,本発明を適用できるシステムは,JVMに限られない。
【0003】
【従来の技術】
一般に,ヒープサイズの見積りの技術に関して,Javaのように動的にメモリを確保するプログラムでは,必要となるメモリ量の見積り(予測)が難しいとされていた(例えば,非特許文献1参照)。
【0004】
コンピュータによるアプリケーションの処理能力を表すもののうち,GCによって影響を受けるものとしては,スループットと応答性能とがある。ここで,スループットとは,単位時間内にアプリケーションが処理する仕事量のことである。また,応答性能とは,ユーザによる入力からユーザへの出力までの時間の均一度であり,均一であるほど応答性能はよいものとされる。
【0005】
GCの間は,ユーザプログラムが停止している。GCの起動頻度が高いと,そのたびにユーザプログラムが停止するため,スループットは低下する。したがって,スループットを向上させるには,スループットを低下させる要因であるGCの起動頻度を少なくするために,ヒープサイズを大きくとることが望ましい。
【0006】
一方,応答性能を向上させるには,1回のGCの処理コストを小さくするために,ヒープサイズを小さくすることが望ましい。これは,1回のGCの処理コストが大きいとGCによってヒープがブロックされ,システムが停止してしまう時間が延びてしまうためである。ユーザからのトランザクションがあったときに,GC中でなければすぐに応答可能であるが,GC中であればGCが終了するまで応答不可能となる。1回のGCの処理コストが大きいと,GC中であった場合となかった場合とでユーザへ応答するまで時間が不均一となるため,応答性能は低下する。
【0007】
以上のような問題に対処するため,従来は,スループットを向上させるためには,ヒープサイズを大きくとることを考慮することで解決してきた。また,応答性能を向上させるためには,なるべくヒープサイズを小さくとることで解決してきた。しかし,これら相反する条件を同時に解決することは不可能であり,実際の運用において必要かつ最適なヒープサイズを求めることはきわめて困難であった。
【0008】
そのため,従来はヒープ不足が発生したときにはヒープサイズを増やし,膨大なヒープサイズによるGC性能劣化のため応答性能が悪化したときにはヒープサイズを減らし,そのたびに再起動を繰り返すしかなかった。
【0009】
また,従来の技術として,頻繁にGCを繰り返してオブジェクトのドラッグ時間(最終アクセスからGCで回収されるまでの無駄にヒープを使用する時間)を短くする技術があった(例えば,非特許文献2参照)。この技術は,タイムラグ(ここでは,ドラッグ時間のこと)を短くするための技術であり,JVM上のJavaアプリケーション側で対処する技術である。しかし,頻繁に起動するGCは処理的な負担が大きく,極端にスループットを低下させてしまうという問題があった。
【0010】
【非特許文献1】
ジェイムズ・ノーブル,チャールズ・ウィアー著,安藤慶一訳,「省メモリプログラミング メモリ制限のあるシステムのためのソフトウェアパターン集」,ピアソン・エデュケーション,p.269
【非特許文献2】
Ran Shaham,Elliot K.Kolodner,and Mooly Sagiv.,"On the Effectiveness of GC in Java." ,The 2000 International Symposium on Memory Management(ISMM'00),October 2000
【0011】
【発明が解決しようとする課題】
以上のような従来の方法では,任意のJavaアプリケーションを実行するときに,スループットと応答性能との双方のバランスをみて最適となる妥協点を自動的に求めることはできなかった。また,ヒープサイズの見積りの精度も悪く,最適なヒープサイズを見積もるまでには何度も試行を繰り返す必要があり,作業コストが膨大にかかってしまっていた。
【0012】
本発明は,上記問題点の解決を図り,GCを実装するコンピュータシステム(JVM等)において,スループットと応答性能とのバランスから,最適なヒープサイズを自動的に求めることができるヒープサイズ自動最適化手段を提供することを目的とする。
【0013】
【課題を解決するための手段】
本発明は,上記目的を達成するため,最適な応答性能となる点を求めるために,生存しているオブジェクト(ルートから到達可能なオブジェクト)を確保するための最低必要なヒープサイズを求め,応答性能を極端に悪化させない程度にスループットを向上させるために,オブジェクトの寿命をプロファイルして,例えば大半のオブジェクトが1回のGCで回収される(回収可能率が向上する)というような予め定められた基準またはスループット性能(不要オブジェクトの回収率)を優先するとか応答性能(ヒープ使用効率)を優先するとかいったオペレータが指定した基準に基づいてGCインターバルを調整し,最適なヒープサイズを求めることを特徴とする。
【0014】
具体的には,ガベージコレクション(GC)を実装するコンピュータシステムにおいて,全オブジェクトの寿命や固有情報のプロファイリングデータを分析することで最適なヒープサイズを求めるため,ロギング処理部,分析処理部,見積り処理部を持つ。ロギング処理部は,オブジェクトの寿命情報とサイズ情報とを収集する。分析処理部は,オブジェクトの寿命をもとに任意の時点で生存するオブジェクトのサイズを積み重ねることで,各時点の必要ヒープサイズを求める。必要ヒープサイズを時系列にそって推移させ,システム全体での最低必要なヒープサイズを求める。さらに見積り処理部では,最低必要ヒープサイズを上回る範囲で,GCによるゴミとなったオブジェクトの回収率と,システム全体で比較的最も多くのヒープサイズを占める寿命に合わせたGCインターバルとのバランスをみて最適なヒープサイズを求める。
【0015】
プロファイリングデータは,全オブジェクトでなくとも一部または一定期間のオブジェクトを対象としてもよい。寿命の単位は,実際の時間でも延べ割当てサイズ(オブジェクト生成時の総割当て量〜終了時の総割当て量を寿命とする)でもよい。すなわち,寿命の時間の尺度を,実際の時間〔秒〕を単位にしても延べ割当てサイズ〔byte〕を単位にしてもよい。
【0016】
以上のロギング処理部,分析処理部,見積り処理部による処理は,コンピュータとソフトウェアプログラムとによって実現することができ,そのプログラムをコンピュータ読み取り可能な記録媒体に記録することも,ネットワークを通して提供することも可能である。
【0017】
【発明の実施の形態】
本発明の実施の形態を説明するに先立ち,実施の形態の説明中で用いている言葉の意味について簡単に説明する。
「応答性能」:ユーザの入力からユーザへの出力時間の均一度。均一であるほど応答性能はよい。
「スループット性能」:単位時間内にアプリケーションが処理する仕事量。
「オブジェクト寿命」:オブジェクトが生成されてからオブジェクトの最終アクセスまでの時間(ここで時間とは,実際の時間または延べ割当てサイズ)。
「真のオブジェクト寿命」:オブジェクトが生成されてからそのオブジェクトに対し到達不能になるまでの時間。
「活動中ヒープサイズ」:ある一時点での,生成されてからアクセスされなくなるまでのオブジェクトの総量。
「指定ヒープサイズ」:システムに指定したヒープサイズ。
「使用ヒープサイズ」:ある一時点での,実際にヒープに存在するオブジェクトの総量。
「必要ヒープサイズ」:ある一時点での,オブジェクト生成から到達不能になるまでのオブジェクトの総量。
「到達不能オブジェクト」:ルートから到達できないオブジェクト。システムが不要とみなし次のGCで回収対象となるオブジェクト。
「プロファイル」:システム内の情報をロギング・分析すること。
「ドラッグ時間」:オブジェクトの最終アクセスからオブジェクトが回収されるまでの無駄にヒープを使用する時間。
「スレッドローカル」:あるオブジェクトを生成したスレッド以外のスレッドからアクセスされないこと。
【0018】
図1は,本発明の実施の形態に係るヒープサイズ自動最適化装置の構成例を示す。本実施の形態におけるヒープサイズ自動最適化装置1は,CPUおよびメモリなどからなるコンピュータであり,ソフトウェアプログラム等によって構成されるロギング処理部10,分析処理部20,見積り処理部30を備えている。ロギング処理部10は,プロファイル情報ロギングルーチン11を備え,分析処理部20は,データ整理部21,ソート部22,可視化部23を備える。
【0019】
ロギング処理部10は,オブジェクトの生成時,オブジェクトへのアクセス時,GCの開始時・終了時,メソッドの呼出し時・復帰時などに,プロファイル情報ロギングルーチン11により,オブジェクトのアドレス,サイズ,スレッド番号,タイムスタンプ等のレコードをプロファイル情報格納域40に記録する。ここで記録されたレコードをプロファイル情報という。
【0020】
分析処理部20は,ロギング処理部10で収集されたプロファイル情報を分析し,オブジェクトごとにアドレス,サイズ,生成スレッド,生成時刻,最終アクセス時刻,GC経験回数,スレッドスコープ等のオブジェクト情報を生成し,これをもとに,各オブジェクトの寿命を算出するとともに,生存するオブジェクトのサイズを積算することにより,各時点における必要ヒープサイズを算出する処理を行う。
【0021】
分析処理部20のデータ整理部21は,プロフィル情報格納域40から読み込んだプロファイル情報をオブジェクトごとにまとめてオブジェクト情報を生成し,オブジェクト情報格納域50に格納する処理を行う。ソート部22は,オブジェクト情報格納域50に格納されたオブジェクト情報を,種々の条件によりソートし,必要ヒープサイズデータ60やオブジェクト寿命特性70を算出する。可視化部23は,分析結果としての必要ヒープサイズデータ60やオブジェクト寿命特性70等のデータをグラフ化するなどして,目に見える形に編集し,ディスプレイやプリンタに出力する。図中の80は必要/使用ヒープサイズのグラフ,90はオブジェクト寿命分布のグラフである。
【0022】
見積り処理部30は,分析処理部20でのプロファイル情報の分析結果から,スループット性能および応答性能のバランスから予め定められた基準に従って,最適な指定ヒープサイズを自動的に見積もる。このとき,最適な指定ヒープサイズを決定する基準をユーザに指定させ,その基準に従って最適な指定ヒープサイズを自動的に見積もってもよい。
【0023】
図2は,本実施の形態におけるヒープサイズ自動最適化処理フローチャートである。まず,ロギング処理部10は,プロファイル情報ロギングルーチン11によって,オブジェクトの生成,オブジェクトのアクセス,GC開始/終了,オブジェクトの生存情報,メソッド呼出し/復帰等に関するレコードをログに記録し,そのログをプロファイル情報格納域40に出力する(ステップS1)。
【0024】
分析処理部20は,データ整理部21によって,プロファイル情報格納域40のログに記録されたレコードをobj構造体を用いてオブジェクトごとに整理し,オブジェクト情報としてオブジェクト情報格納域50に出力する(ステップS2)。また,分析処理部20は,ソート部22によって,オブジェクト情報格納域50のオブジェクト情報をソートし,必要ヒープサイズデータ60,オブジェクト寿命特性70を得る(ステップS3)。さらに,分析処理部20は,可視化部23によって,必要ヒープサイズデータ60から必要/使用ヒープサイズのグラフ80を,オブジェクト寿命特性70からオブジェクト寿命分布のグラフ90を作成し出力する(ステップS4)。
【0025】
見積り処理部30は,分析処理部20で得られたプロファイル情報の分析結果(必要ヒープサイズデータ60,オブジェクト寿命特性70など)から,最適な指定ヒープサイズを自動的に見積もる(ステップS5)。
【0026】
図3は,本実施の形態におけるプロファイル情報の収集契機とデータレコードの例を示す図である。特に図3(A)は,オブジェクトの生成から回収までの流れとGCとの関係およびプロファイル情報の収集契機を示している。また,図3(B)は,図3(A)の流れの中でログに記録されるレコードの形式(データレコード形式)の例を示している。図3において,“obj”は,それぞれ個々のオブジェクトを表している。
【0027】
ロギング処理部10により,プロファイル情報のレコードがログされる契機は,オブジェクトの生成時(レコードR1),オブジェクトのアクセス時(レコードR2),GCの開始・終了時(レコードR3,R6),GC処理時におけるオブジェクトの生存確認時(レコードR4,R5),オブジェクトのメソッド呼出し時(レコードR7),呼び出したメソッドからの復帰時(レコードR8)である。この他に,プロファイル期間の開始時および終了時にもログデータが出力される。
【0028】
図3(A)において,オブジェクトが生成されるとレコードR1がログに記録され,そのオブジェクトに参照または更新のアクセスがあるとレコードR2がログに記録され,以後,最終アクセスまで繰り返される。オブジェクトの生成からそのオブジェクトへの最終アクセスまでの時間をアクティブ時間(active time )という。
【0029】
オブジェクトへの最終アクセス後にルートから到達できなくなると,そのオブジェクトは到達不能(到達不能オブジェクト)となり,次のGCで回収される。オブジェクトへの最終アクセスからそのオブジェクトがGCにより回収されるまでの時間をドラッグ時間(drag time )という。
【0030】
GCの開始時,終了時にそれぞれレコードR3,R6をログに記録し,GCによって回収されない(GC後も生存する)オブジェクトのレコードR4,R5をログに記録する。あるGCの開始時刻から次のGCの開始時刻までをGCインターバルという。
【0031】
図3(B)において,obj−生成(レコードR1)は,オブジェクトが生成されたときに記録されるレコードを示す。このとき,生成されたオブジェクトのアドレス,サイズ,そのオブジェクトを生成したスレッドのスレッド番号,生成された時刻を示すタイムスタンプ等の情報がログに記録される。本実施の形態では,オブジェクトを識別するための情報としてアドレスを用いているが,他の識別情報を記録してもよい。
【0032】
obj−アクセス(レコードR2)は,オブジェクトのアクセスがあったときに記録されるレコードを示す。このとき,アクセスがあったオブジェクトのアドレス,サイズ,そのオブジェクトにアクセスしたスレッドのスレッド番号,アクセス時刻を示すタイムスタンプ等の情報がログに記録される。
【0033】
GC−開始(レコードR3),GC−終了(レコードR6)は,それぞれGCの開始時,GCの終了時に記録されるレコードを示す。GCの開始や終了の時刻を示すタイムスタンプ,GC終了直後の使用ヒープサイズ等の情報がログに記録される。時間の尺度が延べ割当てサイズ(単位は[byte])である場合には,GC終了時のタイムスタンプは不要である。
【0034】
ここで,延べ割当てサイズについて説明する。延べ割当てサイズは,生成されたオブジェクトのサイズを生成時刻順に累積したものである。生成されたオブジェクトのサイズを生成時刻順に累積したものは,時間の進行とともに単調増加する。この性質を時間の進行の表現に利用したものが,延べ割当てサイズである。延べ割当てサイズは,オブジェクトの生成により常に増加する値であり,GC後もリセットされない。したがって,寿命(時間)の尺度を,実際の時間としても,また延べ割当てサイズにしても,実質的には変わりはない。ただし,GCインターバルを定める場合などに,ヒープの使用効率を重視するときには,時間の間隔がヒープの使用量に応じて相対的に定まる延べ割当てサイズを尺度としたほうが好ましい。一方,応答性能などを実時間で保証する必要があるシステム等では,実際の時間を尺度としたほうが好ましい。
【0035】
例えば,延べ割当てサイズが0[byte]の状態から,
(1) オブジェクトA(サイズa[byte])の生成
(2) オブジェクトB(サイズb[byte])の生成
(3) オブジェクトAへのアクセス
(4) GCの開始・終了
(5) オブジェクトC(サイズc[byte])の生成
の順で実行されたとき,それぞれの時刻を延べ割当てサイズで表現すると,
(1) オブジェクトAの生成時刻・・・・・・0[byte]
(2) オブジェクトBの生成時刻・・・・・・a[byte]
(3) オブジェクトAへのアクセス時刻・・・a+b[byte]
(4) GCの開始時刻・終了時刻・・・・・・a+b[byte]
(5) オブジェクトCの生成時刻・・・・・・a+b[byte]
となる。
【0036】
図3(B)において,obj−生存(移動時)(レコードR4),obj−生存(レコードR5)は,GC中に,GC後も生存する(GCによって回収されない)オブジェクトが確認されたときに記録されるレコードを示す。生存するオブジェクトは,GCによって,その位置が移動する場合としない場合がある。GCによってオブジェクトの位置が移動する場合には,そのオブジェクトの移動元アドレス,移動先アドレス,サイズ等のレコードがログに記録され,GCによってオブジェクトの位置が移動しない場合には,そのオブジェクトのアドレス,サイズ等のレコードがログに記録される。
【0037】
method−呼出し(レコードR7),method−復帰(レコードR8)は,メソッドの呼出し/復帰があるときに記録されるレコードを示す。このとき,メソッドの呼出し/復帰が行われるスレッドのスレッド番号,メソッドに入ったとき/メソッドから抜けたときの時刻を示すタイムスタンプ,そのメソッド名等のレコードがログに記録される。後述するように,これらの情報を解析することにより,オブジェクト生成時のメソッドを知ることができるようになり,どのメソッドがヒープに負担をかけているかが分かるようになる。
【0038】
分析処理部20は,各オブジェクトの寿命を知るために,GCによって回収されたオブジェクトについて,図3のように記録されたオブジェクト生成時やオブジェクトアクセス時のプロファイル情報を分析する。
【0039】
ここで,オブジェクトの寿命とは,実際にはオブジェクトが生成されてから到達不能になるまでの期間のことをいい,時間または延べ割当てサイズの尺度で表現される。ところが,オブジェクトの到達不能点でのレコードの記録がないため,到達不能点までのオブジェクトの寿命をプロファイル情報から直接的には得ることができない。そこで,本実施の形態では,オブジェクトの生成点から最終アクセスまでをオブジェクトの寿命(以下,単に「オブジェクト寿命」という)とし,オブジェクトが生成されてから到達不能になるまでの真のオブジェクトの寿命(以下,「真のオブジェクト寿命」という)は,オブジェクト寿命から以下で説明するように推定する。
【0040】
GC直後の総生存オブジェクトサイズをSg とし,GC直後の活動中ヒープサイズをSa とすると,ドラッグ時間中の到達可能オブジェクトを示す最終アクセス点から到達不能点までの期間は,
の式で概算することができる。
【0041】
(式1)において,GC直後の総生存オブジェクトサイズ(Sg )は,GC直後に生成点から到達不能点までの間の状態にあるオブジェクトの総サイズであり,GC直後の活動中ヒープサイズ(Sa )は,GC直後に生成点から最終アクセス点までの状態にあるオブジェクトの総サイズである。GC直後のドラッグ時間中の総オブジェクトサイズは,GC直後に最終アクセス点から到達不能点までの間の状態にあるオブジェクトの総サイズである。
【0042】
GC直後の活動中ヒープサイズ(Sa )に対するGC直後の総生存オブジェクトサイズ(Sg )の値をドラッグ係数(K)とし,
K=Sg /Sa (式2)
の式で求める。
【0043】
必要ヒープサイズは,前述したようにある時点での生成点から到達不能点までの状態にあるオブジェクトの総サイズを示し,その時点での生成点から最終アクセス点までの状態にあるオブジェクトの総サイズである活動中ヒープサイズと,(式2)で求めたドラッグ係数(K)とから,
必要ヒープサイズ=活動中ヒープサイズ×K (式3)
の式で求められる。ここで,GC直後の必要ヒープサイズは,GC直後の総生存オブジェクトサイズ(Sg )と同値である。
【0044】
図4は,本実施の形態における活動中ヒープサイズSat,必要ヒープサイズSgt,使用ヒープサイズSu および指定ヒープサイズSr の時間変化の例を説明する図である。図中,実線で描かれた曲線は活動中ヒープサイズSatを示し,波線で描かれた曲線は必要ヒープサイズSgtを示す。のこぎり型の点線は使用ヒープサイズSu を示し,上部の実線で描かれた直線は指定ヒープサイズSr を示す。使用ヒープサイズSu が指定ヒープサイズSr に達したときに,GCが実行される。
【0045】
GCが行われるごとに,GC直後の活動中ヒープサイズ(Sa )とGC直後の総生存オブジェクトサイズ(Sg )との比からドラッグ係数(K)が求められ((式2)参照),その後の各時刻における活動中ヒープサイズSatにドラッグ係数(K)を乗じることにより((式3)参照),各時刻における必要ヒープサイズSgtが計算される。
【0046】
ここで,ドラッグ係数(K)を求める式は(式2)に限らない。例えば,時刻t1 におけるGC直後の活動中ヒープサイズとGC直後の総生存オブジェクトサイズとをそれぞれSa1,Sg1とし,時刻t2 におけるGC直後の活動中ヒープサイズとGC直後の総生存オブジェクトサイズとをそれぞれSa2,Sg2としたとき,時刻tn におけるドラッグ係数(Kn )を,
の式で求めることもできる。
【0047】
図4において,二点破線で示されているのが必要ヒープサイズの最大値であり,この値を最低必要なヒープサイズSm とする。指定ヒープサイズSr は,最低必要なヒープサイズSm まで縮小することが可能である。指定ヒープサイズSr が最低必要なヒープサイズSm に近いほどGCインターバルが短くなり,頻繁にGCが行われるようになる。指定ヒープサイズSr が最低必要なヒープサイズSm から遠いほどGCインターバルが長くなり,1回のGCの開始から終了までの時間が長くなる。
【0048】
分析処理部20は,以上の(式2)または(式4)によるドラッグ係数(KまたはKn )を,オブジェクトの生成点から最終アクセスまでのオブジェクト寿命に乗じることにより,真のオブジェクト寿命を推定する。
【0049】
図5は,本実施の形態におけるオブジェクトの寿命によるヒープサイズの調整を説明する図である。図5に示すグラフでは,横軸に延べオブジェクトサイズをとり,縦軸にオブジェクトの寿命をとっている。各オブジェクトを寿命の短い順にソートし,オブジェクトの寿命と延べオブジェクトサイズとの関係をプロットしたものが,図5に示す曲線(オブジェクト寿命分布曲線という)である。図5のグラフで一番右側にある“死なないオブジェクト”は,GCで回収されないオブジェクトであり,分析処理部20によってその寿命を求めることができないため,無視する。
【0050】
ここで,延べオブジェクトサイズ(以下,単に延べサイズという)は,寿命の短い順に各オブジェクトのサイズを加えていったものである。例えば,
オブジェクトA:寿命20[byte],サイズa[byte]
オブジェクトB:寿命250[byte],サイズb[byte]
オブジェクトC:寿命48[byte],サイズc[byte]
というオブジェクトがあったときに,これらのオブジェクトを寿命の短い順に並べると,オブジェクトA,C,Bの順になり,それらの延べオブジェクトサイズは,
オブジェクトA:延べサイズa[byte]
オブジェクトC:延べサイズa+c[byte]
オブジェクトB:延べサイズa+c+b[byte]
となる。
【0051】
図5のグラフにおいて,中ほどにある縦の太線は,オブジェクト寿命分布曲線上で,オブジェクト寿命がGCインターバルの長さになる延べオブジェクトサイズを示し,その太線より左にある(寿命の短い)オブジェクトは2回目のGCを経験させずに回収できることを示している。プロファイルされたオブジェクトの総サイズに対する太線の位置の延べサイズの割合を回収可能率という。
【0052】
GCインターバルを長くとると,図5において太線の位置がより右の位置となり,より寿命の長いオブジェクトも2回目のGCを経験させずに回収することができるようになる。1回のGCの開始から終了までの時間が長くなるが,GCを行う頻度が低くなるため,スループットが向上する。
【0053】
GCインターバルを短くとると,図5において太線の位置がより左側の位置となり,回収されるまで2回以上のGCを経験するオブジェクトが増えることになる。GCの頻度が高くなるが,1回のGCの開始から終了までの時間が短くなるため,応答性能が向上する。
【0054】
見積り処理部30は,分析処理部20でのプロファイル情報の分析結果から,最適な指定ヒープサイズSr を自動的に見積もる。このとき,最適な指定ヒープサイズを決定する基準は,システムまたはアプリケーション開発者があらかじめ定めておくことができる。また,最適な指定ヒープサイズを決定する基準をアプリケーションのユーザに指定させ,その基準に従って最適な指定ヒープサイズを自動的に見積もってもよい。
【0055】
例えば,ユーザによる最適な指定ヒープサイズを決定する基準の指定が,GCインターバルを決定するための基準であれば,図5に示すようなオブジェクトの寿命の分布をもとに,最適なタイミングでGCを行うためのGCインターバル(以下,最適なGCインターバルという)を決定する。
【0056】
次に,決定された最適なGCインターバルから,最適な指定ヒープサイズを求める。例えば,プロファイル時のGCインターバルの2倍の値が最適なGCインターバルであるならば,単純にプロファイル時の指定ヒープサイズを2倍の値に増やしたものが最適な指定ヒープサイズとなる。同様に,プロファイル時のGCインターバルの半分が最適なGCインターバルであるならば,プロファイル時の指定ヒープサイズの半分が最適な指定ヒープサイズとなる。
【0057】
ここで,以上の本実施の形態によるヒープサイズの最適化による効果を,前述の非特許文献2との比較により,考察する。
【0058】
前述の非特許文献2のように,頻繁にGCを繰り返してドラッグ時間を短くすることで,
“生成点から到達不能点までの時間”≒“生成点から回収点までの時間”
とし,“生成点から到達不能点までの時間”を近似値で求める方法があるが,頻繁に起動するGCは処理的な負担が大きく,極端にスループットを低下させてしまう。それに対し,本発明による実施の形態では,GCの起動回数を必要以上に増加させることはないので極端にスループットが低下することはない。
【0059】
さらに,オブジェクトプロファイル技術に関しては,前述の非特許文献2では,プロファイル手段として,オブジェクトの生成時やオブジェクトへのアクセス時の情報を,そのオブジェクト内にプロファイル用フィールドを持たせてそこに収集しているため,プロファイル処理がヒープ管理へ影響を与えてしまい,指定ヒープサイズと実際の使用可能なヒープサイズとが異なってしまう。それに対し,本発明による実施の形態では,オブジェクトの生成時やオブジェクトへのアクセス時の情報を,その機会にオブジェクトを識別するためのアドレスとともに別領域へ格納するため,使用可能なヒープサイズに影響を与えずに済む。
【0060】
また,付加的なプロファイル情報として,メソッド呼出し・復帰に関する情報(図3(B)におけるmethod−呼出し,method−復帰のレコード(レコードR7,R8))を追加することにより,どのメソッドがヒープに負担をかけているかを知ることができる。
【0061】
図6は,本発明の実施の形態におけるヒープに負担をかけているメソッドの調査を説明する図である。図6(A)は,メソッドによるオブジェクト生成およびメソッドの呼出し・復帰の状況を示す図であり,図6(B)は,図6(A)における各メソッドとそれらのメソッドが生成するオブジェクトとの関係を時系列で表したものである。メソッドの呼出し時・復帰時のタイムスタンプを記録することにより,どのメソッドがオブジェクトを生成したかを容易に知ることができる。
【0062】
図6(A)において,メソッドxxxは,オブジェクトAを生成し,メソッドyyyを呼び出す。メソッドyyyは,オブジェクトDを生成し,メソッドzzzを呼び出す。メソッドzzzは,オブジェクトGを生成し,メソッドyyyに復帰する。メソッドyyyは,オブジェクトEを生成し,メソッドxxxに復帰する。メソッドxxxは,オブジェクトBを生成し,メソッドyyy2を呼び出す。メソッドyyy2は,オブジェクトFを生成し,メソッドxxxに復帰する。メソッドxxxは,オブジェクトCを生成する。
【0063】
このような図6(A)の状況において,スレッド番号,メソッド名とともにメソッド呼出し時・復帰時のタイムスタンプをログに出力することにより図6(B)のような生成されたオブジェクトの時間的順序を得ることができ,図6(B)からオブジェクト生成時のメソッドを知ることができる。これにより,どのメソッドがヒープに負担をかけているのかを容易に調査できるようになる。
【0064】
また,オブジェクトを生成したスレッドの情報(スレッド番号等)と,オブジェクトにアクセスしたスレッドの情報(スレッド番号等)とを,ログに記録することにより,そのオブジェクトがスレッドローカルなオブジェクトであるか,スレッドグローバルなオブジェクトであるかを知ることができる。
【0065】
以下,図1に示すヒープサイズ自動最適化装置1の構成および動作をさらに詳しく説明する。
【0066】
図7は,本実施の形態におけるロギング処理を示す図である。ロギング処理部10のプロファイル情報ロギングルーチン11は,Javaスレッド100上でメソッドの呼出し・復帰が行われたとき(ステップS101),オブジェクトが生成されたとき(ステップS102),オブジェクトの参照・更新(オブジェクトへのアクセス)があったとき(ステップS103)に,図3(B)に示すデータレコード形式でレコードをログに記録し,そのログをプロファイル情報格納域40に出力する。
【0067】
Javaスレッド100上でオブジェクトが生成されるとき(ステップS102)に,ヒープが不足したならば(ステップS104),GCを起動する。
【0068】
プロファイル情報ロギングルーチン11は,GCスレッド110上でGCが開始されたとき(ステップS111),GCにおいて生存オブジェクトが確認されたとき(ステップS112),GCが終了したとき(ステップS113)に,それぞれ図3(B)に示すデータレコード形式でレコードをログに記録し,そのログをプロファイル情報格納域40に出力する。
【0069】
ここで,プロファイル情報格納域40が保有する情報量を小さくするために,プロファイル情報(ログに記録するレコード)を間引くことも可能である。例えば,アドレスをキーにして公平にサンプリングすることができるように,
((Ratio>99‖Ratio<1)‖
(int((addr+1)×Ratio/100)
−int(addr×Ratio/100)) (式5)
の式が成立つときにロギングするようにすればよい。(式5)において,“‖”は,orを示す。int(X)は,Xの整数部分を表す。addrはオブジェクトのアドレスを表し,Ratioは,何%の割合でレコードをロギングするかの比を表す。例えば,Ratio=50(%)のとき,2回に1回の割合でレコードがロギングされることになる。Ratio=30(%)なら,10回に3回の割合でレコードがロギングされる。
【0070】
また,システムを起動したときから常時すべてのプロファイル情報を採取するのではなく,ある期間のみ採取するようにしてもよい。実際にプロファイルを常時行うことにより得られるレコードの量は膨大なものであり,すべてを蓄積することは困難である。したがって,ある一定期間に限ってプロファイルを行う機能を設けることが望ましい。そこで,例えばプロファイル開始/終了コマンドにより,プロファイル情報の採取期間を指定することができるようにする。
【0071】
図8に,アプリケーション実行途中からプロファイルを開始するときの例を示す。アプリケーション実行中の途中からプロファイルを開始するときには,プロファイルの開始時点において使用ヒープサイズSu や必要ヒープサイズの初期値Sg0を把握する必要がある。そこで,プロファイル開始時には,強制的にGCを起動する。これにより,ロギング開始以前に生成されていたオブジェクトの総サイズがわかる。その後,プロファイル終了までの間に生成/回収されたオブジェクトに関してプロファイル情報を収集する。プロファイル開始時と同様に,プロファイル終了時にも強制的にGCを起動する。これによって,必要ヒープサイズSgtを逆算できるようになり,採取期間の前後の状態によらずに,ロギング開始から終了までの間の必要ヒープサイズSgtを求めることが可能になる。
【0072】
なお,図3では説明を省略したが,プロファイルをアプリケーションの実行途中で開始し実行途中で終了する場合には,そのプロファイル期間の開始時および終了時に,プロファイル−開始(レコードR9),プロファイル−終了(レコードR10)のレコードをタイムスタンプ等の情報を付加してログに記録する。
【0073】
ロギング処理部10が収集したプロファイル情報には,1つのオブジェクトについてオブジェクトの生成,オブジェクトのアクセス等,複数のレコードが存在する。そこで,それらの情報をオブジェクトごとにまとめるために,分析処理部20において,データ整理部21は,オブジェクトごとにその情報を格納するためのobj構造体を用意する。そして,プロファイル情報格納域40からログを取得し,そのログからレコードを取り出して該当するオブジェクトのobj構造体に記録し,そのobj構造体をオブジェクト情報格納域50に格納する。ここで,obj構造体が持つ情報をオブジェクト情報という。
【0074】
図9は,本実施の形態におけるデータ整理部21の処理を示す図である。図9(A)はデータ整理処理の流れを示し,図9(B)はobj構造体の例を示す。図9(C)はオブジェクト生成時,オブジェクトアクセス時,GC時に更新されるobj構造体のデータ部のメンバを示す。図9(D)はobj構造体の推移を示す。
【0075】
データ整理部21は,図9(A)に示すように,プロファイル情報格納域40に格納されているレコードが終了するまで(ステップS202),プロファイル情報格納域40に格納されたログから,1レコードを取り出す処理(ステップS200)と,取り出したレコードに対する処理とを繰り返す(ステップS201)。
【0076】
図9(A)のステップS201におけるレコードに対する処理において,オブジェクトごとにプロファイル情報を整理するために,オブジェクトごとに図9(B)に示すようなobj構造体が用意される。図9(B)の例のobj構造体において,ヘッダ部の“left”,“right”,“parent”,“balance”は,常にバランスの取れた2分木(AVLバランス木)を構成するための情報である。
【0077】
データ部において,“addr”はオブジェクトのアドレスを示し,“size”はオブジェクトのサイズを示し,“new_thread”はオブジェクトを生成したスレッドを示す。“new_time”はオブジェクトが生成された時刻を示し,“last_time”はオブジェクトへの最終アクセスの時刻を示す。“age”はオブジェクトが経験したGCの回数を示す。“is_global”はオブジェクトにアクセスしたスレッドがオブジェクトを生成したスレッドと違うかどうか(スレッドスコープ)を示す。
【0078】
図9(C)に示すように,obj構造体のうち,オブジェクト生成時(new)に更新されるメンバは“addr”,“size”,“new_thread”,“new_time”である。また,オブジェクトアクセス時(acc)に更新されるメンバは“last_time”,“is_global”である。GC時(GC)に更新されるメンバは“age”である。
【0079】
図9(D)に示すように,obj構造体は,“生存オブジェクト”,“GC待ちオブジェクト”,“回収済オブジェクト”の3つの状態を推移し,各obj構造体は,「生存オブジェクト集合」,「GC待ちオブジェクト集合」,「回収済オブジェクト集合」の3つの集合のいずれかの状態にある。
【0080】
以下,図9(A)のステップS201におけるレコード処理について,その例を説明する。ここでは,図3(B)に示すレコードごとに説明する。
【0081】
レコードR1(obj−生成)の場合:
(1) プロファイル情報格納域40のログからobj−生成時のレコード(アドレス,サイズ,スレッド番号,タイムスタンプ)を取り出す。
(2) 「回収済オブジェクト集合」から空のobj構造体を1つ取り出す。空のobj構造体がない場合には,新規に用意する。
(3) 取り出した空のobj構造体に“addr”,“size”,“new_thread”,“new_time”を設定し,そのobj構造体を「生存オブジェクト集合」に登録する。
【0082】
レコードR2(obj−アクセス)の場合:
(1) プロファイル情報格納域40のログからobj−アクセス時のレコード(アドレス,サイズ,スレッド番号,タイムスタンプ)を取り出す。
(2) 「生存オブジェクト集合」から該当するobj構造体を取り出す。
(3) obj構造体の“last_time”を更新し,取り出されたレコードのスレッド番号がオブジェクト生成時のスレッド番号である“new_thread”と異なる場合には,“is_global”に「真」を設定する。取り出されたレコードのスレッド番号が匿名番号であった場合には,“is_global”は更新せず,“new_thread”を更新する。
【0083】
レコードR3(GC−開始)の場合:
(1) プロファイル情報格納域40のログからGC−開始のレコード(タイムスタンプ)を取り出し,オブジェクト情報格納域50に出力する。
(2) 「生存オブジェクト集合」の全obj構造体を「GC待ちオブジェクト集合」に移す。
【0084】
レコードR4,R5(obj−生存(移動時),obj−生存)の場合:
(1) プロファイル情報格納域40のログからobj−生存(移動時)のレコード(移動元アドレス,移動先アドレス,サイズ)またはobj−生存のレコード(アドレス,サイズ)を取り出す。
(2) 「GC待ちオブジェクト集合」から該当するobj構造体を取り出し,“age”に1を加えて,そのobj構造体を「生存オブジェクト集合」に登録する。プロファイル開始時のGCでは,「生存オブジェクト集合」にobj構造体が存在しないため,「回収済オブジェクト集合」から空のobj構造体を1つ取り出し(空のobj構造体がない場合には,新規に用意し),“new_time”にプロファイルの開始時刻を,“new_thread”に匿名番号を設定し,取り出されたレコードにより“addr”,“size”を設定し,そのobj構造体を「生存オブジェクト集合」に登録する。
【0085】
レコードR6(GC−終了)の場合:
(1) プロファイル情報格納域40のログからGC−終了のレコード(タイムスタンプ,GC直後の使用ヒープサイズ)を取り出し,オブジェクト情報格納域50に出力する。
(2) 「GC待ちオブジェクト集合」に残ったすべてのobj構造体が持つオブジェクト情報を,オブジェクト情報格納域50に出力する。
(3) オブジェクト情報格納域50にオブジェクト情報を出力したobj構造体を,「回収済オブジェクト集合」に移し,再利用可能にしておく。
【0086】
レコードR7(method−呼出し)の場合:
(1) プロファイル情報格納域40のログからmethod−呼出しのレコード(スレッド番号,タイムスタンプ,メソッド名)を取り出し,オブジェクト情報格納域50に出力する。
【0087】
レコードR8(method−復帰)の場合:
(1) プロファイル情報格納域40のログからmethod−復帰のレコード(スレッド番号,タイムスタンプ,メソッド名)を取り出し,オブジェクト情報格納域50に出力する。
【0088】
分析処理部20において,ソート部22は,オブジェクト情報格納域50から,オブジェクトごとに整理されたオブジェクト情報(“addr”,“size”,“new_thread”,“new_time”,“last_time”,“age”,“is_global”等)を入力し,それらのオブジェクト情報を様々な条件でソートすることにより,必要ヒープサイズの推移やオブジェクト寿命の特性などをプロファイルする。
【0089】
図10は,本実施の形態におけるオブジェクト情報の例を示す図である。各obj構造体は,オブジェクトごとに整理された“addr”,“size”,“new_thread”,“new_time”,“last_time”,“age”,“is_global”のオブジェクト情報を持っている。以下,この図10の例に示す3つオブジェクトのオブジェクト情報をソートする例を説明する。
【0090】
図11は,本実施の形態における使用ヒープサイズおよび活動中ヒープサイズの推移を調査するためのソート例を示す図である。
【0091】
まず,ソートする前に,図10の各オブジェクト情報を図11(A)のように生成時の情報と最終アクセス時の情報の2つのレコードに分ける。図11(A)において,addr欄にはオブジェクト情報の“addr”を記録する。time欄には,生成時の情報の場合にはオブジェクト情報の“new_time”を,最終アクセス時の場合にはオブジェクト情報の“last_time”を記録する。total’欄は使用ヒープサイズを求めるための情報の記録欄であり,生成時の情報の場合にはオブジェクト情報の“size”を,最終アクセス時の場合には0を記録する。max’欄は活動中ヒープサイズを求めるための情報の記録欄であり,生成時の情報の場合にはオブジェクト情報の“size”を,最終アクセス時の場合にはオブジェクト情報の“size”の符号をマイナスにしたものを記録する。
【0092】
図11(B)は,図11(A)をtime欄の値が昇順になるようにソートした結果を示している。図11(C)は,図11(B)のtotal’欄とmax’欄とについて時系列順に計上したものを,それぞれtotal欄とmax欄に記録したものである。図11(C)において,total欄は使用ヒープサイズの推移を示し,max欄は,活動中ヒープサイズの推移を示している。
【0093】
ここで,図11(C)の例には記録されていないが,途中でGCが発生したときには,使用ヒープサイズ(total)から回収されたオブジェクトサイズ分を差し引くか,または,GC直後の使用ヒープサイズにリセットする。オブジェクト情報格納域50に格納されたGC開始時・終了時のタイムスタンプのデータを,図11(A)〜(C)中でソートするデータとして盛り込んでもよい。
【0094】
以上の使用ヒープサイズ,活動中ヒープサイズ等の推移の情報は,必要ヒープサイズデータ60に記録される。また,図11(C)において,各活動中ヒープサイズの値(max欄の値)に,前述のドラッグ係数(K,Kn )を乗じることにより,必要ヒープサイズの推移を確認することができる。このようにして得られた必要ヒープサイズの推移の情報を,使用ヒープサイズ,活動中ヒープサイズ等の推移の情報とともに必要ヒープサイズデータ60に記録してもよい。
【0095】
このとき,データ量を削減するために,複数レコードの中から代表するレコードのみを出力することも可能である。例えば,データ量を1/10に圧縮したいならば,時系列に並ぶ10レコードのうち必要ヒープサイズが最も大きいレコードのみを出力すればよい。圧縮比率は,必要ヒープサイズデータ60のサイズによって自由に変えることができる。
【0096】
図12は,本実施の形態におけるオブジェクト寿命特性を得るためのソート例を示す図である。addr欄にはオブジェクト情報の“addr”が記録され,size欄にはオブジェクト情報の“size”が記録される。longevity欄はオブジェクト寿命の記録欄であり,オブジェクト情報の“new_time”と“last_time”との差が記録される。図12では,longevity欄が昇順になるようにソートされている。
【0097】
図12において,各オブジェクト寿命の値(longevity欄の値)に,前述のドラッグ係数(K,Kn )を乗じることにより,各オブジェクトの真のオブジェクト寿命を得ることができる。各オブジェクトのオブジェクト寿命と真のオブジェクト寿命とは,オブジェクト寿命特性70に記録される。このとき,オブジェクト寿命または真のオブジェクト寿命のいずれか一つを記録するようにしてもよい。
【0098】
このとき,データ量を削減するために,複数レコードの中から代表する1レコードのみを出力することも可能である。例えば,データ量を1/10に圧縮したいならば,寿命が短い順に10レコード目のレコードのみを出力すればよい。このようにすれば,隣り合ったレコードの寿命長が近い値であるため,等間隔で間引くことができる。圧縮比率は,オブジェクト寿命特性70のサイズによって自由に変えることができる。
【0099】
以上の図11,図12の例では,オブジェクト情報のうち“new_thread”,“age”,“is_global”のデータを使用していないが,これらのデータは別の観点でのオブジェクトの傾向を掴む場合に使用する。また,オブジェクト情報格納域50に格納されたメソッド呼出し時・復帰時のスレッド番号,タイムスタンプ,メソッド名等のデータも使用していないが,これらのデータも別の観点での傾向を掴む場合に使用する。必要なときには,これらのデータもソートするデータとして盛り込むことが可能である。
【0100】
分析処理部20において,可視化部23は,必要ヒープサイズデータ60,オブジェクト寿命特性70を入力し,それぞれを表計算ソフトウェアなどで用いられている手法を利用してグラフ化する。必要ヒープサイズデータ60から必要/使用ヒープサイズのグラフ80が作成され,オブジェクト寿命特性70からオブジェクト寿命分布のグラフ90が作成される。このとき,グラフ化を容易にするため,必要な情報が損なわれない範囲内で,データ量(レコード数)を削減してもよい。
【0101】
図13は,本実施の形態における必要/使用ヒープサイズのグラフの例を示す図である。図13では,使用ヒープサイズと必要ヒープサイズの推移がグラフ化されているが,それに限らない。例えば,使用ヒープサイズと活動中ヒープサイズの推移をグラフ化してもよいし,使用ヒープサイズと活動中ヒープサイズと必要ヒープサイズの推移をグラフ化してもよい。また,図13の例では時間の尺度として延べ割当て量(延べ割当サイズ)[Mbyte]が用いられているが,実際の時間[秒]を用いてもよい。
【0102】
図13において,使用ヒープサイズの頂点が指定ヒープサイズであり,そこに使用ヒープサイズが達するとGCが実行される。この図では,8[Mbyte]ぐらいに指定ヒープサイズが設定されている。
【0103】
図14は,本実施の形態におけるオブジェクト寿命分布のグラフの例(1)を示す図である。各オブジェクトが寿命長でソートされ,寿命が短い順に,オブジェクトの延べサイズと寿命との関係がプロットされている。図14の例では,寿命の尺度として延べ割当サイズ[Mbyte]が用いられているが,実際の時間[秒]を用いてもよい。また,オブジェクトの寿命としては,オブジェクト寿命を用いてもよいし,真のオブジェクト寿命を用いてもよい。
【0104】
図15は,本実施の形態におけるオブジェクト寿命分布のグラフの例(2)を示す図である。図15のグラフは,図14のグラフを視覚的に分かりやすくするために,縦軸を対数目盛りにしたものである。延べサイズが4[Mbyte]以上のデータのみをプロットしている。縦軸を対数目盛りで表示するか否かは,メニューなどにより選択することができる。
【0105】
見積り処理部30は,分析処理部20で得られたプロファイル情報の分析結果から,最低必要なヒープサイズ(Sm ),プロファイル時のGCインターバル(Ir ),最適なGCインターバル(Ii )を求め,それらの求められた値とプロファイル時の指定ヒープサイズ(Sr )とから最適な指定ヒープサイズ(Si )を自動的に見積もる。
【0106】
図16は,本実施の形態における見積り処理フローチャートである。図16の例は,最適な指定ヒープサイズを決定する基準が回収可能率で指定された場合の例である。
【0107】
まず,必要ヒープサイズデータ60から,必要ヒープサイズの最大値である最低必要なヒープサイズ(Sm )を求める(ステップS301)。このとき,例えば,各時刻の活動中ヒープサイズにドラッグ係数(K,Kn )を乗じて得られた必要ヒープサイズが必要ヒープサイズデータ60に記録されていれば,その最大値を最低必要なヒープサイズ(Sm )とし,必要ヒープサイズが必要ヒープサイズデータ60に記録されていなければ,活動中ヒープサイズの最大値にドラッグ係数(K,Kn )を乗じて得られた値を最低必要なヒープサイズ(Sm )とする。
【0108】
次に,オブジェクト情報格納域50に格納されているGC開始時・終了時のタイムスタンプから,プロファイル時のGCインターバル(Ir )を求める(ステップS302)。このとき,例えば,プロファイル期間中のGCインターバルの平均値などを求め,それをプロファイル時のGCインターバル(Ir )とすればよい。
【0109】
次に,ユーザから指定された最適な指定ヒープサイズを決定する基準と,オブジェクト寿命特性70とから,最適なGCインターバル(Ii )を求める(ステップS303)。
【0110】
例えば,ユーザから指定された回収可能率が80%(寿命の短いオブジェクトから延べサイズで80%のオブジェクトが2回目のGCを経験しない)であったなら,オブジェクト寿命特性70で寿命が短いオブジェクトから延べサイズで80%目にあたるオブジェクトのデータを抽出し,そのオブジェクトの寿命長を最適なGCインターバル(Ii )とする。
【0111】
このとき,例えば,各オブジェクトのオブジェクト寿命にドラッグ係数(K,Kn )を乗じて得られた真のオブジェクト寿命がオブジェクト寿命特性70に記録されていれば,寿命が短いオブジェクトから延べサイズで80%目に当たるオブジェクトの真のオブジェクト寿命を最適なGCインターバル(Ii )とし,真のオブジェクト寿命がオブジェクト寿命特性70に記録されていなければ,寿命が短いオブジェクトから延べサイズで80%目にあたるオブジェクトのオブジェクト寿命にドラッグ係数(K,Kn )を乗じて得られた値を最適なGCインターバル(Ii )とすればよい。
【0112】
次に,プロファイル時の指定ヒープサイズ(Sr )と,ステップS302で求めたプロファイル時のGCインターバル(Ir )と,ステップS303で求めた最適なGCインターバル(Ii )とから,
Si =Sr ×Ii /Ir (式6)
の式で,最適な指定ヒープサイズ(Si )を求める(ステップS304)。ここで,プロファイル時の指定ヒープサイズ(Sr )に関しては,予めプロファイル時にその値を記録しておけばよい。
【0113】
ステップS301で求めた最低必要なヒープサイズ(Sm )よりステップS304で求めた最適な指定ヒープサイズ(Si )の方が小さければ(ステップS305),ステップS301で求めた最低必要なヒープサイズ(Sm )を最適な指定ヒープサイズ(Si )とする(ステップS306)。そうでなければ,ステップS304で求めたSi を最適な指定ヒープサイズとする。
【0114】
本実施の形態におけるヒープサイズ自動最適化装置1により得られた情報は,ディスプレイ等により,ユーザに提示される。以下,ユーザに情報を提示する画面の例を図面を用いて説明する。
【0115】
図17は,本実施の形態におけるユーザ提示する情報のメニュー画面の例を示す。図17のメニュー画面では,最適ヒープサイズ,プロファイルデータ,オブジェクトデータ,オブジェクトリスト,メソッドリストの各メニュー項目ボタンから表示したい情報を選択することができる。
【0116】
図18は,本実施の形態における最適ヒープサイズ画面の例を示す図である。図18において,必要/使用ヒープサイズの部分(画面左側上部)には,そのグラフ80と必要ヒープサイズデータ60とが表示されている。また,オブジェクト寿命分布の部分(画面左側下部)には,そのグラフ90とオブジェクト寿命特性70が表示されている。ここで,必要ヒープサイズデータ60やオブジェクト寿命特性70のデータを選択することにより,必要/使用ヒープサイズのグラフやオブジェクト寿命分布のグラフの選択されたデータに該当する部分に敷居線を表示させることができる。
【0117】
画面の右側中央部は,ユーザが最適な指定ヒープサイズを決定する基準を指定する部分であり,選択された基準によって自動的に見積もられた最適な指定ヒープサイズの値が,右側下部の最適ヒープサイズの部分に表示される。
【0118】
最適な指定ヒープサイズを決定する基準を指定する部分において,「最大GC期待回数」を選択すると,すべてのオブジェクトに指定された回数を越えたGCを経験させないように最適なGCインターバルが決定され,それをもとに最適な指定ヒープサイズが自動的に見積もられる。
【0119】
最適な指定ヒープサイズを決定する基準を指定する部分において,「最低ヒープサイズ」を選択すると,最低必要なヒープサイズが最適な指定ヒープサイズであるとして自動的に見積もられる。
【0120】
最適な指定ヒープサイズを決定する基準を指定する部分において,「推奨ヒープサイズ」を選択すると,スループットと応答性能とのバランスがよい状態になるようにシステムが予め定めた最適な指定ヒープサイズを自動的に見積もる。ここでは,大半のオブジェクト(例えば90%)のオブジェクトが1回だけGCを経験するような指定ヒープサイズになるように,見積り値が決定される。
【0121】
最適な指定ヒープサイズを決定する基準を指定する部分において,「スループット重視」を選択すると,スループットを重視して最適な指定ヒープサイズを見積もる。例えば,指定されたレベルのスループットを実現するのに最適なGCインターバルが決定され,それをもとに最適な指定ヒープサイズが自動的に見積もられる。
【0122】
最適な指定ヒープサイズを決定する基準を指定する部分において,「レスポンス重視」を選択すると,レスポンス(応答性能)を重視して最適な指定ヒープサイズを見積もる。例えば,指定されたレベルのレスポンスを実現するのに最適なGCインターバルが決定され,それをもとに最適な指定ヒープサイズが自動的に見積もられる。
【0123】
図19は,本実施の形態におけるプロファイルデータ画面の例を示す図である。図19に示す画面において,1行目から23行目まではオブジェクト生成時,オブジェクトアクセス時のプロファイルデータ(プロファイル情報)の例であり,24行目はGC開始時のプロファイルデータの例であり,25行目から29行目がGC後も生存するオブジェクトのプロファイルデータの例である。一番左の番号は,レコードを識別するために順に振られた番号である。図19では,時刻は延べ割当てサイズで記載されている。
【0124】
1行目から23行目において,左から2列目のデータはそのレコードが何のレコードであるかを示し,図19の例では,“new”がオブジェクト生成時のレコードであることを示し,“putfield”,“getfield”がオブジェクトアクセス(更新/参照)時のレコードであることを示す。次のコロンに続くデータは,オブジェクトのアドレスを示し,括弧内はオブジェクトのサイズを示す。次のデータは,オブジェクト生成時,オブジェクトアクセス時のスレッド番号であり,一番右側のデータはタイムスタンプである。
【0125】
24行目において,左から2列目のデータはGCが開始されたことを示す。左から3列目のデータは,GC開始時のタイムスタンプを示す。25行目から29行目において,左から2列目のデータ(“move”)は,GC後も生存するオブジェクトの移動を示し,次のコロンに続くデータは移動元アドレスを,一番右側のデータは移動先アドレスを示す。
【0126】
図20は,本実施の形態におけるオブジェクトデータ画面の例を示す図である。図20において,オブジェクトごとのオブジェクトデータ(オブジェクト情報)は,オブジェクト番号で識別される。また,オブジェクトごとに,サイズ(“size”に該当),スレッドID(“new_thread”に該当),生成時刻(“new_time”に該当),最終アクセス時刻(“last_time”に該当),寿命,GC経験数(“age”に該当),スコープ(“is_global”に該当),オブジェクト名のデータを持つ。
【0127】
ここで,スコープ(“is_global”に該当)欄において,“L”はスレッドローカルを示し,“G”は,スレッドグローバルを示す。このデータから,そのオブジェクトがスレッドローカルなオブジェクトであるか,スレッドグローバルなオブジェクトであるかを容易に知ることができる。
【0128】
図21は,本実施の形態におけるオブジェクトリスト画面の例を示す図である。図21において,画面左部分が用意されているクラスのリストであり,そのリストからクラスを選択することによって,そのクラスから生成された(インスタンス化された)オブジェクトを知ることができる。画面右部分が,選択されたクラスから生成されたオブジェクトのリストを表示する部分である。
【0129】
図22は,本実施の形態におけるメソッドリスト画面の例を示す図である。図22において,画面左部分が用意されているメソッドのリスト部分であり,そのリストからメソッドを選択することにより,そのメソッドによって生成されたオブジェクト,そのメソッドによってアクセスされたオブジェクトを知ることができる。
【0130】
図22において,画面右側上部分が選択されたメソッドにより生成されたオブジェクトのリストを表示する部分であり,画面右側下部分が選択されたメソッドによりアクセスされたオブジェクトのリストを表示する部分である。これらのデータから,どのメソッドがヒープに負担をかけているかを容易に知ることができる。
【0131】
以上の本実施の形態の特徴を列挙すると,以下の通りとなる。
【0132】
(付記1)ガベージコレクションを実装するコンピュータシステムにおけるヒープサイズ自動最適化処理方法であって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトの識別情報,サイズ情報または時間情報に関するプロファイルデータを収集し記録する第1の過程と,
前記記録されたプロファイルデータを分析し,各オブジェクトの寿命を算出するとともに,生存するオブジェクトのサイズを積算することにより,各時点における必要ヒープサイズを算出する第2の過程と,
前記第2の過程で算出した各オブジェクトの寿命に関する寿命特性および必要ヒープサイズの情報をもとに,スループット性能および応答性能のバランスから予め定められた基準またはオペレータから指定された基準に基づいて目的とするヒープサイズを決定する第3の過程とを有する
ことを特徴とするヒープサイズ自動最適化処理方法。
【0133】
(付記2)付記1に記載のヒープサイズ自動最適化処理方法において,
メソッドの呼出し時およびメソッドの復帰時のプロファイルデータを収集し記録する第4の過程と,
前記第1の過程と前記第4の過程によって記録されたプロファイルデータをもとに,各メソッドが生成するオブジェクトおよび各メソッドがアクセスするオブジェクトに関する情報を生成し出力する第5の過程とを有する
ことを特徴とするヒープサイズ自動最適化処理方法。
【0134】
(付記3)付記1または付記2記載のヒープサイズ自動最適化処理方法において,
前記第1の過程のオブジェクト生成時のプロファイルデータとして,オブジェクトを生成したスレッドのスレッド番号を記録し,かつオブジェクトアクセス時のプロファイルデータとして,オブジェクトにアクセスしたスレッドのスレッド番号を記録し,
前記オブジェクトを生成したスレッドのスレッド番号と,前記オブジェクトにアクセスしたスレッドのスレッド番号とから,各オブジェクトがスレッドローカルなオブジェクトであるかスレッドグローバルなオブジェクトであるかを示す情報を生成する過程を有する
ことを特徴とするヒープサイズ自動最適化処理方法。
【0135】
(付記4)付記1から付記3までのいずれかに記載のヒープサイズ自動最適化処理方法において,
前記第2の過程における分析では,前記記録されたプロファイルデータから,各オブジェクトごとに1つのオブジェクト構造体を割り当て,同じオブジェクトに関する複数のデータを1つのデータにまとめて処理する
ことを特徴とするヒープサイズ自動最適化処理方法。
【0136】
(付記5) 付記1から付記4までのいずれかに記載のヒープサイズ自動最適化処理方法において,
前記第1の過程によるプロファイルデータの収集の開始および終了を指示する過程と,
プロファイルデータの収集の開始および終了の際に,ガベージコレクションを起動する過程とを有する
ことを特徴とするヒープサイズ自動最適化処理方法。
【0137】
(付記6)ガベージコレクションを実装するコンピュータシステムにおけるヒープサイズ自動最適化装置であって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトの識別情報,サイズ情報または時間情報に関するプロファイルデータを収集し記録するロギング処理部と,
前記記録されたプロファイルデータを分析し,各オブジェクトの寿命を算出するとともに,生存するオブジェクトのサイズを積算することにより,各時点における必要ヒープサイズを算出する分析処理部と,
前記分析処理部で算出した各オブジェクトの寿命に関する寿命特性および必要ヒープサイズの情報をもとに,スループット性能および応答性能のバランスから予め定められた基準またはオペレータから指定された基準に基づいて目的とするヒープサイズを決定する見積り処理部とを備える
ことを特徴とするヒープサイズ自動最適化装置。
【0138】
(付記7)ガベージコレクションを実装するコンピュータシステムにおけるヒープサイズ自動最適化処理方法をコンピュータに実行させるためのプログラムであって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトの識別情報,サイズ情報または時間情報に関するプロファイルデータを収集し記録する処理と,
前記記録されたプロファイルデータを分析し,各オブジェクトの寿命を算出するとともに,生存するオブジェクトのサイズを積算することにより,各時点における必要ヒープサイズを算出する処理と,
前記算出した各オブジェクトの寿命に関する寿命特性および必要ヒープサイズの情報をもとに,スループット性能および応答性能のバランスから予め定められた基準またはオペレータから指定された基準に基づいて目的とするヒープサイズを決定する処理とを,
コンピュータに実行させるためのヒープサイズ自動最適化プログラム。
【0139】
(付記8)ガベージコレクションを実装するコンピュータシステムにおけるヒープサイズ自動最適化処理方法をコンピュータに実行させるためのプログラムを記録した記録媒体であって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトの識別情報,サイズ情報または時間情報に関するプロファイルデータを収集し記録する処理と,
前記記録されたプロファイルデータを分析し,各オブジェクトの寿命を算出するとともに,生存するオブジェクトのサイズを積算することにより,各時点における必要ヒープサイズを算出する処理と,
前記算出した各オブジェクトの寿命に関する寿命特性および必要ヒープサイズの情報をもとに,スループット性能および応答性能のバランスから予め定められた基準またはオペレータから指定された基準に基づいて目的とするヒープサイズを決定する処理とを,
コンピュータに実行させるためのプログラムを記録したことを特徴とするヒープサイズ自動最適化プログラムの記録媒体。
【0140】
【発明の効果】
以上説明したように,本発明によって,GCを実装するコンピュータシステムにおいて任意のアプリケーションを実行するときに,オブジェクトの寿命をプロファイル分析することにより,GCによる不要オブジェクトの回収率(スループット性能)とヒープ使用効率(応答性能)の両面から,最適なヒープサイズを自動的に見積もることが可能となる。
【0141】
さらに,メソッド呼出し時・復帰時における付加的なプロファイル情報をロギングすることにより,どのメソッドで生成されたオブジェクトなのかという情報や,スレッドローカルなオブジェクトか否かなどという情報を得ることもできる。この情報をもとに,ヒープへの負荷調整の観点で,アプリケーションを最適化することが可能となる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係るヒープサイズ自動最適化装置の構成例を示す図である。
【図2】本実施の形態におけるヒープサイズ自動最適化処理フローチャートである。
【図3】プロファイル情報の収集契機とデータレコードの例を示す図である。
【図4】本発明における活動中ヒープサイズ,必要ヒープサイズ,使用ヒープサイズおよび指定ヒープサイズの時間変化の例を説明する図である。
【図5】オブジェクトの寿命によるヒープサイズの調整を説明する図である。
【図6】本発明の実施の形態におけるヒープに負担をかけているメソッドの調査を説明する図である。
【図7】本実施の形態におけるロギング処理を示す図である。
【図8】アプリケーション実行途中からプロファイルを開始するときの例を示す図である。
【図9】本実施の形態におけるデータ整理処理を示す図である。
【図10】本実施の形態におけるオブジェクト情報の例を示す図である。
【図11】本実施の形態における使用ヒープサイズおよび活動中ヒープサイズの推移を調査するためのソート例を示す図である。
【図12】本実施の形態におけるオブジェクト寿命特性を得るためのソート例を示す図である。
【図13】本実施の形態における必要/使用ヒープサイズのグラフの例を示す図である。
【図14】本実施の形態におけるオブジェクト寿命分布のグラフの例(1)を示す図である。
【図15】本実施の形態におけるオブジェクト寿命分布のグラフの例(2)を示す図である。
【図16】本実施の形態における見積り処理フローチャートである。
【図17】本実施の形態におけるユーザ提示する情報のメニュー画面の例を示す図である。
【図18】本実施の形態における最適ヒープサイズ画面の例を示す図である。
【図19】本実施の形態におけるプロファイルデータ画面の例を示す図である。
【図20】本実施の形態におけるオブジェクトデータ画面の例を示す図である。
【図21】本実施の形態におけるオブジェクトリスト画面の例を示す図である。
【図22】本実施の形態におけるメソッドリスト画面の例を示す図である。
【符号の説明】
1 ヒープサイズ自動最適化装置
10 ロギング処理部
11 プロファイル情報ロギングルーチン
20 分析処理部
21 データ整理部
22 ソート部
23 可視化部
30 見積り処理部
40 プロファイル情報格納域
50 オブジェクト情報格納域
60 必要ヒープサイズデータ
70 オブジェクト寿命特性
80 必要/使用ヒープサイズのグラフ
90 オブジェクト寿命分布のグラフ
Claims (5)
- オブジェクトが格納されるヒープ領域に対するガベージコレクションの機能を実装するコンピュータシステムのコンピュータが実行するヒープサイズ自動最適化処理方法であって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの生成点から最終アクセスまでの期間であるオブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトのサイズ情報または時間情報が付加されたサイズ情報に関するプロファイルデータを収集し記録する第1の過程と,
前記記録されたプロファイルデータを分析し,前記サイズ情報を生成順に累積した延べ割当てサイズまたは前記時間情報を尺度として,オブジェクトの生成点から最終アクセスまでの期間を算出することにより各オブジェクトの寿命を算出するとともに,前記サイズ情報からガベージコレクション直後にオブジェクトの生成点から最終アクセスまでの状態にあるオブジェクトの総サイズを算出して予め定めた係数を積算することにより,各時点における必要ヒープサイズを算出する第2の過程と,
最適な指定ヒープサイズを決定する基準として指定された,回収可能率,最大ガベージコレクション期待回数,スループット重視またはレスポンス重視の少なくともいずれかの基準を含む,ガベージコレクションインターバルを決定するための基準と,前記第2の過程で算出した各オブジェクトの寿命とに基づいて,前記基準を満たすガベージコレクションインターバルを算出し,前記第2の過程で算出した必要ヒープサイズと前記基準を満たすガベーベジコレクションインターバルとから目的とするヒープサイズを決定する第3の過程とを有する
ことを特徴とするヒープサイズ自動最適化処理方法。 - 請求項1に記載のヒープサイズ自動最適化処理方法において,
前記第2の過程における前記予め定めた係数は,ガベージコレクション直後の総生存オブジェクトサイズの値を,ガベージコレクション直後にオブジェクトの生成点から最終アクセスまでの状態にあるオブジェクトの総サイズで割った値である
ことを特徴とするヒープサイズ自動最適化処理方法。 - 請求項1または請求項2に記載のヒープサイズ自動最適化処理方法において,
メソッドの呼出し時およびメソッドの復帰時のプロファイルデータを収集し記録する第4の過程と,
前記第1の過程と前記第4の過程によって記録されたプロファイルデータをもとに,各メソッドが生成するオブジェクトおよび各メソッドがアクセスするオブジェクトに関する情報を生成し出力する第5の過程とを有する
ことを特徴とするヒープサイズ自動最適化処理方法。 - オブジェクトが格納されるヒープ領域に対するガベージコレクションの機能を実装するコンピュータシステムにおけるヒープサイズ自動最適化装置であって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの生成点から最終アクセスまでの期間であるオブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトのサイズ情報または時間情報が付加されたサイズ情報に関するプロファイルデータを収集し記録するロギング処理部と,
前記記録されたプロファイルデータを分析し,前記サイズ情報を生成順に累積した延べ割当てサイズまたは前記時間情報を尺度として,オブジェクトの生成点から最終アクセスまでの期間を算出することにより各オブジェクトの寿命を算出するとともに,前記サイズ情報からガベージコレクション直後にオブジェクトの生成点から最終アクセスまでの状態にあるオブジェクトの総サイズを算出して予め定めた係数を積算することにより,各時点における必要ヒープサイズを算出する分析処理部と,
最適な指定ヒープサイズを決定する基準として指定された,回収可能率,最大ガベージ コレクション期待回数,スループット重視またはレスポンス重視の少なくともいずれかの基準を含む,ガベージコレクションインターバルを決定するための基準と,前記分析処理部で算出した各オブジェクトの寿命とに基づいて,前記基準を満たすガベージコレクションインターバルを算出し,前記分析処理部で算出した必要ヒープサイズと前記基準を満たすガベージコレクションインターバルとから目的とするヒープサイズを決定する見積り処理部とを備える
ことを特徴とするヒープサイズ自動最適化装置。 - オブジェクトが格納されるヒープ領域に対するガベージコレクションの機能を実装するコンピュータシステムにおけるヒープサイズ自動最適化処理方法をコンピュータに実行させるためのプログラムであって,
少なくともオブジェクトの生成時,オブジェクトのアクセス時およびガベージコレクション時に,オブジェクトの生成点から最終アクセスまでの期間であるオブジェクトの寿命を算出するための,生成したオブジェクトまたは生存しているオブジェクトのサイズ情報または時間情報が付加されたサイズ情報に関するプロファイルデータを収集し記録する処理と,
前記記録されたプロファイルデータを分析し,前記サイズ情報を生成順に累積した延べ割当てサイズまたは前記時間情報を尺度として,オブジェクトの生成点から最終アクセスまでの期間を算出することにより各オブジェクトの寿命を算出するとともに,前記サイズ情報からガベージコレクション直後にオブジェクトの生成点から最終アクセスまでの状態にあるオブジェクトの総サイズを算出して予め定めた係数を積算することにより,各時点における必要ヒープサイズを算出する処理と,
最適な指定ヒープサイズを決定する基準として指定された,回収可能率,最大ガベージコレクション期待回数,スループット重視またはレスポンス重視の少なくともいずれかの基準を含む,ガベージコレクションインターバルを決定するための基準と,前記算出した各オブジェクトの寿命とに基づいて,前記基準を満たすガベージコレクションインターバルを算出し,前記算出した必要ヒープサイズと前記基準を満たすガベージコレクションインターバルとから目的とするヒープサイズを決定する処理とを,
コンピュータに実行させるためのヒープサイズ自動最適化プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002378194A JP4116877B2 (ja) | 2002-12-26 | 2002-12-26 | ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム |
US10/738,179 US7415491B2 (en) | 2002-12-26 | 2003-12-17 | Method and apparatus for optimizing heap size, and program and program recording medium thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002378194A JP4116877B2 (ja) | 2002-12-26 | 2002-12-26 | ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004206644A JP2004206644A (ja) | 2004-07-22 |
JP4116877B2 true JP4116877B2 (ja) | 2008-07-09 |
Family
ID=32677419
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002378194A Expired - Fee Related JP4116877B2 (ja) | 2002-12-26 | 2002-12-26 | ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7415491B2 (ja) |
JP (1) | JP4116877B2 (ja) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100626368B1 (ko) * | 2003-08-25 | 2006-09-20 | 삼성전자주식회사 | 가비지 콜렉션 벤치마킹 방법 |
US8204931B2 (en) | 2004-12-28 | 2012-06-19 | Sap Ag | Session management within a multi-tiered enterprise network |
US20060143256A1 (en) | 2004-12-28 | 2006-06-29 | Galin Galchev | Cache region concept |
US7434206B2 (en) * | 2005-03-10 | 2008-10-07 | Hewlett-Packard Development Company, L.P. | Identifying memory leaks in computer systems |
US8589562B2 (en) | 2005-04-29 | 2013-11-19 | Sap Ag | Flexible failover configuration |
JP4996073B2 (ja) * | 2005-07-13 | 2012-08-08 | 富士通株式会社 | 世代別ガベージコレクションプログラム |
JP2007086838A (ja) * | 2005-09-20 | 2007-04-05 | National Institute Of Advanced Industrial & Technology | ゼロガベージコレクション通信仲介装置 |
US7500077B2 (en) * | 2005-12-09 | 2009-03-03 | International Business Machines Corporation | Use of region-oriented memory profiling to detect heap fragmentation and sparse memory utilization |
US7467278B2 (en) * | 2006-05-08 | 2008-12-16 | International Business Machines Corporation | Memory tuning for garbage collection and central processing (CPU) utilization optimization |
US20080162709A1 (en) * | 2006-12-27 | 2008-07-03 | International Business Machines Corporation | System for processing application protocol requests |
US9311082B2 (en) | 2006-12-29 | 2016-04-12 | Sap Se | System and method for processing graph objects |
US7725505B2 (en) * | 2006-12-29 | 2010-05-25 | Sap Ag | System and method for measuring memory consumption differences between objects within an object-oriented programming environment |
US8640086B2 (en) * | 2006-12-29 | 2014-01-28 | Sap Ag | Graphical user interface system and method for presenting objects |
US8001336B2 (en) * | 2007-03-02 | 2011-08-16 | International Business Machines Corporation | Deterministic memory management in a computing environment |
US7908454B2 (en) * | 2007-06-26 | 2011-03-15 | Microsoft Corporation | Application-specific heap management |
US20090013017A1 (en) * | 2007-07-03 | 2009-01-08 | Branda Steven J | Methods, Systems, and Computer Program Products for Optimizing Virtual Machine Memory Consumption |
US8185880B2 (en) * | 2007-10-04 | 2012-05-22 | International Business Machines Corporation | Optimizing heap memory usage |
US8095766B2 (en) * | 2008-04-07 | 2012-01-10 | International Business Machines Corporation | Method and system for approximating object sizes in an object-oriented system |
US8407681B2 (en) * | 2008-05-23 | 2013-03-26 | International Business Machines Corporation | System and method for changing variables at runtime |
US8301672B2 (en) * | 2008-09-22 | 2012-10-30 | Advanced Micro Devices, Inc. | GPU assisted garbage collection |
US8473900B2 (en) * | 2009-07-01 | 2013-06-25 | Advanced Micro Devices, Inc. | Combining classes referenced by immutable classes into a single synthetic class |
US8583783B1 (en) * | 2009-08-18 | 2013-11-12 | Sprint Communications Company L.P. | Method and system for adaptive recovery of heap memory |
JP4959781B2 (ja) * | 2009-12-22 | 2012-06-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オブジェクト生成地点記録方法およびプログラム |
US8327109B2 (en) * | 2010-03-02 | 2012-12-04 | Advanced Micro Devices, Inc. | GPU support for garbage collection |
US8522216B2 (en) | 2010-05-04 | 2013-08-27 | Oracle International Corporation | Memory leak detection |
US8504878B2 (en) * | 2010-05-04 | 2013-08-06 | Oracle International Corporation | Statistical analysis of heap dynamics for memory leak investigations |
JP5476208B2 (ja) | 2010-05-12 | 2014-04-23 | インターナショナル・ビジネス・マシーンズ・コーポレーション | リクエスト処理システム、方法及びプログラム |
JP5478368B2 (ja) * | 2010-06-03 | 2014-04-23 | 日本電信電話株式会社 | メモリ消費量測定方法及びメモリ消費量測定プログラム |
CN102253854A (zh) * | 2011-07-26 | 2011-11-23 | 华为技术有限公司 | 业务处理方法和Java虚拟机 |
US20130144568A1 (en) | 2011-08-31 | 2013-06-06 | Rodrigo A. Palma-Amestoy | System and Method for Variable Detection in Objects |
CN103197973A (zh) * | 2012-01-05 | 2013-07-10 | 中兴通讯股份有限公司 | 一种移动终端及其管理方法 |
JP5809613B2 (ja) * | 2012-09-10 | 2015-11-11 | 日本電信電話株式会社 | 仮想マシンチューニング値計算装置および仮想マシンチューニング値計算方法 |
CA2848683C (en) | 2014-04-10 | 2022-07-05 | Ibm Canada Limited - Ibm Canada Limitee | Working set adjustment in a managed environment |
US9430153B2 (en) * | 2014-10-22 | 2016-08-30 | International Business Machines Corporation | Garbage collection and other management of memory heaps |
CN108845864B (zh) * | 2018-06-27 | 2020-11-03 | 北京京东尚科信息技术有限公司 | 一种基于spring框架的JVM垃圾回收方法和装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5566321A (en) * | 1993-12-13 | 1996-10-15 | Cray Research, Inc. | Method of managing distributed memory within a massively parallel processing system |
US6049810A (en) * | 1997-04-23 | 2000-04-11 | Sun Microsystems, Inc. | Method and apparatus for implementing a write barrier of a garbage collected heap |
US5845298A (en) * | 1997-04-23 | 1998-12-01 | Sun Microsystems, Inc. | Write barrier system and method for trapping garbage collection page boundary crossing pointer stores |
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 |
US6728852B1 (en) * | 2000-06-30 | 2004-04-27 | Sun Microsystems, Inc. | Method and apparatus for reducing heap size through adaptive object representation |
US6795836B2 (en) * | 2000-12-29 | 2004-09-21 | International Business Machines Corporation | Accurately determining an object's lifetime |
-
2002
- 2002-12-26 JP JP2002378194A patent/JP4116877B2/ja not_active Expired - Fee Related
-
2003
- 2003-12-17 US US10/738,179 patent/US7415491B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7415491B2 (en) | 2008-08-19 |
US20040133759A1 (en) | 2004-07-08 |
JP2004206644A (ja) | 2004-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4116877B2 (ja) | ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム | |
US7325234B2 (en) | System and method for monitoring computer application and resource utilization | |
US6804691B2 (en) | Method for optimization of memory usage for a computer program | |
US8825721B2 (en) | Time-based object aging for generational garbage collectors | |
KR101600129B1 (ko) | 애플리케이션 효율 엔진 | |
JPWO2009008279A1 (ja) | コンピュータシステム、管理装置、及びコンピュータシステム管理方法 | |
JP6674471B2 (ja) | メモリの外部断片化の原因を決定するための方法、システム、コンピュータ・プログラム製品およびコンピュータ・プログラム | |
US10102046B2 (en) | In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources | |
JP6432333B2 (ja) | 情報処理装置、データ処理方法、およびデータ処理プログラム | |
JP2008226179A (ja) | 業務プロセス推定プログラム、業務プロセス推定方法および業務プロセス推定装置 | |
WO2015146100A1 (ja) | 負荷推定システム、情報処理装置、負荷推定方法、及び、プログラムを記憶する記憶媒体 | |
US20050289307A1 (en) | Method and system for determining memory usage of a heap | |
CN114546590A (zh) | Java虚拟机堆内存集合对象监测方法及内存溢出分析方法 | |
US7162605B2 (en) | Method and system for obtaining memory usage information for a heap when a peak live count is updated | |
US20180018129A1 (en) | Storage monitoring system and monitoring method therefor | |
JP3642772B2 (ja) | コンピュータ装置及びプログラム実行方法 | |
JP7243134B2 (ja) | 入力操作の作業効率管理装置、入力操作の作業効率管理方法、及び、入力操作の作業効率管理プログラム | |
CN113157212A (zh) | Flash存储方法、装置、智能穿戴设备及存储介质 | |
US20080282020A1 (en) | Determination of sampling characteristics based on available memory | |
EP4354304A2 (en) | Method and system for estimating garbage collection suspension contributions of individual allocation sites | |
JP6515510B2 (ja) | バッチジョブ処理装置、システム、バッチジョブ処理方法およびプログラム | |
JP6681484B2 (ja) | 計算機運用管理システムおよび方法 | |
CN115509492A (zh) | 软件需求评估方法及装置 | |
CN117009698A (zh) | 多需求的用户端页面更新方法、装置、设备及介质 | |
JP2022108373A (ja) | 情報処理装置、情報処理方法、およびシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050112 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050114 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070904 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20071105 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20071105 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20071204 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080204 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20080212 |
|
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: 20080415 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080418 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110425 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4116877 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110425 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110425 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120425 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130425 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140425 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |