JP2011133919A - オブジェクト生成地点記録方法およびプログラム - Google Patents

オブジェクト生成地点記録方法およびプログラム Download PDF

Info

Publication number
JP2011133919A
JP2011133919A JP2009289944A JP2009289944A JP2011133919A JP 2011133919 A JP2011133919 A JP 2011133919A JP 2009289944 A JP2009289944 A JP 2009289944A JP 2009289944 A JP2009289944 A JP 2009289944A JP 2011133919 A JP2011133919 A JP 2011133919A
Authority
JP
Japan
Prior art keywords
class
pointer
generation point
information
generation
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.)
Granted
Application number
JP2009289944A
Other languages
English (en)
Other versions
JP4959781B2 (ja
Inventor
Kiyokuni Kawachiya
清久仁 河内谷
Tamiya Onodera
民也 小野寺
Rei Ohira
怜 大平
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2009289944A priority Critical patent/JP4959781B2/ja
Priority to US12/963,734 priority patent/US8495647B2/en
Publication of JP2011133919A publication Critical patent/JP2011133919A/ja
Application granted granted Critical
Publication of JP4959781B2 publication Critical patent/JP4959781B2/ja
Priority to US13/940,570 priority patent/US9021496B2/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • 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
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】オブジェクト生成地点記録方法およびプログラムを提供することである。
【解決手段】上記課題を解決するために第1の態様として、
オブジェクトの生成地点を記録する方法であって、
オブジェクト構造中のクラスを指すポインタを、前記オブジェクトの生成地点ごとに異なる、生成地点ディスクリプタを指すポインタに置き換えるステップと、
前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタを経由して行うステップ、
を有する、オブジェクトの生成地点記録方法を提供する。
【選択図】図3

Description

本発明はオブジェクトの生成地点を記録する方法に関し、特に低コストで生成地点を記録する方法およびプログラムに関する。
Java (商標) などのオブジェクト指向言語を用いて大規模アプリケーションを構築することが一般的になっている。このようなシステムで起きる問題の一つに、オブジェクトが大量に生成され、GC (Garbage Collection) によっても回収されず、ヒープが使い尽くされてダウンするというものがある。この問題を解決するには、システムダウン時のメモリダンプを取得し、ヒープに残っている各オブジェクトがアプリケーションのどのコードによって生成されたか、つまり「オブジェクトの生成地点」を調べる機能が重要となる。
しかし、JVMTI (Java VirtualMachine Tool Interface) などを用いてオブジェクトの生成地点を生成の度にロギングする手法では実行が極端に遅くなる上、記録用の領域が膨大なサイズになるという問題がある。また、実行中に生成地点ごとの特性を集計し最適化に用いることも難しい。一方、各オブジェクトに生成地点を記録する領域を追加する手法では、実行時のオーバヘッドは少ないが、そのためのメモリが余計に必要となり、メモリ不足を解消する方法としては使えない。また最適化のためにオブジェクト生成地点ごとの情報を集計するのも難しい。
従来の方法として特許文献1または非特許文献1などがある。Java 処理系向けにオブジェクトヘッダ内にもともと存在している「hashcode」という領域を利用して、そこに生成地点の情報を変換して(コード化して)埋め込むという方法である。しかし、この方法はそのような領域が存在しないオブジェクトモデルでは使用できない。また生成地点を変換するコストなどのオーバヘッドがあるという弱点がある。そして生成地点情報が変換されているのでアプリケーションの実行中にその情報を利用することを困難にしている。
特願2009−49727
千葉 "スレッド別ごみ集めにおけるライトバリアの高速化", 情報処理学会論文誌:プログラミング, Vol.45, No.SIG5, pp.53-61,2004.
従って、本発明の課題は、オブジェクトの生成地点に関する情報を、少ないメモリオーバヘッドで記録する方法を提供することである。またアプリケーションの実行中に処理系がオブジェクトの生成地点を判別できるようにすることである。またオブジェクトの生成地点に関する情報を利用してオブジェクトの再配置やオブジェクト生成場所の最適化を行うことである。
本発明は、上記課題を解決するために、オブジェクトの生成地点を記録する方法であって、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、を有するようにする。
前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用するようにする。
前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用するようにする。
さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集するステップと、前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行うステップを有するようにする。
さらに、前記拡張領域にクラス情報の一部をコピーするステップを有するようにする。
前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用するようにする。
さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用するステップを有するようにする。
さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意するステップを有するようにする。
別の態様として、本発明は、オブジェクトの生成地点を記録するシステムであって、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスと前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換える手段と、前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用する手段と、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行う手段、を有する。
前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用する。
前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用する。
さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集する手段と、前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行う手段を有する。
さらに、前記拡張領域にクラス情報の一部をコピーする手段を有する。
前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用する。
さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用する手段を有する。
さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意する手段を有する。
別の態様として、本発明は、オブジェクトの生成地点を記録するプログラムであって、該プログラムがコンピュータに、オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、を実行させる。
本発明により、オブジェクトの生成地点に関する情報を、少ないメモリオーバヘッドで記録することができる。またアプリケーションの実行中に処理系がオブジェクトの生成地点を判別できるので、その情報を利用してオブジェクトの再配置やオブジェクト生成場所の最適化を行うことが可能になる。
オブジェクトの一般的な構造を示す図である。 本発明によるオブジェクトの構造を示す図である。 存在する領域を生成地点ディスクリプタとして使用する例を示す図である。 生成地点ごとの情報を収集するための拡張例を示す図である。 オブジェクト指向言語実行環境に適用した場合の全体構成を示す図である。 オブジェクト生成のフローチャートを示す図である。 メモリ参照のコストを低減するための拡張を図示する。 クラス構造自体を1つ目の生成地点ディスクリプタとして使用する拡張例を示す図である。 オブジェクトの生成地点数の測定結果を示す図である。 コンピュータ・ハードウェアのブロック図の一例を示す。 生成地点ディスクリプタの構造を示す図である。
オブジェクト指向言語処理系では、オブジェクトはその設計図である「クラス」を指定して生成される。実行時にオブジェクトのクラスを判別するため、オブジェクトヘッダにクラスへのポインタが収められているのが一般的である。図1にオブジェクトの一般的な構造を示す。オブジェクトは大きく分けてヘッダと、ボディからなる。図1のオブジェクトA1、A2,A3,B1はその設計図である、クラスA,クラスBを指定して生成される。
アプリケーション実行中に処理系がオブジェクトの生成地点を判別できれば、その情報を利用してオブジェクトの再配置やオブジェクト生成場所の最適化を行うことが容易になる。本発明はオブジェクトヘッダにクラスへのポインタを収める代わりに、「生成地点ディスクリプタ」へのポインタを収める。
図11に生成地点ディスクリプタの構造を図示する。生成地点ディスクリプタは、オブジェクトを生成したアドレスと、オブジェクトのクラスへのポインタによって構成される。
図11では明示的にオブジェクトを生成したアドレスを有しているが、オブジェクトが生成されたアドレスは生成地点ディスクリプタが存在するコードによって判別する方法がより実用的である。図2に本発明によるオブジェクトの構造の一例を示す。生成地点ディスクリプタ210、220には、オブジェクトをどこで生成したかの情報とクラスへのポインタを有する。図2では3つの生成地点ディスクリプタがある。図2の構成では,生成地点ディスクリプタにはクラスへのポインタだけが入っており,オブジェクトが生成されたアドレスは生成地点ディスクリプタが存在するコードによって表されている。以下、オブジェクトが生成されたアドレスをオブジェクトの生成地点と記載する。
この生成地点ディスクリプタによって、そのオブジェクトの生成地点を分別する。図2の例では、オブジェクトA1とA2はコードX(210)によって生成されA3とB1はコードY(220)によって生成されたことがわかる。もともとクラスへのポインタが収められていた場所を生成地点ディスクリプタへのポインタで置き換えているので、オブジェクトに対する追加メモリオーバヘッドが無い。生成地点ディスクリプタにはクラスへのポインタが入っているので、これをたどることでクラス情報にアクセスすることができる。
同じ地点で生成されるオブジェクトには、同じ生成地点ディスクリプタが使用される。そのため、ディスクリプタの数はオブジェクトの数に比べて圧倒的に少なくてよく、そのための追加メモリオーバヘッドは少ない。なおこの生成地点ディスクリプタはオブジェクト生成を指示するコード中の領域を流用するようにすると追加メモリオーバヘッドを無くすことができる。このオブジェクト生成を指示する領域は既に存在している領域なので生成地点ディスクリプタのため領域を別途用意する必要がない。
図3に、もともと存在する領域を生成地点ディスクリプタ310として使用する例を示す。オブジェクトを生成する場合にはクラスが指定されるが、多くの場合このクラス情報はコード中で静的に保持されている。その領域を使用すれば、生成地点ディスクリプタ用のメモリ領域を新たに確保する必要はない。たとえば、Javaのインタプリタ実行においては、バイトコード「new」で指定されるコンスタントプール(constant pool)の(resolve済みの)場所をディスクリプタとして使用できる。またJITコンパイルされたコードではオブジェクト生成用の関数(図3では createObj)に渡されるクラス情報が入っている場所をそのまま生成地点ディスクリプタとして使用できる。なお前者の場合、同じクラス内のどの newがオブジェクト生成を行ったかの分別が困難であるが、これはメモリオーバヘッドを増やさないためのトレードオフである。
リフレクションによるオブジェクト生成のように、クラス情報が動的に指定される場合、生成地点ディスクリプタに流用できる領域が存在しないことがある。この場合には専用の生成地点ディスクリプタを用意してもよいが、図3のオブジェクトA4のようにクラスごとに用意した「セルフポインタ」をディスクリプタとして用いることで、追加メモリオーバヘッドを少なく保つことができる。この場合はオブジェクトの生成地点の分別はできないが、そのようなケースは少数である。
このセルフポインタは、これまで述べた中では唯一の追加メモリオーバヘッドであるが、クラスの数はオブジェクトや生成地点の数に比べて圧倒的に少ないため、あまり問題とならない。また、言語処理系の実装によってはすでにセルフポインタと同様のものを内部に持っており、それを流用すればオーバヘッドとはならない。
本発明の生成地点記録方法では、オブジェクトの生成地点ごとに生成地点ディスクリプタが用意される。そのため、この領域を拡大し、生成地点ごとの情報を集計することで、アプリケーション実行中にオブジェクト配置の最適化を行うことができる。図4に生成地点ごとの情報を収集するための拡張例を示す。
図4でオブジェクトA1,A2は生成地点ディスクリプタ410へのポインタをヘッダに有し、生成地点ディスクリプタ410はクラスAへのポインタと拡張領域を有する。オブジェクトA3は生成地点ディスクリプタ420へのポインタをヘッダに有し、生成地点ディスクリプタ420はクラスAへのポインタと拡張領域を有する。オブジェクトB1は生成地点ディスクリプタ430へのポインタをヘッダに有し、生成地点ディスクリプタ430はクラスBへのポインタと拡張領域を有する。
この拡張領域には、この生成地点ディスクリプタを参照してきたオブジェクトの数、オブジェクトの種類などの統計情報を置いても良い。
集計する情報と最適化の例としては、
・GC の時に生成地点ごとに生存オブジェクト数を集計し、増加し続ける場合はその生成地点がメモリリークを引き起こしているのではないかという警告を出す。
・世代別 GC を用いる場合に、長生き領域に移されたオブジェクトの割合を生成地点ごとに集計し、割合が高い場合はその生成地点で生成されるオブジェクトは最初から長生き領域に生成する。
などが考えられる。生成地点ディスクリプタを拡張すると、上で述べた「もともと存在する領域」をそのまま使用することが困難になる場合もあるが、生成地点はオブジェクト数に比べれば圧倒的に少ないので、追加メモリオーバヘッドが低いという本発明の特長は保たれる。
図5に本発明をオブジェクト指向言語実行環境に適用した場合の全体構成を示す。各オブジェクトA1,A2,A3,A4,B1,C1はそれを生成した場所に対応する生成地点ディスクリプタ520をポイントしており、クラスA,B、CはコードX、コードY,コードZ内の生成地点ディスクリプタからポイントされている。また各クラスA,B、Cには自分自身をポイントするセルフポインタ510が用意されている。
図6に、本発明によるオブジェクト生成のフローチャートを示す。オブジェクト生成時に、クラス情報に加え生成地点ディスクリプタの場所を渡すのが特徴である。この情報が指定されていない場合は、クラスのセルフポインタを生成地点ディスクリプタとして使用する。
ステップ602で、引数として、クラス情報と生成地点ディスクリプタを受け取る。次にステップ604で、生成地点ディスクリプタが指定されているか判断する。ここで指定されている場合には処理はステップ608へ進む。指定されていない場合にはステップ606で、生成地点ディスクリプタとしてクラスのセルフポインタを使用しステップ612に進む。ステップ608ではクラス情報が生成地点ディスクリプタ内のクラス情報と等しいか判断する。もし等しければ処理はステップ612に進む。等しくなければ処理はステップ610へ進み引数エラーとして終了する。ステップ612でヒープ内に、指定されたクラスのオブジェクトを生成する。この処理は従来のオブジェクト生成処理と同様の処理である。次にステップ614で、生成したオブジェクトのヘッダに、生成地点ディスクリプタへのポインタを入れる。そして最後にステップ616へ進み、生成したオブジェクトを返す。
<本発明の拡張1>
本発明では、オブジェクトヘッダから生成地点ディスクリプタを指すことにより、生成地点の分別と生成地点ごとの情報収集を可能にする。しかし、これによりクラス情報へのアクセスに一回分メモリ参照が余計に必要になる。図7に、このメモリ参照のコストを低減するための拡張を図示する。クラス内の情報のうち、頻繁に参照され、かつほとんど変更されないものを、生成地点ディスクリプタ710、720、730にコピーする。図7では dataA、dataB と記載している部分がこのコピーに当たる。これによりアクセスを高速化している。頻繁に参照され、かつほとんど変更されない情報の例としては、仮想関数テーブルやオブジェクトサイズなどがある。
拡張1の方法により、メモリが余計に必要となるが、生成地点はオブジェクトの数に比べて少ないため、オブジェクトヘッダのサイズを増やす素直な方法よりもメモリオーバヘッドは少ない。
<本発明の拡張2>
さらに、クラスごとの最初の生成地点ディスクリプタとしてクラス構造自体を用いることで、拡張1のメモリオーバヘッドの削減を行うことができる。図8に、クラス構造自体を1つ目の生成地点ディスクリプタとして使用する拡張例を示す。図8では図7における生成地点ディスクリプタ710、730がクラス構造自体に入っているので、拡張1の方法と比べて、dataA、dataB の複製が少なくなっていることがわかる。
<本発明の拡張3>
本発明の生成地点ディスクリプタは、生成するオブジェクトのクラスが同じであれば複数の生成地点で共有することもできる。収集したい情報の粒度がクラスごと、パッケージごとでよい場合はこのようにまとめることで情報収集のための領域を節約することができる。すなわちオブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用する。
逆に、生成地点だけでなくその呼び出しコンテクストの情報もトラックしたい場合、同じ生成地点であってもコンテクストごとに別の生成地点ディスクリプタを用意することでより細かい情報収集を行うことも可能である。すなわち、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意することも可能である。
本発明により、オブジェクトの生成地点に関する情報を少ないメモリオーバヘッドで記録し利用することが可能となる。図9にオブジェクトの生成地点数を測定した結果を示す。対象である複数の Java アプリケーションを行にとり、総メモリ使用量( psで見える javaプロセスの RSS値)、クラスの数、生成地点の数、ヒープ内の平均オブジェクト数を列にして、測定結果を図示する。ヒープサイズには、動作可能な最小ヒープの4倍を指定している。図9の結果から、クラス数、生成地点数はオブジェクト数に比べて圧倒的に少ないことがわかる。
本発明では、生成地点ディスクリプタに情報収集用のフィールドを追加し実行中の最適化に用いることができる。実験によりその場合でも、生成地点はオブジェクト数に比べれば圧倒的に少ないので、追加メモリオーバヘッドが低いことがわかった。
また本発明では、もともと存在する領域を生成地点ディスクリプタとして使用する方法を開示しているが、実験により、追加メモリオーバヘッドが無いことがわかった。クラスのセルフポインタがもともと存在しない場合の方法については若干のオーバヘッドが生じるが、図9よりクラスの数は生成地点の数と比べてもさらに少ないので、問題とならない。
<コンピュータ・ハードウェアのブロック図>
図10に本発明の実施態様における、コンピュータ・ハードウェアのブロック図を一例として示す。本発明の実施形態に係るコンピュータ・システム(1001)は、CPU(1002)とメイン・メモリ(1003)と含み、これらはバス(1004)に接続されている。CPU(1002)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものであり、例えば、インテル社のXeon(商標)シリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Pentium(商標)シリーズ、Celeron(商標)シリーズ、AMD社のPhenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(商標)シリーズ及びSempron(商標)などを使用することができる。
バス(1004)には、ディスプレイ・コントローラ(1005)を介して、LCDモニタなどのディスプレイ(1006)が接続されている。ディスプレイ(1006)は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス(1004)にはまた、IDE又はSATAコントローラ(1007)を介して、ハードディスク又はシリコン・ディスク(1008)と、CD−ROM、DVDドライブ又はBlu−rayドライブ(1009)が接続されている。
ハードディスク(1008)には、オペレーティング・システム、好適にはオブジェクト指向言語実行環境のコードを含むプログラム及びデータが、メイン・メモリ(1003)にロード可能なように記憶されている。本発明のオブジェクトのデータはハードディスク(1008)もしくはメイン・メモリ(1003)に格納されCPU(1002)により処理が行われる。
CD−ROM、DVD又はBlu−rayドライブ(1009)は、必要に応じて、CD−ROM、DVD−ROM又はBlu−rayディスクからプログラムをハードディスクに追加導入するために使用される。バス(1004)には更に、キーボード・マウスコントローラ(1010)を介して、キーボード(1011)及びマウス(1012)が接続されている。
通信インタフェース(1014)は、例えばイーサネット(商標)・プロトコルに従う。通信インタフェース(1014)は、通信コントローラ(1013)を介してバス(1004)に接続され、コンピュータ・システム及び通信回線(1015)を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線LAN環境、或いは例えばIEEE802.11a/b/g/nなどの無線LAN接続規格に基づく無線LAN環境であってもよい。
210、310、410、420、430、520、710 生成地点ディスクリプタ
510 セルフポインタ

Claims (17)

  1. オブジェクトの生成地点を記録する方法であって、
    オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、
    前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、
    前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、
    を有する、オブジェクトの生成地点記録方法。
  2. 前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用する、請求項1記載の方法。
  3. 前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用する、請求項2記載の方法。
  4. さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集するステップと、
    前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行うステップ
    を有する請求項1記載の方法。
  5. さらに、前記拡張領域にクラス情報の一部をコピーするステップを有する請求項4記載の方法。
  6. 前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用する、請求項5記載の方法。
  7. さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用するステップを有する、請求項1記載の方法。
  8. さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意するステップを有する、請求項1記載の方法。
  9. オブジェクトの生成地点を記録するシステムであって、
    オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスと前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換える手段と、
    前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用する手段と、
    前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行う手段、
    を有する、オブジェクトの生成地点記録システム。
  10. 前記生成地点ディスクリプタとして、前記オブジェクトの生成時点で存在している、オブジェクトのクラスへのポインタを記録した領域を使用する、請求項9記載のシステム。
  11. 前記オブジェクトのクラスへのポインタを記録した前記領域が存在しない場合は、前記クラスのクラス自身を指すポインタであるセルフポインタを、前記生成地点ディスクリプタとして使用する、請求項10記載のシステム。
  12. さらに、前記生成地点ディスクリプタに拡張領域を設け、オブジェクトが生成されたアドレスごとのオブジェクトの情報を収集する手段と、
    前記情報を用いて、アプリケーション実行中のオブジェクト配置最適化を行う手段
    を有する請求項9記載のシステム。
  13. さらに、前記拡張領域にクラス情報の一部をコピーする手段を有する請求項12記載のシステム。
  14. 前記クラス情報が、クラス構造自体であり、これを前記生成地点ディスクリプタとして使用する、請求項13記載のシステム。
  15. さらに、オブジェクトに関する収集したい情報の粒度に応じて、複数の生成地点で生成地点ディスクリプタを共用する手段を有する請求項9記載のシステム。
  16. さらに、オブジェクトに関する収集したい情報の粒度に応じて、同一の生成地点を有していても異なる生成地点ディスクリプタを用意する手段を有する請求項9記載のシステム。
  17. オブジェクトの生成地点を記録するプログラムであって、該プログラムがコンピュータに、
    オブジェクト構造中のクラスを指すポインタを、前記オブジェクトを生成したアドレスの情報と前記オブジェクトのクラスへのポインタを有する生成地点ディスクリプタを指すポインタに置き換えるステップと、
    前記生成したアドレスが同一のオブジェクトには、同一の生成地点ディスクリプタを使用するステップと、
    前記オブジェクトの前記クラスへのアクセスは前記生成地点ディスクリプタの前記クラスへのポインタを参照して行うステップ、
    を実行させる、オブジェクトの生成地点記録プログラム。
JP2009289944A 2009-12-22 2009-12-22 オブジェクト生成地点記録方法およびプログラム Expired - Fee Related JP4959781B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009289944A JP4959781B2 (ja) 2009-12-22 2009-12-22 オブジェクト生成地点記録方法およびプログラム
US12/963,734 US8495647B2 (en) 2009-12-22 2010-12-09 Method and program for recording object allocation site
US13/940,570 US9021496B2 (en) 2009-12-22 2013-07-12 Method and program for recording object allocation site

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009289944A JP4959781B2 (ja) 2009-12-22 2009-12-22 オブジェクト生成地点記録方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2011133919A true JP2011133919A (ja) 2011-07-07
JP4959781B2 JP4959781B2 (ja) 2012-06-27

Family

ID=44153026

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009289944A Expired - Fee Related JP4959781B2 (ja) 2009-12-22 2009-12-22 オブジェクト生成地点記録方法およびプログラム

Country Status (2)

Country Link
US (2) US8495647B2 (ja)
JP (1) JP4959781B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014171002A1 (ja) * 2013-04-19 2014-10-23 株式会社日立製作所 メモリ管理方法、計算機及び記録媒体

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4959781B2 (ja) * 2009-12-22 2012-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクト生成地点記録方法およびプログラム

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11161502A (ja) * 1997-09-09 1999-06-18 Sun Microsyst Inc スタティックオーバーロードのない基本型の値に関する効率的演算方法および装置
JP2000047879A (ja) * 1998-07-06 2000-02-18 Internatl Business Mach Corp <Ibm> コンパイル方法及び装置、実行方法、及びプログラム実行装置
JP2002099449A (ja) * 2000-07-20 2002-04-05 Internatl Business Mach Corp <Ibm> ユーザに固有のインスツルメンテーションを支援する方法とシステム
JP2003140899A (ja) * 2001-11-07 2003-05-16 Nec Corp コンピュータ装置及び動的dll使用時のクラスオブジェクト管理方法並びにdllを動的に用いるプログラム
JP2004206644A (ja) * 2002-12-26 2004-07-22 Fujitsu Ltd ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置,そのプログラムおよびプログラム記録媒体
JP2006163686A (ja) * 2004-12-06 2006-06-22 Matsushita Electric Ind Co Ltd コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体
JP2009064217A (ja) * 2007-09-06 2009-03-26 Internatl Business Mach Corp <Ibm> オブジェクトを記憶・管理するシステム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5632034A (en) * 1993-06-01 1997-05-20 International Business Machines Corporation Controlling method invocation sequence through virtual functions in an object-oriented class library
CA2097540C (en) * 1993-06-01 1998-05-12 William G. O'farrell Accessing remote data objects in a distributed memory environment
US5692183A (en) * 1995-03-31 1997-11-25 Sun Microsystems, Inc. Methods and apparatus for providing transparent persistence in a distributed object operating environment
US6128771A (en) * 1996-02-09 2000-10-03 Sun Microsystems, Inc. System and method for automatically modifying database access methods to insert database object handling instructions
US5794256A (en) * 1996-12-12 1998-08-11 Microsoft Corporation Pointer swizzling facility using three-state references to manage access to referenced objects
US6499137B1 (en) * 1998-10-02 2002-12-24 Microsoft Corporation Reversible load-time dynamic linking
US6263491B1 (en) * 1998-10-02 2001-07-17 Microsoft Corporation Heavyweight and lightweight instrumentation
US6230312B1 (en) * 1998-10-02 2001-05-08 Microsoft Corporation Automatic detection of per-unit location constraints
US7039919B1 (en) * 1998-10-02 2006-05-02 Microsoft Corporation Tools and techniques for instrumenting interfaces of units of a software program
JP3896238B2 (ja) * 2000-03-16 2007-03-22 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータシステム及びプログラムの実行時表現方法
US6826583B1 (en) * 2000-05-15 2004-11-30 Sun Microsystems, Inc. Local allocation buffers for parallel garbage collection
US7058785B1 (en) * 2003-05-23 2006-06-06 Xilinx, Inc. Addressing objects in a large persistent storage address space
US8161464B2 (en) * 2006-04-11 2012-04-17 International Business Machines Corporation Compiling source code
US8015556B2 (en) * 2006-10-12 2011-09-06 International Business Machines Corporation Efficient method of data reshaping for multidimensional dynamic array objects in the presence of multiple object instantiations
JP4852621B2 (ja) * 2009-03-03 2012-01-11 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム中のオブジェクトの割り付け場所を追跡する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
JP4959781B2 (ja) * 2009-12-22 2012-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクト生成地点記録方法およびプログラム

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11161502A (ja) * 1997-09-09 1999-06-18 Sun Microsyst Inc スタティックオーバーロードのない基本型の値に関する効率的演算方法および装置
JP2000047879A (ja) * 1998-07-06 2000-02-18 Internatl Business Mach Corp <Ibm> コンパイル方法及び装置、実行方法、及びプログラム実行装置
JP2002099449A (ja) * 2000-07-20 2002-04-05 Internatl Business Mach Corp <Ibm> ユーザに固有のインスツルメンテーションを支援する方法とシステム
JP2003140899A (ja) * 2001-11-07 2003-05-16 Nec Corp コンピュータ装置及び動的dll使用時のクラスオブジェクト管理方法並びにdllを動的に用いるプログラム
JP2004206644A (ja) * 2002-12-26 2004-07-22 Fujitsu Ltd ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置,そのプログラムおよびプログラム記録媒体
JP2006163686A (ja) * 2004-12-06 2006-06-22 Matsushita Electric Ind Co Ltd コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体
JP2009064217A (ja) * 2007-09-06 2009-03-26 Internatl Business Mach Corp <Ibm> オブジェクトを記憶・管理するシステム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014171002A1 (ja) * 2013-04-19 2014-10-23 株式会社日立製作所 メモリ管理方法、計算機及び記録媒体

Also Published As

Publication number Publication date
US9021496B2 (en) 2015-04-28
US20110154354A1 (en) 2011-06-23
US8495647B2 (en) 2013-07-23
US20130305220A1 (en) 2013-11-14
JP4959781B2 (ja) 2012-06-27

Similar Documents

Publication Publication Date Title
CN102129410B (zh) 提供扩展的存储器保护
US7315871B2 (en) Method, system and program product for interning invariant data objects in dynamic space constrained systems
US6360361B1 (en) Field reordering to optimize cache utilization
US20200167140A1 (en) Automatic reference counting
US10102047B2 (en) In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
JP2003519834A (ja) メモリ管理によって参照の局所性を改善するための方法および装置
JP6048957B2 (ja) 情報処理装置、プログラム、及び情報処理方法
JP4959781B2 (ja) オブジェクト生成地点記録方法およびプログラム
JP5871589B2 (ja) 情報処理装置、配列の初期サイズ調整プログラム及び方法
US20080040407A1 (en) Identification of a cause of an allocation failure in a java virtual machine
US10031840B2 (en) Method of ascertaining primary cause of memory consumption in program, and computer system and computer program for the same
US8806461B2 (en) Using memory usage to pinpoint sub-optimal code for gaming systems
US20100049747A1 (en) Apparatus and method for storing log in a thread oriented logging system
Byma et al. Detailed heap profiling
CN103678241B (zh) 存储器管理控制系统以及存储器管理控制方法
Xu Analyzing large-scale object-oriented software to find and remove runtime bloat
US11113190B2 (en) Mutable type builder
WO2011104889A1 (ja) 計算機システム、メモリ管理方法及びメモリ管理プログラム
JP2014507734A (ja) 分散計算方法及び分散計算システム
Šor et al. Evaluation of embeddable graph manipulation libraries in memory constrained environments
Mehlich CheckPointer-AC Memory Access Validator
JP6223002B2 (ja) コンピュータにおけるオブジェクトの処理方法、プログラム及びシステム
Subramania et al. TWLinuX: Operating system support for optimistic parallel Discrete Event Simulation
Gehringer Functionality and performance in capability-based operating systems.

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110726

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111018

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120131

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120321

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

Free format text: PAYMENT UNTIL: 20150330

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees