JP6674471B2 - メモリの外部断片化の原因を決定するための方法、システム、コンピュータ・プログラム製品およびコンピュータ・プログラム - Google Patents

メモリの外部断片化の原因を決定するための方法、システム、コンピュータ・プログラム製品およびコンピュータ・プログラム Download PDF

Info

Publication number
JP6674471B2
JP6674471B2 JP2017538696A JP2017538696A JP6674471B2 JP 6674471 B2 JP6674471 B2 JP 6674471B2 JP 2017538696 A JP2017538696 A JP 2017538696A JP 2017538696 A JP2017538696 A JP 2017538696A JP 6674471 B2 JP6674471 B2 JP 6674471B2
Authority
JP
Japan
Prior art keywords
memory
objects
area
information
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.)
Active
Application number
JP2017538696A
Other languages
English (en)
Other versions
JP2018509683A (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.)
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
Publication of JP2018509683A publication Critical patent/JP2018509683A/ja
Application granted granted Critical
Publication of JP6674471B2 publication Critical patent/JP6674471B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/079Root cause analysis, i.e. error or fault diagnosis
    • 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/0706Error 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 the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error 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 the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3452Performance evaluation by statistical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2206/00Indexing scheme related to dedicated interfaces for computers
    • G06F2206/10Indexing scheme related to storage interfaces for computers, indexing schema related to group G06F3/06
    • G06F2206/1004Defragmentation
    • 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/1041Resource optimization
    • G06F2212/1044Space efficiency improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Biomedical Technology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)
  • Stored Programmes (AREA)

Description

本発明はメモリ管理に関し、より詳細にはメモリの外部断片化(externalfragmentation)の原因の決定に関する。
ヒープなどのメモリ領域の断片化は、コンピュータ・システムにおける多くの性能の問題、たとえば長い実行時間およびより大きいメモリ要求を引き起こし得る。断片化を解消、回避または診断することは、コンピュータ・システムの動作に多大な利益があり得る。
外部断片化は、割り当て用に利用可能なメモリの空きチャンク(free chunk)(「ホール(hole)」)が、新たな「オブジェクト」の作成用であることが多い新たなメモリ割り当て要求を満たすのに小さすぎる場合である。本特許出願の文脈では、「オブジェクト」とは、データとそのデータに関連付けられた一意の識別子とを有するエンティティであって、その識別子がメモリ内のそのデータの位置であり得るエンティティである。オブジェクトは動的に割り当てられ、すなわち、そのデータを表すメモリの領域は、アプリケーションにより「アロケータ(allocator)」を介して割り当て、開放する(free)ことができる。本特許出願の文脈では、オブジェクトのデータがアプリケーションにより解放されて(release)いない場合に、オブジェクトは「生存(alive)」している。オブジェクトはアプリケーションにより「破壊(destroy)」することができ、すなわち、アプリケーションは、メモリを解放してフリーリスト(freelist)に戻すアロケータによってオブジェクトのデータを割り当て解除し(deallocate)、オブジェクトは「死亡(die)」する。典型的には、アロケータが割り当て要求を満たすのに十分大きいメモリ内のホールを発見できるまで、アロケータは、フリーリストとして知られているホールのリストを横断する必要がある。フリーリストの横断は実行時間がかかり、割り当てるには小さすぎるホールはメモリを浪費する。同じメモリ領域内に割り当てられた異なる寿命のオブジェクトが存在する場合に、外部断片化が生じることが多い。寿命の短いオブジェクトが死亡した場合、残存しているより寿命の長いオブジェクト間に残されたホールは、作成される新たなオブジェクトよりも小さいことが多い。ホールは集合的に外部断片化となる。ホールがフリーリストにおいてより小さく、より広範囲に及ぶほど、メモリはより断片化する。
以前の開示は、フリーリストを分析しフリーリストが多数の小さいホールからなるかを認識することによって、いつ外部断片化が発生するかを決定することができるが、以前の開示は、何がこれらのホールを発生させているか、どこでこれらのホールが発生したかを決定することができず、したがって以前の開示は、断片化を低減、回避または解消するために、どのコンピュータ可読プログラム命令が変更される必要があるかについて提案することができない。断片化、特に外部断片化の診断および回避を改善することが望ましいであろう。
したがって、当技術分野において、上述の問題に対処する必要がある。すなわちメモリの外部断片化の原因の決定を行うための手段を提供することである。
さらなる態様から見ると、本発明は、メモリの外部断片化の原因を決定するための方法を提供し、ここでは、メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされず、方法は、アプリケーションによるメモリの領域の解放に関連する情報を収集することと、情報をメモリの領域に記憶することと、情報を分析してメモリの領域がいかなるアプリケーションにも再割り当てされなかった理由を決定することとを含む。
さらなる態様から見ると、本発明は、メモリの外部断片化の原因を決定するためのシステムを提供し、ここでは、メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされず、システムは、アプリケーションによるメモリの領域の解放に関連する情報を収集し、情報をメモリの領域に記憶するためのアロケータと、情報を分析してメモリの領域がいかなるアプリケーションにも再割り当てされない理由を決定するためのアナライザとを備える。
さらなる態様から見ると、本発明は、メモリの外部断片化の原因を決定するためのコンピュータ・プログラム製品を提供し、ここでは、メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされず、コンピュータ・プログラム製品は、処理回路により読み取り可能であって、処理回路により実行して本発明のステップを実施するための方法を実施するための命令を記憶するコンピュータ可読記憶媒体を備える。
さらなる態様から見ると、本発明は、コンピュータ可読媒体に記憶され、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、前記プログラムをコンピュータ上で動作させた場合に、本発明のステップを実施するためのソフトウェア・コード部分を備える、コンピュータ・プログラムを提供する。
本発明の実施形態は、メモリの外部断片化の原因を決定するための方法であって、メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされない、方法を提供する。方法は、アプリケーションによるメモリの領域の解放に関連する情報を収集することを含む。方法は、情報をメモリの領域に記憶することをさらに含む。方法は、情報を分析してメモリの領域がいかなるアプリケーションにも再割り当てされなかった理由を決定することをさらに含む。
本発明の実施形態は、メモリの外部断片化の原因を決定するための方法であって、メモリの領域の第1の部分がアロケータによりアプリケーションに割り当てられ、メモリの領域の第2の部分がアロケータにより解放される、方法をさらに提供する。方法は、第2の部分が残りの部分であることを示すインジケータをメモリの領域の第2の部分に記憶することを含む。方法は、第2の部分の解放に関連する情報を収集することをさらに含む。方法は、情報を第2の部分に記憶することをさらに含む。方法は、情報を分析して第2の部分がいかなるアプリケーションにも再割り当てされない理由を決定することをさらに含む。
本発明の実施形態は、メモリの外部断片化の原因を決定するためのシステムであって、メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされない、システムをさらに提供する。システムはアロケータを含む。アロケータは、アプリケーションによるメモリの領域の解放に関連する情報を収集し、情報をメモリの領域に記憶する。システムは、情報を分析してメモリの領域がいかなるアプリケーションにも再割り当てされない理由を決定するためのアナライザをさらに含む。システムでは、メモリの領域は、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされない。
本発明の実施形態は、メモリの外部断片化の原因を決定するためのコンピュータ・プログラム製品であって、メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされない、コンピュータ・プログラム製品をさらに提供する。コンピュータ・プログラム製品は、プログラム・コードを具現化したコンピュータ可読記憶媒体を備える。プログラム・コードは、アプリケーションによるメモリの領域の解放に関連する情報を収集し、情報をメモリの領域に記憶し、情報を分析してメモリの領域がいかなるアプリケーションにも再割り当てされなかった理由を決定するように実行可能である。
本発明の実施形態は、メモリの外部断片化の原因を決定するためのコンピュータ・プログラム製品であって、メモリの領域の第1の部分がアロケータによりアプリケーションに割り当てられ、メモリの領域の第2の部分がアロケータにより解放される、コンピュータ・プログラム製品をさらに提供する。コンピュータ・プログラム製品は、プログラム・コードを具現化したコンピュータ可読記憶媒体を備える。プログラム・コードは、第2の部分が残りの部分であることを示すインジケータをメモリの領域の第2の部分に記憶し、第2の部分の解放に関連する情報を収集し、情報を第2の部分に記憶し、情報を分析して第2の部分がいかなるアプリケーションにも再割り当てされない理由を決定するように実行可能である。
以下、本発明が例示のみを目的として、以下の図面に示された好ましい実施形態を参照しながら説明される。
従来技術による、メモリの割り当て済みチャンクおよびメモリの空きホール(freehole)を有する従来技術のメモリ管理システムの図である。 従来技術による、図1のメモリの空きホールの従来技術のフリーリストの図である。 従来技術による、図1のメモリの従来技術の空きホールの図である。 従来技術による、図1のメモリの従来技術の割り当て済みチャンクの図である。 本発明の好ましい一実施形態による、何がまたは誰があるいは何および誰が外部断片化を発生させているかを決定する本発明による方法の第1の実施形態のフローチャートである。 本発明の好ましい一実施形態による、図3のメモリの空きホールならびに図5の実施形態によりそこに記憶された情報の図である。 本発明の好ましい一実施形態による、図5の実施形態により収集された情報に基づいて保持される統計的指標(statistical metric)のセットの図である。 本発明の好ましい一実施形態による、図5の分析ステップ510のフローチャートである。 本発明の好ましい一実施形態による、何がまたは誰があるいは何および誰が外部断片化を発生させているかを決定する本発明による方法の第2の実施形態のフローチャートである。
図1は、本発明の実施形態が実装され得る、メモリの割り当て済みチャンクおよびメモリの空きホールを有する従来技術のメモリ管理システムを示す。アプリケーション130、132は、使用のために、メモリ102の領域からメモリの領域104、106が割り当てられるようにアロケータ136に要求を行う。そのような要求は、allocまたはmallocなどのコマンドを用いて行うことができる。アロケータ136は、アプリケーション130、132が使用するために要求通りにメモリ102の領域104、106を割り当てる。また、図1は、図1に示されていないアプリケーションに割り当てられたメモリ102の他の領域108〜112を示す。各アプリケーション130、132は、メモリ102の領域104〜112が割り当てられるようにアロケータ136に複数の要求を行うことができ、アプリケーション130、132に割り当てられたメモリ102の領域104〜112は必ずしも連続していない。アプリケーション130、132は、メモリ102の領域104〜112を使用し終えた場合、freeまたはdeallocなどのコマンドを用いてメモリ102の領域104〜112をアロケータ136に返す(「解放する」または「開放する」)。メモリ102の領域104〜112がアロケータ136に解放された場合、メモリ102の未割り当て領域122〜128のフリーリスト134に追加する。従来技術のフリーリスト134は、後で図2ないし4を参照して説明される。
メモリ102のメモリ領域104〜112、122〜128を割り当てるおよび開放するいくつかの要求が処理された場合、最初の長い連続した空きメモリ領域は、徐々に小さい領域122〜128へと断片化する。外部断片化は、アプリケーション130、132に割り当てられたメモリ102の割り当て済み領域104〜112の間の空き領域122〜128が、メモリ102から割り当てる新たな要求を満たすには小さすぎる場合である。外部断片化の一つの尺度は、フリーリスト上の多数の小さいホールであって、割り当て要求を満たすには小さすぎるホールのために、割り当て用に使用できないメモリの割合であり、外部断片化の他の尺度は、多数の小さいホールへの遭遇によるフリーリストの横断の増加したコストである。
0%の外部メモリ断片化が意味するのは、空きメモリの全てが、メモリ使用量または計算労力の追加コストなしで割り当て可能であるということである。(メモリ使用量尺度の下での)90%の外部メモリ断片化が意味するのは、アロケータがたとえば800KBのサイズのメモリ102の領域を有しているが、720KBが小さいサイズのホールのために割り当てに使用できないということである。
図2は、図1のメモリの空きホールの従来技術のフリーリストを示す。メモリ102の空き領域122〜128は、メモリの各空き領域122〜128内のメモリ領域をメモリの次の空き領域122〜128へのポインタとして用いることで、リンク・リストにおいて共に接続される。変数は、メモリ102の第1の領域122への参照を含む。メモリの最後の領域128は、リンク・リストの終端を示すターミネータ値(terminator value)、通常は「NULL」を含む。メモリ102の新たな領域128を開放するために、それへのポインタが、リンク・リスト内のメモリ102の最後の空き領域126に単純に配置される。メモリ102の領域126を割り当てるために、メモリ102の次の空き領域128へのポインタが、メモリ102の空き領域124に単純にコピーされ、これはフリーリスト134から除去され割り当てられるメモリ102の領域126を指す既存のポインタを上書きすることで行われる。
アロケータ136は、それ自体が、メモリ102の空き領域122〜128を作成することができる。これが発生し得るのは、たとえば56バイトのサイズのメモリ102のブロックがアプリケーション130、132により要求され、アロケータ136が64バイトのサイズのブロックしか発見できなかった場合である。アロケータ136は、たとえば56バイトの第1の部分をアプリケーション130、132に割り当て、64バイトのサイズのブロックの残りの第2の部分から空きメモリ102の8バイトのブロックを作成し、フリーリスト134にリンクする。アロケータは、アロケータにより解放されたメモリの領域の第2の部分に、メモリの領域の第2の部分が残りの部分であることを示すインジケータを記憶する。
図3は、図1のメモリの従来技術の空きホールを示す。メモリ102の例示的な従来技術の空きホール124は、メモリ・ホール124のサイズの表示304を含む。典型的には、最上位ビット302を用いて、メモリ102の関連付けられた領域がメモリ102の空きホール124であるか、またはメモリ102の割り当て済みチャンク106であるかが示される。他の従来技術では、空き/割り当て済みビット302は、サイズの表示304とは別である。他の実装では、メモリの各ブロックが空きか割り当て済みかを示すメモリの各ブロック用のビットを有するマーク・マップが使用される。たとえば、空きメモリを示すマーク・マップ内の3つの隣接するビットが存在する場合、空いている3つの連続したメモリ・ブロックが存在する。他の実装では、メモリ・ホールのサイズはコンテキストにより決定される。アロケータ136はいくつかの別個のフリーリスト134を保持し、各フリーリスト134は単一の所与のサイズのメモリ102の領域122〜128を含む。メモリの領域のサイズを記憶するこれらの実装のいずれが用いられても、アロケータはそれを用いてサイズを記録することによって、従来の割り当てを実施できるようにする。
次のポインタ306は、図2を参照して上記で説明されたように、フリーリスト134内の空きメモリ102の次の領域126を指す。空きメモリの各領域内の次のポインタ306は、空きメモリ領域122〜128のリンク・リストを形成する。空きメモリ310は、メモリ102の空きホール124の残りの部分を形成する。
図4は、図1のメモリの従来技術の割り当て済みチャンクを示す。メモリ102の例示的な従来技術の割り当て済みチャンク106は、メモリ・チャンク106のサイズの表示404を含む。典型的には、最上位ビット402を用いて、メモリの関連付けられた領域がメモリ102の空きホール124であるか、またはメモリ102の割り当て済みチャンク106であるかが示される。他の従来技術では、空き/割り当て済みビット402は、サイズの表示404とは別である。空きチャンク124に見られる次のポインタ306は、割り当て済みメモリ104〜112には必要なく、その理由は割り当て済みメモリのリンク・リストが存在しないためである。割り当て済みメモリ410は、メモリ102の割り当て済みチャンク106の残りの部分を形成する。
図5は、何がまたは誰があるいは何および誰が外部断片化を発生させているかを決定する本発明による方法の第1の実施形態のフローチャートを示す。方法はステップ502から開始する。ステップ504において、「呼び出し元(caller)」と呼ばれるアプリケーション130、132のメソッド、たとえばルーチン、関数などは、もはや必要ないオブジェクトを破壊することを望む。呼び出し元は、オブジェクトに以前割り当てられていたメモリの領域を開放するために、アロケータ136の割り当て解除関数を呼び出す。アロケータ136は、図2を参照して上記で説明されたように、メモリの領域をフリーリストに挿入する。ステップ506において、オブジェクトに以前割り当てられていたメモリの領域の解放に関連する情報が収集される。収集される情報は、1つのオブジェクトの破壊の原因に関し得る。他の実施形態では、収集される情報は2つ以上のオブジェクトに関し得る。記憶される情報(図6の602〜608)は純粋に例示的であり、図示された情報602〜608ならびに図示されない他の情報の一部または全部を含んでもよく、いずれも含まなくてもよい。メモリ102の空き領域122で利用可能な十分な空間がない場合、情報602〜608の全てが記憶されなくてもよい。記憶される情報602〜608は、メモリ102の領域122を以前所有していたオブジェクトを誰が作成または破壊したか、またはメモリ102の領域122を以前所有していたオブジェクトがどこで作成または破壊されたかに関する。
図6を参照すると、記憶される情報は、オブジェクトを破壊してメモリ102の領域104〜112を開放したまたは割り当て解除した呼び出し元の復帰アドレス(return address)602を含むことができ、復帰アドレス602を用いて呼び出し元自体を識別することができる。この復帰アドレスは、アロケータ136が現在のスレッド用のコール・スタックをウォーク(walk)することによって取得することができる。従来のスタック・ウォーカが、使用されている言語およびプラットフォームに対して使用される。呼び出し元に戻る復帰アドレスが発見されるまで、スタックがウォークされる。アロケータ136の割り当て解除メソッドへの1つまたは複数のエントリ・ポイントが明確に定義されているので、現在のスレッド用のコール・スタック内の復帰アドレスの位置を決定することができる。
記憶される情報は、オブジェクトの作成または破壊あるいはその両方が行われたときの、行番号604、ファイル名ID606およびメソッドID608をさらに含むことができる。これらはそれぞれ、deallocate、deallocまたはfreeコマンドへのパラメータとしてアロケータ136に渡されることによって、取得することができる。C++言語で実装される一実施形態では、_FILE_、_LINE_および_func_(または_FUNCTION_)は、典型的には、コンパイル時に現在のフル・パスおよびファイル名、現在の行番号および現在の関数名をそれぞれ与える変数にビルドされる。たとえば、従来のfreeコマンドはdeallocate(Pointer1)であり得、これは変数*Pointer1が指すオブジェクトに割り当てられたメモリを廃棄するものである。本発明の実施形態では、deallocateコマンドはdeallocate(Pointer1,102,"ClassA::methodA")であり得、これは行番号102の関数「ClassA::methodA」が、変数*Pointer1が指すオブジェクトに割り当てられたメモリを廃棄するものである。他の実施形態では、行番号の代わりに、ソース・ファイルのステートメント番号をパラメータとして使用することができる。名称をIDで参照される文字列として記憶するハッシュ・テーブルを用いることで、名称をより短いIDに変換してファイル名ID606およびメソッドID608として記憶することができる。後で、事後処理の際に、IDが与えられると、ハッシュ・テーブルを用いて、関連付けられた文字列を検索することができる。
他の実施形態では、オブジェクトが「生存」しているのは、アプリケーションあるいは1つまたは複数の他の生存オブジェクト(live object)がそのオブジェクトへの参照を保持している場合である。オブジェクトが死亡するのは、全ての生存オブジェクトおよびアプリケーションからのそのオブジェクトへの全ての参照が除去された場合である。最後の参照が除去された場合、オブジェクトは破壊され、これを生じさせたアプリケーション関数を、従来技術の参照カウンティング(reference counting)の方法によって決定することができる。参照カウンティングとは、オブジェクトに対する参照、ポインタまたはハンドルの数を記憶する技法である。この実施形態では、アロケータは、オブジェクト自体に関連する、またはオブジェクト自体における参照カウントを記憶する。アプリケーションはアロケータのメソッドを用いて、オブジェクトへの参照およびオブジェクト間の参照を追加または除去する。アプリケーション関数がアロケータのメソッドによってオブジェクトへの最後の参照を除去した場合、オブジェクトの参照カウントはゼロに減少することになり、オブジェクトはその時点で死亡していることが知られ、アロケータはたった今死亡したオブジェクトに関連付けられたメモリを割り当て解除することになる。この正確な時点で、アロケータはオブジェクトを破壊させた関数を決定することができる。前述のように、アロケータは、アロケータの参照除去メソッドへのエントリ・ポイントに到達するまで、コール・スタックをウォークし得る。関数の復帰アドレスを決定することができる。または同様の方法で、現在のファイル名、現在の行番号および関数の現在の関数名を含む追加のパラメータを参照除去メソッドに渡すことができる。
本発明の実施形態では、さらなる情報はメモリ102の空き領域122に記憶することができ、(i)メモリ102の空き領域122が要求を満たさなかったフリーリスト134への割り当て要求の数「N_not_sat」、(ii)オブジェクトが作成されてから破壊されるまでの経過/CPU時間、(iii)メモリ102の領域122を以前所有していたオブジェクトが生存している間に発生した割り当て要求の数または割り当て要求の合計サイズ、(iv)オブジェクトを破壊させた関数のスレッドIDまたはモジュールIDなどの他の情報を含むがこれらに限定されない。
各空きメモリ領域122〜128は、その特定のメモリ領域に関連する上記の情報、および1つまたは複数のオブジェクトの破壊の原因の全部または一部を含むかあるいはいずれも含まない。メモリ102の空き領域122〜128が要求を満たさなかったフリーリスト134への割り当て要求の数「N_not_sat」は、本発明の実施形態が、フリーリスト134に最近追加されたメモリ102の空き領域122〜128を、長時間フリーリスト134上にあり「有益」ではないメモリ102の空き領域122〜128、すなわち割り当て要求を満たせなかったメモリ102の空き領域122〜128と区別することが可能になるので有益である。割り当て要求の数「N_not_sat」は、他の情報602〜608と共に記憶されるカウンタであって、メモリ領域122〜128のそれぞれがアロケータ136により割り当て要求について検査されるが、割り当てに使用されない度にインクリメントされるカウンタとして実装することができる。
オブジェクトが作成されてから破壊されるまでの経過時間またはCPU時間は有益であり、その理由は、寿命の短いオブジェクトとして知られている、短い経過時間または短いCPU時間しか存続しなかったオブジェクトに以前割り当てられていたメモリ102の空き領域122〜128が、より多くのホールを発生させる種類のオブジェクトであるためである。オブジェクトが作成された開始時刻は、メモリ領域122がオブジェクトに割り当てられるときに他の情報と共に記憶することができる。オブジェクトが破壊される時刻は、オブジェクトが割り当て解除されるときに既知となる。これら2つの時刻の差は、オブジェクトが生存していた時間の長さ、すなわち経過時間またはCPU時間あるいはその両方である。
オブジェクトが作成されてから破壊されるまでのメモリの割り当ての数またはメモリの割り当ての合計サイズの増加は、オブジェクトが寿命の短いオブジェクトまたは寿命の長いオブジェクトのいずれであるかの他の尺度である。オブジェクトが作成されるまでに行われた割り当ての数は、メモリ領域122がオブジェクトに割り当てられるときに、他の情報と共に記憶することができる。オブジェクトが破壊されるまでに行われた割り当ての数は、オブジェクトが割り当て解除されるときに既知となる。これら2つの数の差は、オブジェクトが生存していた間に行われたメモリの割り当ての数である。
アロケータ136は、メモリをアプリケーション130、132に割り当てようとする場合、フリーリスト134において、割り当てる適切なサイズのメモリ領域122〜128を検索する。そのようなメモリ領域を発見した場合、メモリ領域は、要求された割り当てサイズよりもはるかに大きい場合がある。アロケータ136は、メモリ領域の一部を割り当てて、メモリ領域の残りをフリーリスト134に挿入する。これを行うために、メモリ領域を2つの部分に分割して、2つのオブジェクト、すなわち割り当てオブジェクトおよび残余オブジェクト(remnant object)を作成する。割り当てオブジェクトは、割り当て要求を満たすためにアプリケーションに返される。残余オブジェクトはフリーリスト134に挿入され、したがって直ちに「死亡」する。本発明の一実施形態では、メモリの空き領域で利用可能な空間の量に応じて、アロケータ136がこれを行う場合、アロケータ136は、フリーリスト134への残余の解放に関連するアロケータ136の「残り挿入」アクションを示す専用のメソッドIDを(メモリの空き領域122に)記録する。同様に、メモリ領域が合体される場合、アロケータ136は、アロケータ136の合体アクションを示す専用のメソッドIDを記録する。同様に、1つの合体したオブジェクトは、合体された2つ以上のメモリ領域から作成され、その合体したオブジェクトは直ちに「死亡」し、フリーリスト134に挿入し戻される。専用のメソッドIDが以前のメソッドID608を上書きすることができ、または専用のメソッドIDをそのメモリ領域122についての以前のメソッドID608に付加することができ、それによってホールの元の原因に関する情報がデータ分析時にまだ利用可能であることに留意されたい。
図5に戻ると、ステップ508において、ステップ506で収集された情報は、開放されているメモリ領域122であって、以前は割り当てられていたが現在は空いているメモリ領域122を所有していた、現在は破壊されたオブジェクトに以前関連付けられていたメモリ領域122に記憶される。図6を簡単に参照すると、これは、図3のメモリ102の空きホール122ならびに図5の実施形態のステップ508によりそこに記憶された情報602〜608を示す。
ステップ510において、収集された情報を分析して、メモリ102の1つまたは複数の領域122〜128がいかなるアプリケーションにも再割り当てされなかった理由を決定する。そのような分析は、たとえば、これらのオブジェクトを誰が作成し誰が破壊させたか、またはこれらのオブジェクトがどこで作成されたかもしくはどこで破壊されたかあるいはその両方の統計プロファイルを収集することであってよい。そのような統計プロファイルは、領域122〜128のサイズのカテゴリについての空き領域122〜128の数を示すヒストグラムとすることができる。これが示し得るのは、割り当てることができなかったメモリ102の空き領域122〜128のほとんどが、メモリ102の割り当て済み領域の間の小さいホールを備えていたということである。その場合、これらのオブジェクトを作成するまたは破壊させるあるいはその両方を行うメソッドのソース・コードを調査して、作成されたオブジェクトの種類、寿命が短かった理由を決定し、外部断片化を回避するための他の手段を決定することができる。
本発明の一実施形態では、診断ツールの一部として、メモリ102の空き領域122〜128に記憶された収集された情報は、(i)要求が分析者により行われる場合(その場分析(in situ analysis))、または(ii)アプリケーションが終了した場合(事後分析)に分析することができる。
本発明の一実施形態では、適応的アロケータ136の一部として、メモリ102の空き領域122〜128に記憶された収集された情報は、アロケータが修正アクションを行うと決定した場合に分析することができる。
図7を参照すると、(ファイル名、メソッド、関数、もしくはルーチン名、または行番号あるいはこれらの組合せにより決定される)呼び出し元IDごとに、統計的指標700のセットが、収集された情報に基づいて保持される。例示的実施形態では、その呼び出し元IDに関連付けられたメモリ領域122〜128の数のカウント702、空きメモリ領域122〜128のサイズの平均値704、または空きメモリ領域122〜128のサイズのヒストグラム706が、データ収集中に記録されるその呼び出し元のインジケータを含むフリーリスト134について保持される。
各呼び出し元IDは統計的指標700のセットと関連付けられ、統計的指標のセットを記憶し検索することができ、これはたとえば、当業者にはよく知られているように、呼び出し元IDをハッシュ・テーブルのキーとして用いることで行う。指標700のセットに保持される他の統計的指標が存在し得、たとえば、呼び出し元IDに関連付けられた全てのメモリ領域122〜128にわたる全ての満たされていない割り当て要求の総カウント708、CPUまたは経過時間の単位での、呼び出し元IDに関連付けられた、生存時に破壊されたオブジェクトの平均寿命710、寿命中にアプリケーションが行った割り当て数の単位でのオブジェクトの平均寿命712、またはアプリケーションが割り当てたバイト数の単位でのオブジェクトの平均寿命714などがある。指標702〜714は全てが存在してもよく、任意の組合せで存在してもよく、またはいずれか1つのみが存在してもよい。
図8は、図5の分析ステップ510の一実施形態のフローチャートを示す。方法はステップ802から開始する。統計的指標700は、フリーリスト134を検査することで生成される。ステップ804において、フリーリスト134上のメモリ領域122〜128ごとに、呼び出し元IDが最初に識別される。呼び出し元IDは、メソッドID、スレッドID、モジュールID、行番号、ファイル名IDまたはメソッド内の復帰アドレスのうちの1つまたは複数であり、これは、オブジェクト・ファイルまたは別の「デバッグ情報」ファイルに書き込まれ得るシンボル情報からの呼び出し元メソッドIDまたは行番号あるいはその両方にマッピングすることができる。シンボル情報からの呼び出し元IDのマッピングは、当業者にはよく知られている。
ステップ806において、その呼び出し元IDについて計算された統計的指標700のセットが検索され、検査中の現在のメモリ領域についての収集された情報によって更新される。たとえば、呼び出し元IDに関連付けられたメモリ領域122〜128の数のカウント702を更新することができ、呼び出し元IDについてのメモリ領域のサイズの平均値704を、メモリ領域122に記憶されたものからの既知のサイズ304を用いて更新することができ、または呼び出し元IDについてのメモリ領域のサイズのヒストグラム706を、既知のサイズ304を用いて更新することができ、あるいはそれらの組合せを行うことができる。
ステップ808において、他の統計的指標708〜714を、その呼び出し元IDについて更新することができる。たとえば、その呼び出し元IDについての満たされていない割り当て要求708の総数を、検査中のメモリ領域についての満たされていない割り当て要求の数「N_not_sat」に基づいて更新することができる。また、一例として、その呼び出し元IDについての生存時に破壊されたオブジェクトのCPUまたは経過時間の単位での平均寿命710を、メモリ領域に関連付けられたオブジェクトが生存していたときのCPUまたは経過時間での期間を用いて更新することができる。方法はステップ810において終了する。
取得可能な多数の異なる統計的指標が存在し得、上記はそれらの選択を与えるにすぎないことは理解されよう。また、指標のいくつかは、呼び出し元IDが階層的な性質を有するので、階層的な情報につながり得る。たとえば、結果の統計量は、メソッドが内部に存在するモジュールごとに、次いでメソッド内で、次いで行番号において、起こることを示すことができる。この情報は、ソース・コードで補足することができる。
統計データは、(i)情報を用いてアロケータ136の挙動を修正する適応的アロケータ136の一部であるシステムの他のコンポーネントに渡されるか、または(ii)情報を用いて診断レポートを性能分析者に出力するプロファイリング・ツールに渡され、性能分析者はレポートを用いて断片化を低減させるようにアプリケーションまたはアロケータを変更する。データのリッチなビューを示すように統計量が視覚化され得る方法に関して多くの従来技術が存在する(たとえば、SourceForgeから入手可能なPerformance Inspector、インテル社から入手可能なvtune、またはSourceForgeから入手可能なoprofile)。
上記の(ii)のそのような診断レポートがどのように見え得るかの一例が、以下にC++言語に対して示されている。断片化の原因の特定、たとえば断片化を生成するオブジェクト「objA」も識別するClassA::methodAの10行目などは、本発明の実施形態の重要な利点である。
満たされていない要求
ラベル カウント %%% 名称
TID 137254 94.49 Thread_A
MOD 100761 69.37 Module_A
SYM 22122 15.23 ClassA::methodA()
LIN 14685 10.11 line 10:Allocator::deallocate(objA);
LIN 6703 4.61 line 40 :Allocator::deallocate(objC);
...
SYM 14097 9.71 ClassB::methodE()
...
MOD 35719 24.59 Module_B
ホールのサイズ<16バイト
ラベル カウント %%% 名称
TID 3993 89.07 Thread_A
MOD 2636 58.80 Module_A
SYM 1523 33.97 ClassA::methodA()
LIN 1278 28.51 line 10:Allocator::deallocate(objA);
LIN 107 2.39 line 40:Allocator::deallocate(objC);
...
SYM 1024 22.84 ClassB::methodE()
...
MOD 1241 27.68 Module_B
ここで、
ラベル−イベントが発生した階層レベル:
TID−スレッド・レベル
MOD−モジュール・レベル
SYM−シンボル・レベル
LIN−行番号
カウント−所与のレポート指標のカウント(たとえば、満たされていない要求、サイズ<16バイトのホール)
%%%−このシンボル内のこの指標の割合(パーセンテージで)
名称−シンボル名(すなわち、スレッドid名、モジュール名、メソッド名、行番号およびその行のソース・コード)
ステップ512において、調査の結果を用いて、外部断片化の原因を回避するようにメモリの割り当てを変更することができる。アロケータはステップ510の結果を用いて、外部断片化を発生させる種類のオブジェクトをより良く割り当てる。方法はステップ514において終了する。
図9は、何がまたは誰があるいは何および誰が外部断片化を発生させているかを決定する本発明による方法の第2の実施形態のフローチャートを示す。ステップ502ないし510は、図5を参照して上記で説明済みのものと同一である。ステップ912において、ステップ510の収集された情報の分析の結果を用いて、破壊された1つまたは複数のオブジェクトと類似した新たに作成されるオブジェクトに対して、第1のメモリ領域からメモリ102の領域を割り当てる。第1のメモリ領域は、新たに作成されるオブジェクトの他のものにメモリ領域を割り当てるために使用される第2のメモリ領域とは別である。この実施形態では、データ分析によって、第1のアプリケーションまたは特定の第1のメソッドが小さいメモリ領域を要求しその後解放することによってデフラグを発生させることが多いが、第2のアプリケーションまたは特定の第2のメソッドがはるかに大きいメモリ領域を要求しその後解放すると決定された場合、第1のアプリケーションおよび第2のアプリケーションからの要求を、別々のメモリ領域から割り当てることができる。方法はステップ914において終了する。一実施形態では、第1のメモリ領域内の新たに作成されるオブジェクトは、典型的には大きいオブジェクトである第2のメモリ領域内の新たに作成されるオブジェクトとは異なるサイズのもの、典型的には小さいオブジェクトである。
本発明の実施形態は、いつどこでオブジェクトが死亡するかの知識を必要とするので、死亡する場所は、プログラム・ソース内で明確に定義され明示的である必要がある。たとえば、自動メモリ管理、たとえばIBM(R)のJava(R)仮装マシンのガベージ・コレクタについて、プログラムはいつオブジェクトが死亡するかを暗黙的にしか決定せず、これは(主に)オブジェクトが生存オブジェクトによりもはや参照されない場合に行われる。したがって、死亡したオブジェクトがガベージ・コレクションでしか発見されないので、「誰が」オブジェクトを破壊したかを決定することができない。そのような実施形態では、ガベージ・コレクタが参照カウンティングを利用する場合、これを用いていつオブジェクトが死亡するかを決定することができる。しかしながら、多数の割り当て手法、たとえば多数のC/C++のメモリ・モデルでは、「誰が」オブジェクトを破壊したか、およびプログラム・ソースにおいて「どこで」死亡したかの非常に明確な定義が存在する。IBMは、世界中の多くの管轄区で登録されたInternational Business Machines Corporationの商標である。Java(R)および全てのJava(R)関連の商標およびロゴは、Oracleまたはその関連会社あるいはその両方の商標または登録商標である。
コンピュータ可読記憶媒体は、命令実行デバイスが使用するための命令を保持し記憶することが可能な有形デバイスとすることができる。コンピュータ可読記憶媒体は、たとえば、限定はされないが、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、またはこれらの任意の適切な組合せとすることができる。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD−ROM)、デジタル多用途ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、命令が記録されたパンチカードまたは溝内の隆起構造などの機械的に符号化されたデバイス、およびこれらの任意の適切な組合せを含む。本明細書で使用されるコンピュータ可読記憶媒体は、一時的な信号そのもの、たとえば電波または他の自由に伝播する電磁波、導波管または他の伝送媒体を通って伝播する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを介して伝送される電気信号と解釈されるべきではない。
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれの計算/処理デバイスに、あるいはネットワーク、たとえばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはこれらの組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータまたはエッジ・サーバあるいはこれらの組合せを含むことができる。各計算/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を転送して、それぞれの計算/処理デバイス内のコンピュータ可読記憶媒体に記憶できるようにする。
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または類似のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードでもよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アローンのソフトウェア・パッケージとして、部分的にユーザのコンピュータ上であって部分的に遠隔コンピュータ上で、または完全に遠隔コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、遠隔コンピュータは、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続することができ、または(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続することができる。いくつかの実施形態では、たとえば、プログラマブル論理回路、列プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによってコンピュータ可読プログラム命令を実行することができる。
本発明の態様は、本明細書では、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明されている。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方のブロックの組合せが、コンピュータ可読プログラム命令によって実装され得ることは理解されよう。
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/動作を実装するための手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/動作の態様を実装する命令を含む製品を備えるように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置または他のデバイスあるいはそれらの組合せに特定の方法で機能するように指示できるものであってもよい。
また、コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックで指定される機能/動作を実装するように、コンピュータ実装されるプロセスを生成すべく、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラマブル装置または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
図面のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表すことができる。いくつかの代替的な実装では、ブロックに記されている機能は、図面に示された順序から外れて実施することができる。たとえば、連続して示された2つのブロックは、実際には実質的に同時に実行することができ、またはブロックは、関連する機能性に応じて逆の順序で実行されることがある。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方のブロックの組合せが、指定された機能または動作を実施するか、または専用ハードウェアおよびコンピュータ命令の組合せを実行する専用のハードウェア・ベースのシステムによって実装できることは気が付くであろう。

Claims (6)

  1. コンピュータ・ソフトウェアによる情報処理により、メモリの外部断片化の原因を決定するための方法であって、前記メモリの領域がアプリケーションにより解放され、アロケータにより割り当て解除され、いかなるアプリケーションにも再割り当てされず、前記方法が、
    前記アプリケーションによる前記メモリの前記領域の解放に関連する情報を収集することと、
    前記情報を前記メモリの前記領域に記憶することと、
    を含み、
    前記アプリケーションが1つまたは複数のオブジェクトの破壊に応答して前記メモリの前記領域を解放し、
    前記情報が前記1つまたは複数のオブジェクトの前記破壊の原因に関連し、
    前記情報が、前記メモリの前記領域を用いて満たすことができない割り当て要求、前記1つまたは複数のオブジェクトの作成と前記1つまたは複数のオブジェクトの破壊との間の時間の尺度、および前記1つまたは複数のオブジェクトの作成と前記1つまたは複数のオブジェクトの破壊との間に割り当てられる前記メモリの領域の数またはサイズのインジケータ、の1つまたは複数をさらに含み、
    前記情報が、前記1つまたは複数のオブジェクトを作成させるコンピュータ可読プログラム・コードに関連付けられた識別子と、前記1つまたは複数のオブジェクトを破壊させるコンピュータ可読プログラム・コードに関連付けられた識別子とを含み、前記情報が、前記1つまたは複数のオブジェクトを作成させる前記コンピュータ可読プログラム・コードにおいて、前記1つまたは複数のオブジェクトが作成される場所を識別し、前記情報が、前記1つまたは複数のオブジェクトを破壊させる前記コンピュータ可読プログラム・コードにおいて、前記1つまたは複数のオブジェクトが破壊される場所を識別することと
    を含む、方法。
  2. 前記情報が、前記1つまたは複数のオブジェクトによりそれらの破壊時に解放される前記メモリの領域のそれぞれのサイズに関連する統計データをさらに含む、請求項1に記載の方法。
  3. 前記情報の分析の結果を用いて、破壊される前記1つまたは複数のオブジェクトと類似した新たに作成されるオブジェクトに対して、前記新たに作成されるオブジェクトの他のものに前記メモリの領域を割り当てるために使用される前記メモリの第2の領域とは別である前記メモリの第1の領域から前記メモリの前記領域を割り当てること
    をさらに含む、請求項1ないし2の何れかに記載の方法。
  4. 請求項1−3の何れか1項に記載の方法の各ステップをコンピュータ・ハードウェアによる手段として構成した、システム。
  5. 請求項1−3の何れか1項に記載の方法の各ステップをコンピュータに実行させる、コンピュータ・プログラム。
  6. 請求項に記載の前記コンピュータ・プログラムをコンピュータ可読記憶媒体に記憶した、コンピュータ可読記憶媒体。
JP2017538696A 2015-02-18 2016-02-05 メモリの外部断片化の原因を決定するための方法、システム、コンピュータ・プログラム製品およびコンピュータ・プログラム Active JP6674471B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/624,990 US9760288B2 (en) 2015-02-18 2015-02-18 Determining causes of external fragmentation of memory
US14/624,990 2015-02-18
US14/831,256 US9766815B2 (en) 2015-02-18 2015-08-20 Determining causes of external fragmentation of memory
US14/831,256 2015-08-20
PCT/EP2016/052504 WO2016131667A1 (en) 2015-02-18 2016-02-05 Determining causes of external fragmentation of memory

Publications (2)

Publication Number Publication Date
JP2018509683A JP2018509683A (ja) 2018-04-05
JP6674471B2 true JP6674471B2 (ja) 2020-04-01

Family

ID=56621079

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017538696A Active JP6674471B2 (ja) 2015-02-18 2016-02-05 メモリの外部断片化の原因を決定するための方法、システム、コンピュータ・プログラム製品およびコンピュータ・プログラム

Country Status (4)

Country Link
US (3) US9760288B2 (ja)
JP (1) JP6674471B2 (ja)
CN (1) CN107077422B (ja)
WO (1) WO2016131667A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9552221B1 (en) * 2013-12-23 2017-01-24 Google Inc. Monitoring application execution using probe and profiling modules to collect timing and dependency information
US9760288B2 (en) * 2015-02-18 2017-09-12 International Business Machines Corporation Determining causes of external fragmentation of memory
US9864649B2 (en) * 2015-03-27 2018-01-09 Intel Corporation Technologies for root cause identification of use-after-free memory corruption bugs
US20180203676A1 (en) * 2015-04-09 2018-07-19 Longsand Limited Removing library objects from a static library
EP3627343A1 (en) * 2018-09-19 2020-03-25 censhare AG Efficient in-memory multi-version concurrency control for a trie data structure based database
US11442842B2 (en) * 2019-05-29 2022-09-13 Microsoft Technology Licensing, Llc Exposing memory-backed objects as queryable memory resources
US11550711B2 (en) * 2019-09-09 2023-01-10 Micron Technology, Inc. Dynamically adjusted garbage collection workload

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6560773B1 (en) 1997-12-12 2003-05-06 International Business Machines Corporation Method and system for memory leak detection in an object-oriented environment during real-time trace processing
US7167870B2 (en) 2002-05-08 2007-01-23 Sun Microsystems, Inc. Software development test case maintenance
CA2426619A1 (en) * 2003-04-25 2004-10-25 Ibm Canada Limited - Ibm Canada Limitee Defensive heap memory management
US7827375B2 (en) * 2003-04-30 2010-11-02 International Business Machines Corporation Defensive heap memory management
US7350045B2 (en) 2003-12-31 2008-03-25 Microsoft Corporation Dynamic memory heap tagging
US7519639B2 (en) 2004-01-05 2009-04-14 International Business Machines Corporation Method and apparatus for dynamic incremental defragmentation of memory
EP1619584A1 (en) * 2004-02-13 2006-01-25 Jaluna SA Memory allocation
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
US20070214391A1 (en) 2006-03-10 2007-09-13 International Business Machines Corporation Method and apparatus for testing software
FR2899353B1 (fr) 2006-03-31 2008-06-27 Infovista Sa Sa Systeme de gestion memoire pour la reduction de la fragmentation memoire
US7908591B1 (en) 2006-07-17 2011-03-15 The Mathworks, Inc. Memory profiling
US7552361B2 (en) 2006-12-14 2009-06-23 International Business Machines Corporation Software testing optimization apparatus and method
KR101355193B1 (ko) 2007-12-11 2014-01-27 삼성전자주식회사 실시간 임베디드 시스템의 메모리 관리 장치 및 메모리할당/해제/관리 방법
WO2009098547A1 (en) 2008-02-08 2009-08-13 Freescale Semiconductor, Inc. Memory management
US8612493B2 (en) 2008-10-30 2013-12-17 International Business Machines Corporation Allocation cache premarking for snap-shot-at-the-beginning concurrent mark-and-sweep collector
CN101587455B (zh) 2008-12-11 2010-09-22 南京南瑞继保电气有限公司 一种用于vxWorks操作系统检查内存泄漏的方法
US8584100B2 (en) 2009-12-10 2013-11-12 Sap Ag Bridging code changes and testing
US8959442B2 (en) 2010-06-11 2015-02-17 Microsoft Corporation Memory allocation visualization for unmanaged languages
US8589882B2 (en) 2010-06-22 2013-11-19 International Business Machines Corporation Analyzing computer code development actions and process
GB2490313A (en) 2011-04-18 2012-10-31 Nokia Corp Joint contacts list address book and events calendar to chronologically display details of all events associated with selected contacts
CN103186469A (zh) * 2011-12-27 2013-07-03 上海博泰悦臻电子设备制造有限公司 内存分配方法及装置、内存的回收方法
US9038030B2 (en) 2012-07-26 2015-05-19 Infosys Limited Methods for predicting one or more defects in a computer program and devices thereof
US8954931B2 (en) 2012-08-03 2015-02-10 Sap Se System test scope and plan optimization
US9032244B2 (en) 2012-11-16 2015-05-12 Microsoft Technology Licensing, Llc Memory segment remapping to address fragmentation
GB2508641A (en) 2012-12-07 2014-06-11 Ibm Testing program code created in a development system
JP5485459B2 (ja) * 2013-09-20 2014-05-07 京セラドキュメントソリューションズ株式会社 メモリ管理システム、電子機器及びメモリ管理プログラム
US9760288B2 (en) * 2015-02-18 2017-09-12 International Business Machines Corporation Determining causes of external fragmentation of memory

Also Published As

Publication number Publication date
US20170329663A1 (en) 2017-11-16
WO2016131667A1 (en) 2016-08-25
US9766815B2 (en) 2017-09-19
CN107077422B (zh) 2020-05-12
JP2018509683A (ja) 2018-04-05
CN107077422A (zh) 2017-08-18
US10467086B2 (en) 2019-11-05
US20160239217A1 (en) 2016-08-18
US9760288B2 (en) 2017-09-12
US20160239216A1 (en) 2016-08-18

Similar Documents

Publication Publication Date Title
JP6674471B2 (ja) メモリの外部断片化の原因を決定するための方法、システム、コンピュータ・プログラム製品およびコンピュータ・プログラム
Kim et al. Fully automatic stream management for {Multi-Streamed}{SSDs} using program contexts
Johnstone et al. The memory fragmentation problem: Solved?
US8429620B2 (en) Memory leak diagnosis
US7904493B2 (en) Method and system for object age detection in garbage collection heaps
JP4116877B2 (ja) ヒープサイズ自動最適化処理方法,ヒープサイズ自動最適化装置およびそのプログラム
US9378138B2 (en) Conservative garbage collection and access protection
US8825721B2 (en) Time-based object aging for generational garbage collectors
US8185880B2 (en) Optimizing heap memory usage
US7293142B1 (en) Memory leak detection system and method using contingency analysis
Lengauer et al. Accurate and efficient object tracing for java applications
US9003240B2 (en) Blackbox memory monitoring with a calling context memory map and semantic extraction
Trahay et al. Numamma: Numa memory analyzer
US20100293206A1 (en) Clustering related objects during garbage collection
US10102046B2 (en) In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
EP3200080B1 (en) Methods and systems for memory suspect detection
US20070180002A1 (en) Method and apparatus for reducing object pre-tenuring overhead in a generational garbage collector
US7725771B2 (en) Method and system for providing enhanced memory error messages
US20080195681A1 (en) Method and system for garbage collection in a multitasking environment
US9588778B2 (en) JNI object access
US7162605B2 (en) Method and system for obtaining memory usage information for a heap when a peak live count is updated
US9460002B1 (en) Memory allocation
US7117318B1 (en) Memory management
US7606989B1 (en) Method and apparatus for dynamically pre-tenuring objects in a generational garbage collection system
CN110659194A (zh) 一种动态内存检测的方法、装置及存储介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170828

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181023

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190710

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190724

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191023

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200306

R150 Certificate of patent or registration of utility model

Ref document number: 6674471

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150