JP5618796B2 - 計算機、計算機の制御方法及びプログラム - Google Patents

計算機、計算機の制御方法及びプログラム Download PDF

Info

Publication number
JP5618796B2
JP5618796B2 JP2010268951A JP2010268951A JP5618796B2 JP 5618796 B2 JP5618796 B2 JP 5618796B2 JP 2010268951 A JP2010268951 A JP 2010268951A JP 2010268951 A JP2010268951 A JP 2010268951A JP 5618796 B2 JP5618796 B2 JP 5618796B2
Authority
JP
Japan
Prior art keywords
information
time
program
storage area
computer
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
JP2010268951A
Other languages
English (en)
Other versions
JP2012118834A (ja
Inventor
昌彦 足立
昌彦 足立
博泰 西山
博泰 西山
元樹 小幡
元樹 小幡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2010268951A priority Critical patent/JP5618796B2/ja
Priority to US13/880,198 priority patent/US9189393B2/en
Priority to PCT/JP2011/006557 priority patent/WO2012073460A1/ja
Publication of JP2012118834A publication Critical patent/JP2012118834A/ja
Application granted granted Critical
Publication of JP5618796B2 publication Critical patent/JP5618796B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Memory System (AREA)

Description

本発明は、計算機、計算機の制御方法及びプログラムに係り、特に、計算機のメモリ管理を行う計算機、計算機の制御方法及びプログラムに関する。
コンピュータプログラムを開発する上で、プログラムで利用するメモリ領域の確保・解放処理は不正領域参照などプログラムの不具合を起こしやすいことが知られている。特に、大規模なプログラム開発においては、プログラマが全てのメモリ確保・解放処理を完全に把握することは困難になりつつある。
これを解決する手段として、非特許文献1には、プログラム中でのメモリ管理を自動化するガベージコレクタが開示されている。ガーベッジコレクタは、プログラムが動的に確保したメモリ領域のうち、不要になったオブジェクトを判別し、そのオブジェクトが占有していた領域を解放する処理であるガーベッジコレクション(以下、「GC」という。)を実行する機能である。例えば、ガベージコレクタを利用するメモリ管理機能を有する言語処理系の1つであるJava(登録商標)では、メモリ領域を確保するための手段が用意されており、Javaプログラム開発者は、メモリ領域の確保を明示的に記述することで、ガベージコレクタが動的にGCを実施し、そのメモリの解放を行うようになっている。
GCの実行形態は、大きく2つの方法がある。Javaプログラムの実行と並行してGCを実行する方法と、Javaプログラムの実行を停止してGCを実行する方法とである。前者は、Javaプログラムの実行性能が低下するもののGCによる停止時間が短くなるという傾向がある。後者は、Javaプログラムの実行性能が高いもののGCによる停止時間が長いという傾向がある。
後者を解決する手法として、非特許文献2には、GCで管理するメモリ領域に加えて、GCの管理対象外のメモリ領域(以下、「外部メモリ領域」という。)を有する計算機システムが提案されている。この計算機システムは、プログラム中の特定の区間内で生成されたオブジェクトを外部メモリ領域に配置するようになっている。特定区間の指定は、予めプログラム開発者によって明示的に記述されたプログラムの実行により指定されるようになっている。
この特定区間を指定するためのプログラムの記述を図22に例示する。CPUは、プログラム中の“em=new ExplicitMemory();”を実行することにより、外部メモリ領域を確保する。CPUが、生成したオブジェクト“em”に対して“em.enter();”メソッドを呼び出してから”em.exit();”メソッドを呼び出す間が指定区間となる。CPUは、この指定区間内に生成されたオブジェクトである“obj1”、“obj2”及び“obj3”を、確保された外部メモリ領域に配置する。確保した外部メモリ領域が不要になった場合、CPUは、生成したオブジェクト“em”に対し、“em.reclaim();”メソッドを呼び出し、外部メモリ領域を解放する。
この処理系の用途の1つは、一定の寿命(オブジェクトが生成されてから不要になるまでの期間)を持つオブジェクト群を外部メモリ領域に配置することである。これによりJavaヒープへのオブジェクトの流入を削減し、GCの発生を抑止でき処理系の応答性能を改善できる。
また、上述した非特許文献1には、オブジェクトが短寿命か長寿命かで異なるメモリ管理方法を適用する計算機システムについても開示がある。この計算機システムでは、Javaヒープを短寿命領域と長寿命領域とに分割し、オブジェクト毎に自らの生存期間を示す年齢情報の管理を行い、それぞれの領域のGCを別々に管理するようになっている。先ず、CPUは、生成するオブジェクトを全て短寿命領域へと配置する。短寿命領域が枯渇した時、CPUは、GC処理を開始し、短寿命領域のオブジェクトを回収する。このとき、CPUは、生存したオブジェクトの年齢を1増加させる。この年齢が閾値を超えると、CPUは、長寿命のオジェクトであると見なし、当該オブジェクトを長寿命領域へ移動する。このように長寿命オブジェクトを別領域で管理することで、短寿命領域の管理を軽量化しプログラムの実行性能を向上させるようになっている。
更に、非特許文献1に開示された計算機システムのような、オブジェクトを短寿命と長寿命に分けて管理する手法を利用した計算機システムとして、非特許文献3には、オブジェクトの寿命管理にプログラム点を用いるシステムが開示されている。プログラム点とは、オブジェクトを生成するプログラムにおいて、そのプログラムがそのオブジェクトを生成する地点(オブジェクトを生成するコードの位置)である。計算機システムでは、オブジェクトの寿命を解析し、長寿命オブジェクトを生成する際、プログラム点を利用して、そのオブジェクトをはじめから長寿命領域に配置し、GC処理の軽減やオブジェクトの移動を削減することで実行性能を向上させるようになっている。
より具体的には、短寿命と長寿命で異なる管理手法を適用する非特許文献1のような計算機システムにおいて、CPUは、プログラムを実行する際に、オブジェクトと、そのオブジェクトが生成されるプログラム点とを関連付けて記録しておく。CPUは、オブジェクトを長寿命領域へ移動した際、そのオブジェクトが長寿命であるとして管理しておき、当該オブジェクトを生成したプログラム点を再度実行する際に、生成したオブジェクトを初めから長寿命領域へ配置するようになっている。
Appel, A. W, Simple generational garbage collection and fast allocation, Software Practice and Experience ,1989. 小幡元樹, 西山博泰, 足立昌彦, 岡田浩一, 長瀬卓真,中島恵, Javaにおける明示的メモリ管理, 情報処理学会論文誌,2009. Stephan M. Blackburn, Sharad Singhai, Matthew Hertz, Pretenuring for Java, ACM. Conference on Object-Oriented Programming, Systems, Languages and Applications, 2001.
非特許文献3に開示された計算機システムは、オブジェクトが短寿命であるか長寿命であるかを判別し、それぞれに応じてオブジェクトを管理するようになっているが、オブジェクトの寿命に依存して種々の処理を行う計算機システムでは、短寿命及び長寿命だけでなくオブジェクトの寿命の長さを解析することが必要である。オブジェクトの寿命を解析するとは、あるプログラム点で生成されたオブジェクトに対し、その生成から不要になるまでの期間を解析し、プログラム点及び生成されるオブジェクトと寿命の長さを関連付けることである。
例えば、ユーザによるプログラムの記述によって、メモリ領域の生成・削除を制御する計算機システムでは、プログラマがオブジェクトの寿命を調査し、それらを外部メモリ領域へ配置する必要がある。この場合、プログラマが各オブジェクトの寿命を把握しておく必要があり、大規模なフレームワークなどを利用したシステムなどでは、オブジェクトの寿命を把握することは困難である。
本発明は、プログラマ等の手によらずにオブジェクトの寿命を効率的に把握できるようにすることを目的の一つとする。また、把握したオブジェクトの寿命を利用して、計算機システムのメモリ管理の利便性を向上させることを目的の一つとする。
プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機であって、前記制御部は、
所定の契機で時間情報を更新し、オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記憶装置に記録し、前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得し、前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて、前記記録装置に記録することを特徴とする。
本発明によれば、人手によらずにオブジェクトの寿命を効率的に把握でき又把握したオブジェクトの寿命を利用して、計算機システムのメモリ管理の利便性を向上させることができるという効果を奏する。
本発明の更なる目的及び効果は、以下の記載等により更に明らかになるであろう。
本発明を適用した第1実施形態の構成を示すブロック図である。 本発明を適用した実施形態で実行するプログラムの例を示す図である。 本発明を適用した実施形態の生成点表の例を示す模式図である。 本発明を適用した実施形態のオブジェクト生成表の例を示す模式図である。 本発明を適用した実施形態の寿命情報表の例を示す模式図である。 本発明を適用した実施形態のオブジェクト管理部の処理を示すフローチャートである。 本発明を適用した実施形態のオブジェクト配置部の処理を示すフローチャートである。 本発明を適用した実施形態のオブジェクト寿命解析部の処理を示すフローチャートである。 本発明を適用した実施形態の計算機システムの動作処理の例を示す模式図である。 本発明を適用した第1実施形態の変形例におけるオブジェクト管理部の処理を示すフローチャートである。 本発明を適用した第1実施形態の変形例におけるオブジェクト生成表を示す模式図である。 本発明を適用した実施形態の変形例における生成点表を示す模式図である。 本発明を適用した第2実施形態の構成を示すブロック図である。 本発明を適用した第2実施形態のオブジェクト配置部の処理を示すフローチャートである。 本発明を適用した第2実施形態における計算機システムの動作処理を示す模式図である。 本発明を適用した第3実施形態の構成を示したブロック図である。 本発明を適用した実施形態の外部メモリ管理表を示す模式図である。 本発明を適用した実施形態の外部オブジェクト配置部の処理を示すフローチャートである。 本発明を適用した実施形態の外部メモリ確保部の処理を示すフローチャートである。 本発明を適用した第3実施形態における計算機システムの動作処理を示す模式図である。 図20に示す計算機システムで実行するプログラムの例を示す図である。 従来技術の計算機システムで使用するプログラムの例を示す図である。
以下に、図面を用いて、本発明を実施するため形態について、実施形態1〜3として詳細に説明する。
〔第1実施形態〕
図1に、本発明を適用した第1実施形態である計算機システム100の構成を示す。計算機システム100は、CPU1、主記憶装置としてのメモリ2及び補助記憶装置3を備えたサーバ装置等の汎用の計算機装置から構成される。また、ネットワーク等を介して外部記憶装置4を備えている。入出力装置5は、ユーザの操作により種々のデータや閾値等を入力したりする装置である。表示装置6は、計算機システム100で利用する種々の表や処理結果等を表示可能なモニタ装置である。
また、本実施形態において、計算機システム100は、オブジェクト指向言語体系であるJ2EE規格に準拠したJavaVM10が、APサーバとして実装された構成となっている。
なお、本発明は、JavaVM10の構成に限定されるものではなく、オブジェクトの管理ができるプログラム処理系に適用することも可能である。
メモリ2には、JavaVM10を構成する機能部や、種々のデータやプログラムを格納する領域が構成・格納される。JavaVM10は、CPU1とプログラムとの協同により、プログラム読込み部11、プログラム実行部12、ガベージコレクタ13及びオブジェクト配置部14A、オブジェクト管理部18及びオブジェクト寿命解析部19を実現し、これらを含んで構成される。なお、JavaVM10は、これらの機能部以外にも種々の機能を有する。例えば、所定の契機で更新される時間情報である擬似経過情報22は、JavaVM10が有する機能によって管理されるものである。
また、メモリ2は、種々のデータやプログラムとして、Javaプログラム20A、擬似経過時間22、オブジェクト生成表23、生成点表24及び寿命情報表26を格納する。
Javaヒープ21は、JavaVM10によって管理されるメモリ領域であり、生成されたオブジェクトを配置するものである。
プログラム読込み部11は、Javaプログラム20Aを読み込む機能を有する。プログラム実行部12は、読み込んだJavaプログラム20Aに記述された命令を実行し、オブジェクトを生成する機能を有する。
図2に、Javaプログラム20Aの一例を示す。このJavaプログラム20AはTestクラスの定義を含んでいる。Testクラスはmainメソッドの定義(2〜10行目)を持つ。プログラム実行部12が、Testクラスのmainメソッドの実行を開始すると、プログラムの実行点を3行目に移す。3行目はSampleクラスのオブジェクトを生成する処理を示す。プログラム実行部12がこのプログラム点を実行することで、オブジェクトが生成され、オブジェクトは、Javaヒープ21から確保された領域に配置されるようになっている。プログラム実行部12が3行目の処理を終えると、プログラム点を4行目に移し、プログラムの実行を続ける。
オブジェクト配置部14Aは、プログラム実行部12がオブジェクトを生成すると、Javaヒープ21の領域を確保し、オブジェクトを配置する機能を有する。ガーベッジコレクタ13は、Javaヒープ21に十分な空き領域が存在しない場合、GCを実行し、Javaヒープ21を解放する機能を有する。
より具体的には、プログラム実行部12がJavaプログラム20Aに記述されたオブジェクト生成命令を実行し、オブジェクトが生成されると、オブジェクト配置部14Aは、Javaヒープ21からオブジェクトサイズ分以上の領域を確保する。このとき、Javaヒープ21が不足しており、オブジェクト配置部14Aが領域確保に失敗した場合、ガベージコレクタ13が、GCを実行し、Javaヒープ21にある不要なオブジェクトを回収して、領域を解放する。他方、オブジェクト配置部14AがJavaヒープ21から領域を確保できた場合、確保した領域にオブジェクトを配置するようになっている。
オブジェクト管理部18は、オブジェクト実行部12が生成したオブジェクトに対して、オブジェクトの型、オブジェクトを生成するメソッド名及び行番号といった情報と、そのオブジェクトを生成した時の時間情報(後述する疑似経過時間22の値)と、を関連付けて管理する機能を有する。より詳細には、オブジェクト管理部18は、生成オブジェクトに関する型、メソッド名及び行番号等を生成点表24(図3)で管理し、そのオブジェクトを生成した時の時間情報(擬似経過時間22)である生成時間情報等を、オブジェクト生成表27(図4)で管理し、これらを共通のID(生成点ID)に関連付けて管理するようになっている。
図3に、生成点表24の構成例を示す。この表では、オブジェクトが生成された時点における当該オブジェクトに関する情報が登録される。オブジェクトが生成されると、オブジェクト管理部18によって、夫々のオブジェクトに関する生成時点での情報が、生成点表24に登録されるようになっている。生成点表24は、オブジェクトの生成時点の情報を特定する生成点ID271、生成されたオブジェクトの型272、オブジェクトを生成したメソッドのメソッド名273及びそのオブジェクトをしたメソッド内の行番号274の情報からなる。例えば、生成点表24の生成点ID“1”が付された1行目は、メソッド名が”m1”であるメソッド内の行番号が”line1”で、”Java.lang.Object”オブジェクトが生成されたことを示している。
図4に、オブジェクト生成表23の構成例を示す。この表では、オブジェクトが生成された時間に関する情報が登録される。オブジェクト生成表23は、生成点ID231、オブジェクトID232及び生成時の時間情報である生成時間情報233が登録されるようになっている。生成点ID231は、生成点表24(図3)の生成点ID271に対応する。オブジェクトID232は、生成点表24(図3)の型272に格納されたオブジェクトの型272を特定するIDである。生成時時間情報233は、オブジェクトが生成された時の時間情報(擬似経過時間22)を示す。
このように、オブジェクト生成表23と、生成点表24を参照することにより、両者の情報を対応付けることができるようになっている。例えば、オブジェクト生成表23の1行目は、生成点ID231が“1”であるので、生成点表24の生成点ID271が“1”である生成点情報を参照し、メソッド名=“m1”の行番号=“line1”で、オブジェクトの型=”Java.lang.Object"という情報と対応することがわかる。同様に、それらの情報がオブジェクトを特定するID=“O1”で、オブジェクトを生成した時の時間情報である生成時間情報=“T1”と対応することがわかる。
疑似経過時間22は、JavaVM10が管理する値である。JavaVM10は、独自に管理する疑似経過時間22を持つ。この擬似経過時間22は、計算機システム100が有するシステム時間とは異なり、所定の契機で更新される時間である。所定の契機とは、メモリ2内の特定の記憶領域に格納されたデータの削除(無効)に関する処理である。第1実施形態では、ガーベッジコレクタ13によりGC処理の実行を契機として、JavaVM10が、擬似経過時間をインクリメント(T1→T2→T3・・・)するようになっている。
オブジェクト寿命解析部19は、Javaヒープ21内に格納されたオブジェクトの要否判定を行い、不要となったオブジェクトを検出し、更に、そのオブジェクトの寿命を管理する機能を有する。ここで、オブジェックトの寿命とは、そのオブジェクトの生成若しくはそのオブジェクトがJavaヒープ21に配置された時の擬似経過時間22(生成時時間情報)と、現在の擬似経過時間22との差分である。また、「現在の」擬似経過時間22とは、オブジェクト寿命解析部19がオブジェクトの要否判定によって不要オブジェクトを抽出した時点の擬似経過時間22である。
オブジェクトの要否判定は、オブジェクト寿命解析部19が、Javaヒープ21に配置されているオブジェクトに対し、後のプログラム実行に不要なオブジェクトであるか否かを解析することによって行われる。オブジェクト寿命解析部19は、後のプログラム実行に必要なオブジェクトは、プログラム実行中のスタックやレジスタ等から参照を辿ることで到達可能なオブジェクトであり、それ以外のオブジェクトを後のプログラム実行に不要なオブジェクトとする判定する。この処理は、例えば、ガベージコレクタ13がGCを実行する際に実施するオブジェクトの要否判定処理と同様の処理手順である。不要と判定されたオブジェクトは、オブジェクト寿命解析部19によって、不要オブジェクトとして検出される。
また、オブジェクトの寿命は、オブジェクト解析部19によって不要オブジェクトとして検出されたオブジェクトが生成されたときの擬似経過時間22と、そのオブジェクトが不要オブジェクトとして検出された時の擬似経過時間22とに基づいて算出される。具体的には、オブジェクト解析部19は、オブジェクト生成表23を参照し、不要オブジェクトとして検出したオブジェクトのオブジェクトID232を指標に生成時間情報233を取得する。次いで、現時点の疑似経過時間22を取得し、両者の差分を算出し、その差分を検出した不要オブジェクトの寿命とする。算出されたオブジェクトの寿命は、寿命情報表26で管理される。
図5に、寿命情報表26の構成例を示す。寿命情報表26は、生成点ID261と、寿命262とからなる。生成点ID261は、生成点表24の生成点ID271及びオブジェクト生成表23の生成点ID231と対応するものである。オブジェクト解析部19は、オブジェクトの寿命を算出する際に利用したオブジェクトID232(図4)を指標として生成点ID231を取得し、算出したオブジェクトの寿命262と対応付けて、寿命情報表26に登録するようになっている。
以上が、計算機システム100の構成である。次に、図6〜図8を用いて、計算機システム100の処理動作について説明する。
図6に、オブジェクト管理部18の処理を示す。
オブジェクト管理部18は、プログラム実行部12がオブジェクトを生成すると、そのオブジェクトに関する情報(オブジェクトの型、メソッド名及び行番号)をプログラム実行部12から取得する(S140)。
次いで、オブジェクト管理部18は、取得したそれらの値が、生成点表24に登録されているかを確認する(S142)。オブジェクト管理部18は、登録済みの場合(S142:Yes)、本処理を終了し、登録されていない場合(S142:No)、生成点表24にプログラム実行部12から取得したオブジェクトの型272、メソッド名273及び行番号274と、それらオブジェクトに関する情報を特定する生成点ID271を生成し、生成点表24に登録する(S144)。
次いで、オブジェクト管理部18は、擬似経過時間22を取得し、オブジェクト生成表23に生成時時間情報233を登録し、更に、対応する生成点ID231及びオブジェクトID232を供に登録し(S146)、処理を終了する。
図7に、オブジェクト配置部14Aの処理フローを示す。
先ず、オブジェクト配置部14Aは、生成されたオブジェクトのサイズ分の領域をJavaヒープ21から確保する(S160)。Javaヒープ21上に、サイズ分の領域が不足しており、領域確保に失敗した場合(S162:No)、オブジェクト配置部14Aは、ガベージコレクタ13にGCの実行依頼を送信する(S164)。実行依頼を受けたガベージコレクタ13によってJavaヒープ21上のオブジェクトが回収され、Javaヒープ21は解放される。S164で、ガベージコレクタ13がオブジェクトの回収を終えたタイミングで、オブジェクト配置部14Aは、JavaVM10に対し疑似経過時間22の更新依頼を送信する(S166)。更新依頼を受信したJavaVM10によって、擬似経過時間22がインクリメント(1の加算)されうことで、疑似経過時間22が更新される。その後、処理をS160に戻す。
オブジェクト配置部14Aは、Javaヒープ21上に、生成するオブジェクトのサイズ分の領域を確保できた場合(S162:Yes)、確保した領域にオブジェクトを配置し、処理を終了する(S148)。
図8に、オブジェクト寿命解析部19の処理フローを示す。
オブジェクト寿命解析部19は、Javaヒープ21に配置されているオブジェクトに対し、後のプログラム実行に必要か否かを解析する(S190)。オブジェクト寿命解析部19は、プログラム実行中のスタック又はレジスタなどから参照を辿り、当該オブジェクトに到達可能であるか否かを判定(S192)することで解析を行う。到達できないオブジェクトは、後のプログラム実行に不要なオブジェクトと判定される。
オブジェクト寿命解析部19が、不要なオブジェクトを検出した場合(S192:Yes)、そのオブジェクトを抽出する(S194)。オブジェクト寿命解析部19は、抽出したオブジェクトのオブジェクトID(例えば、“O1”)を指標にオブジェクト生成表23から生成時時間情報233(例えば、“T1”)を取得し又現時点の疑似経過時間22(“Tn”)を取得する(S196)。次いで、オブジェクト寿命解析部19は、TnとT1との差分をオブジェクトID“O1”の寿命とする(S198)。
そして、オブジェクト寿命解析部19は、オブジェクト生成表23からオブジェクトID“O1”に対応する生成点ID231を取得し、算出した寿命264と関連付けて、寿命情報表26に登録する(S200)。
以上の構成及び処理を行う計算機システム100が、オブジェクトの寿命を管理する全体的な流れについて、図9を用いて説明する。なお、図9の例では、Javaプログラム20A(図2)を実行するものとして説明する。
図9に、計算機システム100の全体的な処理の流れを模式的に示す。図9において、横軸50は時間軸である。また、横軸50上には、プログラム実行中に発生したGCのタイミングをプロットしている。GCの発生に応じて疑似経過時間22が1ずつ増加する様を示している。図中の黒三角印は、Javaプログラム20Aがプログラムを実行し、オブジェクトを生成した時点を示し、T1、T2、T3及びT4の4つ時点を示している。T1~T4を指す各吹き出し中のコードは、夫々の時点で実行されるJavaプログラム20A中の行の内容である。図中にある生成点表24−1及びオブジェクト生成表23−1は、T1においてJavaプログラム20Aを実行したときの各表の内容を示し、生成点表24−2及びオブジェクト生成表23−2は、T2において、Javaプログラム20Aを実行したときの各表の内容を示すものであり、各表がT1~T2において遷移する状態を表している。同様に、図中下方に示す寿命情報表26−1及び26-2は、T3~T4での遷移する状態を表している。
時間T1において、プログラム実行部12がJavaプログラムの3行目”Sample s1=new Sample();”を実行すると、プログラム実行部12は、Sampleオブジェクト“s”を生成する。この時、オブジェクト管理部18が、生成したオブジェクトの型“Sample”、生成点のメソッド名“main”及び行番号“3”と、これらを特定する生成点ID“1”を生成点表24−1に登録する。また、オブジェクト管理部18は生成点ID“1”と、オブジェクトID“O1”及び生成時間情報=「2」をオブジェクト生成表23−1に登録する。
その後、プログラム実行部12はJavaプログラム21の実行を進め、T2において、Javaプログラム20Aの5行目“// any operations”を実行し、Objオブジェクト“o”を生成する。ここでも同様にオブジェクト管理部18は、Objオブジェクト“o”の生成点での情報を生成点表24−2及びオブジェクト生成表23−2に登録する。
更に、プログラム実行部12が処理を進め、時間T3において、Javaプログラム20Aの8行目を実行すると、時間T1で作成したSampleオブジェクト“s”不要になるものとする。オブジェクト寿命解析部19は、Sampleオブジェクト“s”が、不要になったことを検出する。Sampleオブジェクトを特定するID“O1”を用いて、オブジェクト生成表23−2から生成点ID“1”及び生成時間情報=「2」を取得する。また、オブジェクト寿命解析部19は、現時点の疑似経過時間22=「5」を取得し、取得した生成時間情報=「2」との差分「3」を算出し、これを寿命とする。オブジェクト寿命解析部19は、生成点ID“1”及び寿命「3」を関連付けて寿命情報表26−1に登録する。
また、プログラム実行部12が、Javaプログラム20Aの9行目“//any operations”を実行するとObjオブジェクト“o”が不要になるものとする。上述した、T3の場合と同様に、オブジェクト寿命解析部19が、不要オブジェクト及びその寿命とを検出し、寿命情報表26−2に登録する。この様にして、オブジェクト管理部18と、オブジェクト寿命解析部19とが生成点表24、オブジェクト生成表23及び寿命情報表26を作成することで、オブジェクトの寿命管理を行うことができる。
以上、第1実施形態によれば、従来、人手により解析していたオブジェクトの寿命や、解析が難しかった大規模なシステムにおけるオブジェクトの寿命を動的に管理することができる。
特に、動的にオブジェクトの寿命を管理できるようにすることで、当該寿命情報を用いて、特定のオブジェクトを削除したり、GC対象外のメモリ領域に移動させたりといった種々のメモリ管理技術に応用することで、それら種々のメモリ管理技術の処理効率及び利便性を更に向上させる効果が期待できる。
また、そのオブジェクトがプログラム上のどの位置で生成されたものかも知り得るため、そのオブジェクトに対し、特別な処理を実装することも可能である。
<第1実施形態の変形例>
上述した第1実施形態では、プログラム実行部12が生成したオブジェクトの生成点における情報が、生成点表24及びオブジェクト生成表23に既に登録済みである場合、登録しないように構成している(図6:S182参照)。この構成は、オブジェクト寿命解析部19が行う、同じ生成点で生成されるオブジェクトの寿命解析を1回にでき、解析処理時間を短縮できるという効果がある。
ここで、同一の生成点で生成されるオブジェクトでも計算機システム100の負荷状況に応じてその寿命が異なる場合も考えられる。この場合、同一の生成点で生成されるオブジェクトでもオブジェクト生成表23等に登録し、オブジェクトの寿命解析を実施することも考えられる。以下に、第1の実施形態の変形例として、同一の生成点で生成されるオブジェクトが既にオブジェクト生成表23等に登録されていても、オブジェクト生成表23及びオブジェクト寿命情報表26にそのオブジェクトに関する情報を登録する構成を説明する。
図10に、変形例におけるオブジェクト管理部18の処理を示す。
オブジェクト管理部18は、プログラム実行部12がオブジェクトを生成すると、オブジェクトに関する情報(オブジェクトの型、メソッド名、行番号)をプログラム実行部12から取得する(S220)。オブジェクト管理部18は、それらの値に基づいて生成点表24に同一の値が登録済みか否かを判断する(S222)。オブジェクト管理部18は、登録済みでないと判定する場合(S222:No)、生成点表24にそれらの情報を登録し、本処理を終了する。
オブジェクト管理部18は、登録済みであると判定する場合(S222:Yes)、生成点表24上に登録されている同一の値に対応する生成点ID271を取得する。オブジェクト管理部18は、生成点ID271に基づいて、オブジェクト生成表23から、生成点ID231及びオブジェクトID232を読み出し、現在の疑似経過時間22を生成時間情報233として、それら対応付けて、オブジェクト生成表23に新たに登録し、本処理を終了する。
図11は、同一の生成点で生成されたオブジェクトが、図10の処理によって登録されたときのオブジェクト生成表23の状態を示す。オブジェクトID232が“O1”と“O4”に対応する生成点ID231が、いずれも“1”となっている。即ち両者は、同一のオブジェクトの型、メソッド名及び行番号を有するオブジェクトが、異なる擬似時間情報22(生成時間情報233)で生成されたことを意味する。
このようにして作成されたオブジェクト生成表23を基に、オブジェクト寿命解析処理部19が、オブジェクトの寿命を解析する。図11に示すオブジェクト生成表23において、オブジェクト寿命解析部19がオブジェクトの寿命解析を実施すると、図12に示すような寿命情報表26が得られる。図12において、1行目は生成点ID261が“1”であり、その寿命262が「1」であるのに対し、4行目も生成点ID262が“1”であるのに、その寿命262は「3」となっている。
しかしながら、この様な状態では、オブジェクト寿命解析部19は、ある生成点で生成するオブジェクトの寿命を一意に決定することができない。そこで、オブジェクト寿命解析部19は、寿命情報表26で、同一の生成点ID261を有する寿命の平均を計算し、当該生成点IDに対応する寿命を算出し、生成点とオブジェクトの寿命を1対1に対応付け、寿命情報表26として保持する。
以上説明した変形例によれば、同一生成点で生成されたオブジェクトそれぞれに対し寿命解析を実施し、その平均値を同一生成点で生成されたオブジェクトの寿命とすることから、寿命解析の精度を比較的向上できるという効果がある。
〔第2実施形態〕
次に、本発明の第2実施形態について説明する。第1実施形態及びその変形例では、擬似経過時間22の更新を、ガーベッジコレクタ13のGC発生を契機として更新するように構成した。これに対し第2実施形態は、擬似経過時間22の更新契機を、オブジェクト配置部14Bが、Javaヒープ21からオブジェクトを確保するための一定サイズの領域を確保したタイミングとすることを特徴の一つとするものである。
図13に、本発明を適用した第2実施形態である計算機システム200の構成を示す。計算機システム200は、オブジェクト配置部14Bの機能が、第1実施形態のオブジェクトは一部14Aとは異なり又領域確保情報26を新たに有する構成となっている。また、第2実施形態では、Javaヒープ21が、短寿命オブジェクトを格納する短寿命領域211及び長寿命オブジェクトを格納する長寿命領域212をとる場合について、特に、説明する。更に、計算機システム200は、オブジェクト生成表23、生成点表24及び寿命情報表25の内容を含む寿命情報ファイル00が、外部記憶装置4に出力されるようになっている。
その他の機能部等の構成は第1実施形態と同様である。以下、第1実施形態との差異について主に説明する。
オブジェクト配置部14Bは、第1実施形態のオブジェクト14Aと同様に、プログラム実行部12が、Javaプログラム20Aを実行することによって要求されたオブジェクトの生成を行い、Javaヒープ21の短寿命領域211に確保されたオブジェクトサイズ分の領域に、オブジェクトを配置する機能を有する。
オブジェクト配置分14Bは、領域確保情報26に、確保した分のメモリ容量を累積的に更新する機能を有するようになっている。ここで、オブジェクト配置部14Bは、確保された領域に生成したオブジェクトを配置した後、今回の領域確保容量を領域確保情報26に加算し、その累積値が閾値(容量閾値)を超える場合に、領域累積サイズをリセット(容量“0”)し、擬似経過時間22の値に1を加算し、更新するようになっている。
逆に、短寿命領域211の領域確保に失敗した場合、オブジェクト配置部14Bは、ガーベッジコレクタ13にGC実行要求を送信し、短寿命領域211を解放させるようになっている。
領域確保情報26は、Javaヒープ21の短寿命領域211上で、オブジェクト配置部14Bが確保している容量を示す情報である。容量は、オブジェクト配置部14Bが領域確保情報26をリセットするまで、累積的に加算されるようになっている。領域確保情報26に累積加算された容量をリセットする際の容量閾値は、少なくとも短寿命領域211の容量以下であることが好ましい。なお、容量閾値は計算機システム200に固定的に設定されたものでも良いし、入出力装置5を介して可変可能に入力することもできる。
以上の構成を有する計算機システム200の処理動作について、図14及び図15を用いて説明する。
図14に、オブジェクト配置部14Bの処理フローを示す。
オブジェクト配置部14Bは、プログラム実行部12からのオブジェクト生成要求により、Javaヒープ21の短寿命領域211から、生成するオブジェクトのサイズ分の領域を確保する(S250)。
オブジェクト配置部14Bは、領域確保の成否について判定を行う(S252)。オブジェクト配置部14Bは、領域の確保に失敗した場合(S252:No)、ガベージコレクタ13にGCの実行を要求し、Javaヒープ21の領域を解放させる(S254)。その後、オブジェクト配置部14Bは、処理をS200に戻す。これに対して、領域の確保に成功した場合(S252:Yes)、オブジェクト配置部14Bは、確保したサイズを領域確保情報26に加算する(S256)。
次いで、オブジェクト配置部14Bは、今回確保した容量を加算した領域確保情報26の容量が、容量閾値を超えているか否かの判定を行い(S258)、超えていない判定する場合、S210の処理に進む(S260:No)。これに対して、今回確保した容量を加算した領域確保情報26の容量が、容量閾値を超えていると判定する場合(S258:Yes)、S264の処理に進む。
オブジェクト配置部14Bは、現時点の擬似経過時間22の値に1を加算し、擬似経過時間22を更新する(S264)。その後、オブジェクト配置部14Bは、容量確保情報26の累積的な確保容量をリセット(“0”)にする(S266)。
S258:No、若しくはS216の後、オブジェクト配置部14Bは、確保した領域に生成したオブジェクトを配置し(S260)、オブジェクト管理部18に、今回生成及び配置したオブジェクトの生成情報を登録する指示を送信し(S262)、処理を終了する。
以上の動作処理を行うオブジェクト配置部14Bを有する計算機システム200の全体的な動作を説明する。
図15に、計算機システム200が実行する処理を模式的に示す。本図は、第1実施形態の図9に示した内容と類似するものである。図15中で、ヒープ確保累積量51は、擬似経過時間22の各時間間隔における短寿命領域211の確保量の遷移を棒グラフで示す。また、実行されるプログラムは、Javaプログラム20Aであり、図15の各吹き出し内のコードや、生成点表24、オブジェクト生成表23及び寿命情報表26の遷移も第1実施形態の図9と同様である。
以上のように、第2実施形態の計算機システム200によれば、Javaヒープ21の短寿命領域211に確保されるオブジェクト容量に応じて、オブジェクトの寿命を管理することができる。特に、計算機システム200では、閾値の設定により擬似経過時間22の更新をより柔軟に変更することが可能でき、オブジェクトの寿命をより精度良く実行することができるという効果がある。この点、GCの実行を契機に擬似経過時間22を更新する第1実施形態の計算機システム100から更に、利便性が向上するという効果を期待することができる。
また、この擬似経過時間22を更新するために領域確保情報26の容量閾値を柔軟に設定することができる構成は、寿命情報が低い精度で十分なケースにおいても、擬似経過時間22の更新処理を少なくすることに利用することもでき、本更新処理のオーバヘッドを軽減するという効果がある。
なお、第2実施形態の計算機システム200は、Javaヒープ21上の短寿命領域211を対象としてオブジェクトの寿命を管理する構成としたが、本発明はこの構成に限られるものではなく、長寿命領域212を対象として寿命の管理を行う構成とすることも可能である。
〔第3実施形態〕
次に、本発明を適用した第3実施形態である計算機システム300について説明する。
図16に、計算機システム300の構成を示す。計算機システム300は、第1及び第2実施形態における計算機システム100及び200の構成を概ね共通し、更に、その構成の特徴の一つとして、GCの管理対象外のメモリ領域(以下、「外部メモリ領域」という。)を有する。JavaVM10の様なJavaマシンでは、通常、オブジェクトを格納するメモリ領域としてJavaヒープ21を有する。上述のように、Javaヒープ21は、ガーベッジコレクタ13によるGC管理の対象となるメモリ領域である。これに対し、外部メモリ25は、ガーベッジコレクタ13によるGC管理の対象とはならないメモリ領域である。
計算機システム300は、オブジェクトの寿命に関連して、その配置先を外部メモリ領域27或いはJavaヒープ21にするかの処理を行うことを特徴の一つとする。更に、計算機システム300は、外部メモリ領域27にオブジェクトを配置する際、寿命が近いオブジェクト同士を同一の外部メモリ領域27に配置するようにすることを特徴の一つとする。
以下、実施形態1及び2との差異点について主に説明する。
先ず、計算機システム300は、第2実施形態の計算機システム200の構成に加えて、メモリ2に外部メモリ領域27及び外部メモリ管理表28を有する。更に、計算機システム300は、JavaVM10の機能部として、オブジェクト配置部14C、外部オブジェクト配置部15、外部オブジェクト配置部16及び外部メモリ解放部17を有する。
外部メモリ領域27は、CGの対象外であると供にプログラム実行部12が生成したオブジェクトを配置することが可能なメモリ領域である。なお、図16では、簡単の為に外部メモリ領域27を一つの纏まった領域として図示しているが、後述する外部メモリ確保部16の機能により、複数の領域として確保・管理することができるものである。即ち外部メモリ領域27は、複数確保されることが可能であり、同時に、個別に解放されることが可能なメモリ領域である。
オブジェクト配置部14Cは、第1及び第2実施形態のオブジェクト配置部14A及び14Bと同様に、オブジェクトの生成及び配置を行う機能部であるが、プログラム実行部からのオブジェクト配置要求ではなく、後述する外部オブジェクト配置部15からの呼び出し命令を契機として処理を開始する点が異なる。その他の構成は同様である。
外部オブジェクト配置部15は、プログラム実行部12からのオブジェクトの配置命令を契機として呼び出される。外部オブジェクト配置部15は、オブジェクトの配置命令を受けると、配置するオブジェクトに関する生成情報が、既に生成点表24に登録されているかを判定する機能を有する。より詳細には、配置するオブジェクト型、メソッド名及び生成点の行番号をプログラム実行部12から取得し、これらに基づいて生成点表24を検索することで判定を行う。生成点表24に、配置するオブジェクトに関するこれらの生成情報が記録されている場合、生成点IDに基づいて寿命情報表26から対応する寿命を取得する。取得した寿命が所定の閾値を超える場合、外部メモリ確保部16に、処理を渡すようになっている。
他方、取得した寿命が所定の閾値以下である場合や生成するオブジェクトに関する生成情報が生成点表24に登録されていない場合、処理をオブジェクト配置部14Cに渡すようになっている。
ここで、所定の閾値は、入出力装置5を介して、ユーザが任意に設定することも可能であるし、固定値として予めシステムに設定するように構成することもできる。第3実施形態では、ユーザが任意に設定可能な構成であるものとする。
外部オブジェクト確保部16は、外部オブジェクト配置部15からの処理要求を受け、擬似経過時間及び生成するオブジェクトの寿命に関する情報が記録された外部メモリ管理表28を参照し、外部メモリ領域27への領域の確保を行う機能や、外部メモリ管理表28の更新等を行う機能を有する。
図17に、外部メモリ管理表28の構成を模式的に示す。外部メモリ管理表28は外部メモリ領域27が確保された時点の生成時間情報281(擬似経過時間22)と、そこに配置される対象となるオブジェクトの寿命282と、外部メモリ領域27を特定する外部メモリID283とが夫々対応付けられて記録される表である。図17中の1行目の例では、外部メモリIDが“ex1”である外部メモリ領域27は、生成時間情報281(疑似経過時間22)が“1”の時に確保され、そこへ配置されるオブジェクトの寿命が「1」であることを示している。この様に、外部メモリ管理表28で疑似経過時間、オブジェクトの寿命及び外部メモリIDを関連付けて管理することで、同一の疑似経過時間22に生成する同一の寿命を持つオブジェクトを同一の外部メモリへ配置することができるようになっている。
なお、第3実施形態では、外部メモリ領域27へ配置するオブジェクトを生成した時の疑似経過時間22及びそのオブジェクトの寿命が、外部メモリ管理表28に登録された生成時間情報281及び寿命282に一致する例を説明するが、これらが完全に一致していなくても良い。例えば、所定の幅(余裕)を持って、疑似経過時間22や寿命の値が一致するものとする構成であってもよい。
外部オブジェクト解放部17は、外部メモリ領域27の解放処理を行う機能を有する。ここで、外部メモリ領域27の解放とは、外部メモリ領域27のアドレスの無効、アドレスの無効並びに配置されているデータ(オブジェクト)の削除及びアドレスは無効にせずに、データ(オブジェクト)のみの削除という、全ての意味を含む。
外部メモリ領域27の解放処理は、入出力装置5を介して入力されたユーザからの解放指示、外部メモリ領域27に配置されたオブジェクトが参照する若しくは参照される他のオブジェクトが無くなったとき或いはそれらプログラム実行部12が実行するJavaプログラム21の終了といった種々の契機で実行されるようになっている。
また、外部オブジェクト解放部17は、外部メモリ領域27を解放する際、外部メモリ管理表28から、解放対象の外部メモリ領域27の外部メモリID283と、それに対応する生成時間情報281及び寿命282を外部メモリ管理表28上で無効(削除)にする処理を行うようになっている。
次いで、計算機システム300の各処理部の処理動作について説明する。
図18に、外部オブジェクト配置部15の処理フローを示す。
先ず、外部オブジェクト配置部15は、プログラム実行部12から、生成されたオブジェクトの型、メソッド名及び行番号を取得する(S310)。
次いで、外部オブジェクト配置部15は、それらの情報に基づいて生成点表24を検索し、既に登録されているか否かの判定を行う(S312)。既に登録されていると判定する場合(S312:Yes)、外部オブジェクト配置部15は、対応する生成点ID271を取得し、寿命情報表26から生成点ID271に対応する寿命262を取得する(S314)。
次いで、外部オブジェクト配置部15は、取得した寿命262が、所定の閾値を超えるか否かを判定する(S316)。寿命262が所定の閾値を超えると判定する場合(S316:Yes)、外部メモリ確保部16を呼び出し、オブジェクトの配置領域を確保させる(S318)。その後、外部オブジェクト配置部15は、確保されたメモリ領域にオブジェクトを格納し、本処理を終了する(S320)。
また、S312において、外部オブジェクト配置部15は、プログラム実行部12で生成されたオブジェクトの生成情報が生成点表24に登録されていないと判定する場合(S312:No)或いはS316において、生成点ID271と対応する寿命262が所定の閾値以下と判定する場合(S312:No)、オブジェクト配置部14Cに制御を移し、本処理を終了する。
次に、外部メモリ確保部16の処理について説明する。図19に、外部メモリ確保部16の処理フローを示す。
外部メモリ確保部16は、外部オブジェクト配置部15から受信したオブジェクトの擬似経過時間22及び寿命262に基づいて、外部メモリ管理表28を検索し、これら擬似経過時間22及び寿命262に対応する外部メモリIDが存在するか否かの判定を行う(S340)。
存在すると判定する場合(S342:Yes)、外部メモリ確保部16は、疑似経過時間22及び寿命262に対応する外部メモリID283を取得し(S344)、当該外部メモリIDに対応する外部メモリ領域27のアドレスを外部オブジェクト配置部15に通知し(S346)、本処理を終了する。即ち外部メモリ確保部16は、S346においてオブジェクトを配置するメモリ領域の確保を行う。
他方、S342の判定において、対応する外部メモリID283が外部メモリ管理表283に存在しないと判定する場合(S342:No)、外部メモリ確保部16は、メモリ2から外部メモリ領域27新規に確保する(S348)。
次いで、外部メモリ確保部16は、新規に確保した外部メモリ領域27を特定する外部メモリID283を生成し、外部メモリ管理表28に登録すると供にオブジェクトの擬似経過時間22及び寿命262を、生成時間情報281及び寿命282として、外部メモリID283と対応付けて、外部メモリ管理表28に登録する(S350)。その後、外部メモリ確保部16は、S346に進み、生成した外部メモリID283に対応するアドレスを外部オブジェクト配置部15に通知し、本処理を終了する。
図20に、計算機システム300が実行する処理例を模式的に示す。本図は、第1実施形態の図9及び第2実施形態の図15に示した内容と類似するものであり、時間軸50に沿って、擬似経過時間22が更新される様を示している。擬似経過時間22の更新契機は、第1実施形態で述べたGC発生のタイミング若しくは実施形態2で述べた短寿命領域211に累積加算されたオブジェクト容量が閾値を超えたタイミングの何れでも適用可能であるが、図20の説明では累積加算されたオブジェクト容量が閾値を超えたタイミングで、擬似経過時間22が更新されるものとする。
また、生成されたオブジェクトを外部メモリ領域27に配置するか否かの判断で使用するオブジェクト寿命の閾値は、ユーザが入出力装置5を介して設定した“4”であるものとする。
また、図20は、外部メモリ領域27、外部メモリ管理表28について、時間T1、T2及びT4の時点で生成されたオブジェクトを例としてその状態遷移を示す。更に、生成点表24及び寿命情報表25は、既にオブジェクトの寿命解析が行われているものとする。
また、図20を用いた説明では、Javaプログラム20Cを適用するものとする。図21に、Javaプログラム20Cを示す。このプログラムは“Test”クラスが定義されており、その中で“main”メソッドが定義されている。図20の説明において、JavaVM10は、このプログラムを繰り返し実行するものとする。
先ず、時間T1において、プログラム実行部12がJavaプログラム20Cの3行目“Sample s1=new Sample();”を実行する際、Sampleオブジェクト“s1“を生成する。外部オブジェクト配置部15は、生成するオブジェクトの型”Sample”と、生成点のメソッド名“main”と、行番号“3”とに基づいて生成点表24を検索し、対応する生成点ID“1”を取得する(生成点表の1行目)。
外部オブジェクト配置部16は、取得した生成点ID“1”に基づいて寿命情報表25を検索し、対応する寿命“5”を取得する。ユーザにより予め設定された寿命の閾値は“4”であることから、外部オブジェクト配置部15は、外部メモリ確保部16に外部メモリ領域27の確保を依頼し、領域確保の後、生成されたオブジェクト“s1”を、確保された領域に配置する(外部メモリ25−1参照)。
この外部メモリ領域27の確保時において、外部メモリ確保部16は、現在の疑似経過時間“2”と、外部メモリ領域27に配置するオブジェクトの寿命“5”に基づいて、外部メモリ管理表28−1を検索し、対応する外部メモリIDの取得を試みる。外部メモリ管理表28−1には、対応する情報が存在しない為、外部メモリ確保部16は、新たな外部メモリ領域をメモリ2から確保する。その後、外部メモリ確保部16は、疑似経過時間“2”と、オブジェクトの寿命“5”と、新規に生成した外部メモリID“ex1”を、外部メモリ管理表28に対応付けて登録する(外部メモリ管理表28-2参照)。
その後、時間T2において、プログラム実行部12がJavaプログラム20Cの4行目“Obj o1=new Obj();”を実行する際、Objオブジェクト“o1”を生成する。外部オブジェクト配置部15は、生成されたオブジェクトの情報等から生成点表24及び寿命情報表25を検索し、オブジェクト“o1”の寿命“5”を取得する。この寿命はユーザが設定したオブジェクト寿命の閾値“4”よりも大きい為、外部オブジェクト配置部25は、外部メモリ確保部16に外部メモリ領域27の確保を依頼し、確保された領域にオブジェクト“o1”を配置する(外部メモリ領域25-2参照)。
このときの外部メモリ確保部16は、以下のように動作する。外部メモリ確保部16は、当該オブジェクトの疑似経過時間“2”と、そのオブジェクトの寿命“5”に基づいて、外部メモリ管理表28−2を検索し、対応する外部メモリIDの取得を試みる。その結果、先の処理によって登録された外部メモリID“ex1”を検出する。そこで、外部メモリ確保部16は、オブジェクト“o1”の配置先として、外部メモリ領域“ex1”を外部オブジェクト配置部15に通知する。なお、今回は、外部メモリ確保部15が、外部メモリ管理表28−2上から対応する外部オブジェクトIDを検出することができたので、外部メモリ管理表28−2への登録処理は行わない。
更にその後、時刻T3において、プログラム実行部12が、Javaプログラム20Cの6行目“Obj o2=new Obj();”を実行する際、Objオブジェクト“o2”を生成する。外部オブジェクト配置部15は、生成されたオブジェクトの情報等に基づいて生成点表24及び寿命情報表25を検索し、オブジェクト“o2”の寿命“2”を取得する(生成点表24の3行目、寿命情報表25の3行目)。この寿命はユーザが設定したオブジェクト寿命の閾値“4”以下である為、オブジェクト配置部14Cが、オブジェクト“o2”をJavaヒープ21の短寿命領域211に配置する。なお、今回は、外部メモリ確保部15の処理は無い為、外部メモリ管理表28への登録処理は発生しない。
最後に、時刻T4において、プログラム実行部12がJavaプログラム20Cの8行目“Sample s2=new Sample();”を実行する際、Sampleオブジェクト“s2”を生成する。外部オブジェクト配置部16は、生成されたオブジェクトの情報等に基づいて生成点表24及び寿命情報表25を検索し、オブジェクト“s2”の寿命“10”を取得する(生成点表24の4行目、寿命情報表25の4行目)。この寿命はユーザが設定したオブジェクト寿命の閾値「4」よりも大きい為、外部オブジェクト配置部15は、外部メモリ確保部16に外部メモリ領域27の確保を依頼し、確保された領域にオブジェクト“s2”を配置する。
このときの外部メモリ確保部16は、以下のように動作する。外部メモリ確保部16は、オブジェクト“s2”の疑似経過時間“5”と、そのオブジェクトの寿命“10”に基づいて、外部メモリ管理表28−2を検索し、対応する外部メモリIDの取得を試みる。その結果、外部メモリ管理表28−2には、該当する外部メモリIDが存在しない為、外部メモリ確保部16は、新たな外部メモリ領域(IDが“ex2”)をメモリ2から確保し、外部オブジェクト配置部15に、新たな外部メモリ領域(ex2)を通知する。
そして、外部メモリ確保部16は、オブジェクト“s2”の疑似経過時間“5”と、オブジェクト“s2”の寿命“10”及び新たに生成した外部メモリID“ex2”とを外部メモリ管理表28に登録する(外部メモリ管理表28-3参照)。
以上のように、この計算機システム300は、オブジェクトの生成点を用いたオブジェクト寿命を利用し、配置する外部メモリ領域27を変更することができるようになっている。このため生存期間がほぼ等しいオブジェクトを同一の外部メモリ領域27に配置することができるという効果がある。一般に、同時期に生成されたオブジェクトが不要になるタイミングは、ほぼ同時期になる傾向がある。このことから、外部メモリ解放部17によって、ある外部メモリ領域27を解放する際、解放する外部メモリ領域27に配置された1つのオブジェクトが不要であることを検出すれば、その外部メモリ領域27に配置された他のオブジェクトも不要である可能性が高く、その外部メモリ領域27を解放しても、システム上不具合が発生しない可能性も高いといえる。従って、外部メモリ領域27の解放効率が向上するという効果がある。
また、計算機システム300は、オブジェクト寿命の閾値を、ユーザが任意に設定することができるように構成している。よって、オブジェクト寿命の閾値を調節することで、外部メモリ領域27に配置するオブジェクトを柔軟に管理でき、JavaVM10のGCの発生回数を調整できるという効果がある。
以上、本発明を実施するための形態について説明したが、本発明はこれらの構成に限定されるものではなく、その趣旨を逸脱しない範囲で種々の構成をとることが可能である。
また、上述した各機能部を実現するソフトウェア等は、磁気的又は光学的な可搬の記録媒体に記録することもできるし、それらを用いてコンピュータにインストールすることもできる。更に、インターネット等のネットワークを介してダウンロードすることでコンピュータにインストールすることも可能である。
1 CPU
2 メモリ
3 補助記憶装置
4 外部記憶装置
5 入出力装置
10 JavaVM
12 プログラム実行部
13 ガーベッジコレクタ
14A、14B、14C オブジェクト配置部
15 外部オブジェクト配置部
16 外部メモリ管理部
17 外部メモリ解放部
19 オブジェクト寿命解析部
20A、20C Javaプログラム
21 Javaヒープ
22 擬似経過時間
23 オブジェククト生成表
24 生成点表
25 寿命情報表
26 領域確保情報
27 外部メモリ領域
28 外部メモリ管理表

Claims (14)

  1. プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機であって、
    前記制御部は、
    所定の契機で時間情報を更新し、
    オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記憶装置に記録し、
    前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得し、
    前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて、前記記装置に記録し、
    オブジェクトの生成時に取得した前記オブジェクトを生成するプログラムの情報及び該オブジェクト生成時の前記時間情報が既に記録されている場合、該記録されているオブジェクトの情報に関連付けられた前記差分を取得し、
    前記差分が所定の閾値を超える場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を前記差分の範囲に対応づけて確保し、前記オブジェクトを前記他の記憶領域に配置することを特徴とする計算機。
  2. 請求項1に記載の計算機であって、
    前記制御部は、
    前記不要なオブジェクトの検出を実行したとき前記時間情報を更新することを特徴とする計算機。
  3. 請求項1に記載の計算機であって、
    前記制御部は、
    前記記憶領域に格納されたオブジェクトの容量が容量閾値を超えたとき前記時間情報を更新することを特徴とする計算機。
  4. 請求項3に記載の計算機であって、
    前記制御部は、
    前記記憶領域に格納されたオブジェクトの累積容量が前記容量閾値を超えたとき前記時間情報を更新し、前記累積容量をリセットすることを特徴とする計算機。
  5. 請求項3又は4に記載の計算機であって、
    前記制御部は、
    ユーザが操作可能な入力装置を介して入力された値に基づいて前記容量閾値を設定することを特徴とする計算機。
  6. 請求項1〜5の何れか一項に記載の計算機であって、
    前記プログラムの情報は、前記オブジェクトを生成するメソッドに関する情報を少なくとも含むことを特徴とする計算機。
  7. 請求項6に記載の計算機であって、
    前記メソッドに関する情報は、メソッド名及び行番号を含むことを特徴とする計算機。
  8. 請求項1〜7の何れか一項に記載の計算機であって、
    前記制御部は、
    前記記憶領域に格納されたオブジェクトが他のオブジェクトを参照していない若しくは他のオブジェクトから参照されていないとき、前記オブジェクトを不要オブジェクトとして検出することを特徴とする計算機。
  9. 請求項に記載の計算機であって、
    前記制御部は、
    前記差分、前記他の記憶領域を確保したときの前記時間情報及び前記他の記憶領域を特定する情報を関連付けて記憶し、
    前記他の記憶領域を確保するとき、前記オブジェクトの差分及び前記時間情報が記憶されていない場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を確保することを特徴とする計算機。
  10. 請求項に記載の計算機であって、
    前記制御部は、
    前記他の記憶領域を確保するとき、前記オブジェクトの差分及び前記時間情報が記憶されている場合、該オブジェクトの差分及び前記時間情報に関連付けられた前記他の記憶領域を特定する情報に基づいて、前記不要なオブジェクトの検出の対象とならない他の記憶領域に、前記オブジェクトを配置することを特徴とする計算機。
  11. 請求項9〜10の何れか一項に記載の計算機であって、
    前記制御部は、
    ユーザが操作可能な入力装置を介して入力された値に基づいて前記所定の閾値を設定することを特徴とする計算機。
  12. 請求項9〜11の何れか一項に記載の計算機であって、
    前記制御部は、
    前記他の記憶領域に格納されたオブジェクトが後のプログラムの実行に不要なオブジェクトである否かを判定し、不要なオブジェクトであると判定する場合、該不要なオブジェクトが配置された他の記憶領域を解放することを特徴とする計算機。
  13. プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機の制御方法であって、
    前記制御部が、
    所定の契機で時間情報を更新し、
    オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記録し、
    前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得し、
    前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて記録し、
    オブジェクトの生成時に取得した前記オブジェクトを生成するプログラムの情報及び該オブジェクト生成時の前記時間情報が既に記録されている場合、該記録されているオブジェクトの情報に関連付けられた前記差分を取得し、
    前記差分が所定の閾値を超える場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を前記差分の範囲に対応づけて確保し、前記オブジェクトを前記他の記憶領域に配置することを含む計算機の制御方法。
  14. プログラムの実行により生成されたオブジェクトを配置する記憶領域と、前記プログラムの実行及び前記記憶領域の解放を行う制御部と有する計算機に、
    所定の契機で時間情報を更新する機能と、
    オブジェクトの生成時に、前記オブジェクトを生成するプログラムの情報と、該オブジェクト生成時の前記時間情報とを取得し、これを関連付けて記録する機能と、
    前記記憶領域に格納されたオブジェクトのうち後のプログラムの実行に不要なオブジェクトを検出し、該検出時の前記時間情報を取得する機能と、
    前記生成時の時間情報と、前記検出時の時間情報との差分を前記プログラムの情報と関連付けて記録し、
    オブジェクトの生成時に取得した前記オブジェクトを生成するプログラムの情報及び該オブジェクト生成時の前記時間情報が既に記録されている場合、該記録されているオブジェクトの情報に関連付けられた前記差分を取得し、
    前記差分が所定の閾値を超える場合、前記不要なオブジェクトの検出の対象とならない他の記憶領域を前記差分の範囲に対応づけて確保し、前記オブジェクトを前記他の記憶領域に配置する機能とを実現させることを特徴とするプログラム。
JP2010268951A 2010-12-02 2010-12-02 計算機、計算機の制御方法及びプログラム Expired - Fee Related JP5618796B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2010268951A JP5618796B2 (ja) 2010-12-02 2010-12-02 計算機、計算機の制御方法及びプログラム
US13/880,198 US9189393B2 (en) 2010-12-02 2011-11-25 Computer, control method of computer, and recording medium
PCT/JP2011/006557 WO2012073460A1 (ja) 2010-12-02 2011-11-25 計算機、計算機の制御方法及び記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010268951A JP5618796B2 (ja) 2010-12-02 2010-12-02 計算機、計算機の制御方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2012118834A JP2012118834A (ja) 2012-06-21
JP5618796B2 true JP5618796B2 (ja) 2014-11-05

Family

ID=46171434

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010268951A Expired - Fee Related JP5618796B2 (ja) 2010-12-02 2010-12-02 計算機、計算機の制御方法及びプログラム

Country Status (3)

Country Link
US (1) US9189393B2 (ja)
JP (1) JP5618796B2 (ja)
WO (1) WO2012073460A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8949295B2 (en) 2006-09-21 2015-02-03 Vmware, Inc. Cooperative memory resource management via application-level balloon
US8583875B1 (en) 2010-07-13 2013-11-12 Vmware, Inc. Efficient readable ballooning of guest memory by backing balloon pages with a shared page
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
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
WO2014171002A1 (ja) * 2013-04-19 2014-10-23 株式会社日立製作所 メモリ管理方法、計算機及び記録媒体
US9448928B2 (en) * 2013-04-26 2016-09-20 Oracle International Corporation System and method for two-tier adaptive heap management in a virtual machine environment
KR20150106778A (ko) 2014-03-12 2015-09-22 삼성전자주식회사 메모리 시스템 및 메모리 시스템의 제어 방법
WO2016111702A1 (en) * 2015-01-09 2016-07-14 Hewlett Packard Enterprise Development Lp Persistent memory garbage collection
US11061572B2 (en) 2016-04-22 2021-07-13 Advanced Micro Devices, Inc. Memory object tagged memory monitoring method and system

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3027845B2 (ja) * 1997-11-21 2000-04-04 オムロン株式会社 プログラム制御装置および方法
US6799191B2 (en) * 2000-05-16 2004-09-28 Sun Microsystems, Inc. Object sampling technique for runtime observations of representative instances thereof
JP4512402B2 (ja) 2004-04-12 2010-07-28 株式会社日立製作所 メモリリークの原因箇所検出方法、及びその実行プログラム
US7313661B1 (en) * 2005-03-18 2007-12-25 Sun Microsystems, Inc. Tool for identifying causes of memory leaks
JP2007004413A (ja) 2005-06-23 2007-01-11 Hitachi Ltd メモリリークの検出方法
JP5064134B2 (ja) 2007-08-03 2012-10-31 株式会社日立製作所 メモリ管理方法およびその方法を用いるコンピュータ
JP4555879B2 (ja) * 2008-08-11 2010-10-06 株式会社日立製作所 メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置
JP5281452B2 (ja) 2009-03-25 2013-09-04 株式会社日立製作所 メモリ管理方法、コンピュータ、及び、メモリ管理プログラム
JP5391422B2 (ja) 2009-09-01 2014-01-15 株式会社日立製作所 メモリ管理方法、計算機システム及びプログラム

Also Published As

Publication number Publication date
WO2012073460A1 (ja) 2012-06-07
US9189393B2 (en) 2015-11-17
US20130290382A1 (en) 2013-10-31
JP2012118834A (ja) 2012-06-21

Similar Documents

Publication Publication Date Title
JP5618796B2 (ja) 計算機、計算機の制御方法及びプログラム
TWI468937B (zh) 產生分支記錄的方法與系統及儲存分支記錄的處理器
US8255658B2 (en) Memory management method and computer using the same
US8661450B2 (en) Deadlock detection for parallel programs
JP5705084B2 (ja) 2パス自動アプリケーション計測
Liu et al. A data-centric profiler for parallel programs
David et al. Continuously measuring critical section pressure with the free-lunch profiler
KR20080071135A (ko) 소프트웨어 트랜잭션 메모리 블록들을 포함하는 프로그램의컴파일을 위한 방법
JP2010079508A (ja) プロファイリング方法およびプロファイリングプログラム
Jayasena et al. Detection of false sharing using machine learning
KR102161192B1 (ko) 코어 트레이스로부터 데이터 마이닝을 하기 위한 방법 및 장치
US8397045B2 (en) Memory management device, memory management method, and memory management program
JP5896952B2 (ja) メモリを管理する方法、装置およびコンピュータ・プログラム
US7991808B2 (en) Per thread garbage collection
CN107003897B (zh) 监控事务处理资源的利用率
JP5281452B2 (ja) メモリ管理方法、コンピュータ、及び、メモリ管理プログラム
Christiaens et al. TRaDe: Data race detection for Java
KR101634118B1 (ko) 메모리 관리 장치 및 방법
Peiris et al. Automatically detecting" excessive dynamic memory allocations" software performance anti-pattern
CN108628678B (zh) 内存参数的确定方法、装置及设备
JP2004295889A (ja) データ処理システム内での処理タスクの実行を制御する方法および装置
Wicaksono et al. Detecting false sharing in openmp applications using the darwin framework
JP5199975B2 (ja) メモリ管理方法、メモリ管理プログラム、及び、情報処理装置
US20140164708A1 (en) Spill data management
WO2011104889A1 (ja) 計算機システム、メモリ管理方法及びメモリ管理プログラム

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20120521

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140218

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140310

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140916

R151 Written notification of patent or utility model registration

Ref document number: 5618796

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees