JP3659317B2 - データを管理する方法及び装置 - Google Patents
データを管理する方法及び装置 Download PDFInfo
- Publication number
- JP3659317B2 JP3659317B2 JP2000116852A JP2000116852A JP3659317B2 JP 3659317 B2 JP3659317 B2 JP 3659317B2 JP 2000116852 A JP2000116852 A JP 2000116852A JP 2000116852 A JP2000116852 A JP 2000116852A JP 3659317 B2 JP3659317 B2 JP 3659317B2
- Authority
- JP
- Japan
- Prior art keywords
- data objects
- access
- data
- objects
- program
- 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 - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/40—Data acquisition and logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明の属する技術分野】
本発明は、全般的にはコンピュータ及びコンピュータ・ソフトウェアに関する。具体的には、本発明は、全般的にオブジェクト・ヒープ内のオブジェクトの管理に関する。
【0002】
【従来の技術】
使用可能メモリの管理は、コンピュータなどのデータ処理システムの性能及び信頼性にとって非常に重要である。具体的に言うと、コンピュータ・プログラムによって使用されるデータは、通常は、コンピュータ内で、限られたアドレス空間を有するメモリ内に記憶される。多くのコンピュータでは、データは、「オブジェクト・ヒープ」と称するメモリの部分に割り当てられた空間である「オブジェクト」の形で記憶される。オブジェクトには、しばしば、他のオブジェクトへの「参照」(ポインタとも称する)が含まれ、その結果、コンピュータ・プログラムが、あるオブジェクトからの参照に従うことによって別のオブジェクトの情報にアクセスできるようになる。通常、各コンピュータ・プログラムは、それ自体のオブジェクト・ヒープを有するので、複数のコンピュータ・プログラムが1台のコンピュータで活動状態になっている場合には、複数のオブジェクト・ヒープが、そのコンピュータ内で維持される可能性がある。
【0003】
コンピュータ・プログラムが新しいデータを使用する時には、必ず、空きメモリの一部が、メモリ「割振り」と称する処理を使用してそのデータのために予約される。コンピュータ内で使用可能なメモリの量が限られているので、もはやコンピュータによって使用されなくなったデータのために予約されたメモリを解放または「割振り解除」することが重要である。そうしなければ、使用可能メモリが使い果たされると、コンピュータの性能が、通常は低下し、また、システム障害が発生する場合がある。
【0004】
ガーベジ・コレクタと称するコンピュータ・プログラムが、コンピュータ内の他のコンピュータ・プログラムによって割り当てられた未使用メモリを解放するために使用されることがよくある。しばしば、ガーベジ・コレクタは、他のコンピュータ・プログラムと並列に動作して、オブジェクト・ヒープ全体を周期的に走査し、未使用オブジェクトに割り振られているメモリを割振り解除する(オブジェクトの「収集」とも称する処理)。コンピュータ内で並列に動作する異なるコンピュータ・プログラムには、互いに並列に実行される1つまたは複数の「スレッド」が含まれることがしばしばである。さらに、異なるコンピュータ・プログラムが異なるオブジェクト・ヒープを使用する時には、コレクタ・スレッドとも称する別々のガーベジ・コレクタ・コンピュータ・プログラムが、各オブジェクト・ヒープの管理に使用される場合がある。
【0005】
ガーベジ・コレクタの具体的な種類の1つが、コピー型(copying)ガーベジ・コレクタであり、これは、オブジェクト・ヒープを「from空間」と「to空間」の区画に区分し、有効で現在使用されているオブジェクトをfrom空間からto空間にコピーし、効果的に未使用のオブジェクトを後に残すことによって、オブジェクト・ヒープを管理する。コピー型ガーベジ・コレクタの具体的な実施形態が、生成型(generational)ガーベジ・コレクタであり、これは、オブジェクト・ヒープをnew区画とold区画に区分する。生成型ガーベジ・コレクタは、新しいオブジェクトが古いオブジェクトより頻繁に「死ぬ」すなわち使用されなくなる傾向に依存する。言い換えれば、オブジェクトは、長時間にわたって使用されるにつれて、使用されなくなる可能性がますます低くなる。
【0006】
生成型ガーベジ・コレクタは、オブジェクト・ヒープのnew区画の新しいオブジェクトを繰り返し走査し、もはや使用中でないオブジェクトのためのメモリを破棄し、割振り解除し、閾時間期間を超えて生存するオブジェクトをオブジェクト・ヒープのold区画に移動することによって、オブジェクト・ヒープを管理する。古いオブジェクトはより安定する傾向を有すると仮定すると、通常、オブジェクト・ヒープのold区画の走査は不要である。
【0007】
生成型ガーベジ・コレクタは、通常は、線形の形すなわち、各オブジェクトがold区画への移動の判断基準に合致することが判明するたびに次々に、オブジェクトをオブジェクト・ヒープのold区画に格納する。同様に、オブジェクト・ヒープのnew区画内のオブジェクトは、通常は、ガーベジ・コレクタによる割振り解除及びオブジェクトの移動と、ある時点で区画内で使用可能な位置への新しいオブジェクトの追加とに起因して、new区画全体に広く分散する。
【0008】
生成型ガーベジ・コレクタと同様に、他のコピー型ガーベジ・コレクタ実施形態でも、線形の形でfrom空間からto空間にオブジェクトがコピーされる。しかし、ガーベジ・コレクタ以外のプロセスによって行われるfrom空間内の割振りとオブジェクトの初期配置に関して、オブジェクトは、これらのコピー型ガーベジ・コレクタ実施形態でもfrom空間全体に広く分散する傾向を有する。
【0009】
オブジェクト・ヒープにオブジェクトを格納する通常の形に固有の結果は、コンピュータ・プログラムによって使用されるさまざまなオブジェクトが、時間に伴ってオブジェクト・ヒープ全体に広く分散するようになる可能性があることである。しかし、オブジェクト・ヒープ内でのオブジェクトの比較的広い分散は、メモリ・スワッピング問題に起因する、コンピュータの最適でない性能をもたらす可能性がある。
【0010】
具体的に言うと、ほとんどのコンピュータは、多重レベル・メモリ・アーキテクチャに依存して、メモリ性能とコストのバランスをとっている。ほとんどのコンピュータには、1つまたは複数のレベルの、小容量で高速のキャッシュ・メモリと、それにインターフェースされた、大容量だが比較的低速の主記憶が含まれる。コンピュータ・プログラムがデータを必要とする時に、データは、コンピュータ内のプロセッサによるアクセスのために主記憶からキャッシュ・メモリにコピーされる。データは、通常はブロックまたは「キャッシュ・ライン」に編成され、特定のキャッシュ・ラインに割り振られたデータのすべてが、グループとしてキャッシュとの間でスワップされる。
【0011】
いくつかのコンピュータでは、アドレッシング可能な記憶空間が、主記憶に使用可能な物理的記憶域より大きい、仮想記憶方式が実装されている。キャッシングに似て、仮想記憶方式では、データがページに編成され、データは、主記憶と、直接アクセス記憶装置(DASD)などの外部記憶装置との間でページ単位でスワップされる。
【0012】
多重レベル・メモリ・アーキテクチャの主な利益は、より頻繁に使用されるデータを、しばしば、より高いレベルのメモリ内に維持することができ、その結果、そのデータによりすばやくアクセスできることである。キャッシュ・メモリからアクセスされるデータが、現在キャッシュ・メモリ内に格納されていないキャッシュ・ラインに割り振られている時には、必ずキャッシュ・ミスが発生し、そのデータの取出は、より低いレベルのメモリからデータを取り出さなければならないので長時間を要する。同様に、主記憶からアクセスされるデータが、現在主記憶内に格納されていないページに割り振られている時には、必ずページ・フォルトが発生し、そのデータの取出は、そのデータを外部記憶装置からスワップ・インしなければならないので長時間を要する。
【0013】
オブジェクト・ヒープは、通常は複数のキャッシュ・ラインを占め、多くの場合に、複数のページを占める。その結果、オブジェクト・ヒープ内のオブジェクトが比較的広く分散している状態では、オブジェクト・ヒープ内の異なる位置に配置されたオブジェクトへの連続するアクセスが、各キャッシュ・メモリ内と、おそらくは主記憶内でのかなりの量のメモリ・スワップを必要とする可能性がある。その結果、オブジェクト・ヒープへのアクセスは長時間を要する傾向を有し、コンピュータは、ピーク効率より低い効率で動作する。
【0014】
【発明が解決しようとする課題】
したがって、当技術分野には、特に改良されたガーベジ・コレクション技法によって、オブジェクト・ヒープにアクセスする際のコンピュータの性能を改良する方法に対する実質的な必要が存在する。
【0015】
【課題を解決するための手段】
本発明は、データ・オブジェクト間のアクセス関係に基づいてオブジェクト・ヒープ内のデータ・オブジェクトを編成する装置、プログラム製品及び方法を提供することによって、従来技術に関連する上記及び他の問題に対処する。それを行うことによって、互いに密に連続してアクセスされるデータ・オブジェクトが、互いに同一のページ内に配置される可能性が高まり、おそらくは同一のキャッシュ・ラインに配置される可能性が高まる。その結果、そのようなオブジェクトにアクセスする時に、多重レベル・メモリ・アーキテクチャ内(たとえば、具体的なアーキテクチャに応じて、特定のキャッシュ・メモリ内または仮想記憶方式内)のメモリ・スワッピングの頻度が、しばしば低下し、システム性能の総合的な改善がもたらされる。
【0016】
複数のデータ・オブジェクトの間のアクセス関係は、少なくとも部分的には、そのようなデータ・オブジェクトへのアクセスの有望な時間的近接性、たとえば、コンピュータ・プログラムの実行中にオブジェクトのグループが通常は次々とアクセスされる時に基づくものとすることができる。複数のデータ・オブジェクトの間のアクセス関係は、少なくとも部分的に、異なるデータ・オブジェクトのアクセスの相対頻度に基づくものとすることもできる。アクセス関係を定義する他の形は、本明細書に示された開示を読めば、当業者には明白になる。
【0017】
本発明の1つの実施例では、オブジェクト・ヒープ内のデータ・オブジェクトの順序付けが、コンピュータ・プログラムによって使用されるデータ・オブジェクトの異なるクラスについて生成された、プロファイリングされたアクセス情報に頼る。このプロファイリングは、コンピュータ・プログラムのコンパイル中、ロード中または実行中を含む、さまざまな時に実行することができる。通常、データ・オブジェクトへのアクセスの回数またはデータ・オブジェクトがアクセスされる順序などの情報は、予測することができ、オブジェクト・ヒープ内でデータ・オブジェクトを順序付ける方法の決定に使用することができる。
【0018】
【発明の実施の形態】
ハードウェア環境とソフトウェア環境
図面を参照すると、複数の図面を通じて同様の符号によって同様の部分が表されているが、図1には、本発明との一貫性を有するコンピュータ・システム10が示されている。コンピュータ・システム10は、ネットワーク18を介してサーバ16(たとえば、PCベースのサーバ、ミニコンピュータ、ミッドレンジ・コンピュータ、メインフレーム・コンピュータなど)に結合された1つまたは複数のクライアント・コンピュータ12、14及び20(たとえば、デスクトップ・コンピュータまたはPCベースのコンピュータ、ワークステーションなど)を含むネットワーク化されたコンピュータ・システムとして図示されている。ネットワーク18は、ローカル・エリア・ネットワーク、広域ネットワーク、無線ネットワーク及び公衆ネットワーク(たとえばインターネット)を含むがこれに制限されない、事実上すべての種類のネットワーク化相互接続を表すことができる。さらに、たとえば複数のサーバなど、任意の台数のコンピュータ及び他の装置を、ネットワーク18を介してネットワーク化することができる。
【0019】
クライアント・コンピュータ20は、クライアント・コンピュータ12及び14に類似するものとすることができるが、これには、とりわけ、中央処理装置(CPU)21、コンピュータ表示装置22などの複数の周辺構成要素、記憶装置23、プリンタ24及びさまざまな入力装置(たとえばマウス26及びキーボード27)を含めることができる。サーバ16は、当技術分野で周知の通り、通常はより高い処理性能とより大きい記憶容量を有するが、同様に構成することができる。
【0020】
図2は、本発明との一貫性を有する装置30のハードウェア及びソフトウェアの環境の例を別の形で示す図である。本発明の目的のために、装置30は、事実上すべての種類のコンピュータ、コンピュータ・システムまたは他のプログラム可能電子装置を表すことができ、これには、クライアント・コンピュータ(たとえば、図1のクライアント・コンピュータ12、14及び20に類似の)、サーバ・コンピュータ(たとえば、図1のサーバ16に類似の)、ポータブル・コンピュータ、組込みコントローラなどが含まれる。装置30は、図1に示された形でネットワークに結合することができ、代替形態では、独立型の装置とすることができる。装置30を、以下では「コンピュータ」と呼称するが、用語「装置」は、本発明との一貫性を有する、他の適当なプログラム可能電子装置を含むことができることを諒解されたい。
【0021】
コンピュータ30には、通常は、メモリ32に結合された少なくとも1つのプロセッサ31が含まれる。プロセッサ31は、1つまたは複数のプロセッサ(たとえばマイクロプロセッサ)を表すことができ、メモリ32は、既知の多重レベル・メモリ・アーキテクチャのいずれかを使用して実装することができ、これには、たとえば、ランダム・アクセス・メモリ(RAM)デバイスを使用して実装される主記憶32aと、たとえば1つまたは複数のレベルのキャッシュ・メモリ32b(プロセッサ31の内部または外部)ならびにさまざまな不揮発性メモリまたはバックアップ・メモリ(たとえば、プログラム可能メモリまたはフラッシュ・メモリ)及び読取専用メモリなどの1つまたは複数の補助レベルのメモリが含まれる。当技術分野で既知の通り、データは、主記憶とキャッシュ・メモリの間及び「キャッシュ・ライン」の形で異なるレベルのキャッシュ・メモリの間でスワップされ、特定のレベルのキャッシュに存在しないデータへのアクセスは、「キャッシュ・ミス」と、別のレベルのメモリからの必要なデータの取出しに関連する追加の遅延をもたらす。
【0022】
さらに、メモリ32は、たとえば(上で説明したように)キャッシュ・メモリまたはプロセッサ31内のレジスタなど、物理的にコンピュータ30内の別の場所に配置されるメモリ記憶域ならびに、たとえば大容量記憶装置36上またはネットワーク38を介してコンピュータ30に結合される別のコンピュータ上に格納されるものなどの仮想記憶として使用される記憶容量を含むものと考えることができる。当技術分野で既知の通り、仮想記憶アーキテクチャを用いると、データは、大容量記憶装置と主記憶の間で「ページ」の形でスワップされ、主記憶に存在しないデータへのアクセスは、「ページ・フォルト」と、外部記憶装置からの必要なデータの取出に関連する追加の遅延をもたらす。
【0023】
コンピュータ30は、通常は、外部と情報を通信するために、複数の入力及び出力も受け取る。ユーザまたは操作員とのインターフェースのために、コンピュータ30には、通常は、1つまたは複数のユーザ入力装置33(たとえば、とりわけ、キーボード、マウス、トラックボール、ジョイスティック、タッチパッドまたはマイクロフォン)と、表示装置34(たとえば、とりわけ、CRTモニタ、LCD表示パネルまたはスピーカ)が含まれる。しかし、たとえばいくつかのサーバ実施形態など、コンピュータ30のいくつかの実施形態では、直接のユーザ入出力がコンピュータによってサポートされない場合があることを諒解されたい。
【0024】
追加の記憶域のために、コンピュータ30には、1つまたは複数の大容量記憶装置36、たとえば、とりわけ、フロッピまたは他の取外し可能ディスク駆動装置、ハード・ディスク装置、直接アクセス記憶装置(DASD)、光ディスク駆動装置(たとえば、CD駆動装置、DVD駆動装置など)または、テープ駆動装置も含めることができる。さらに、コンピュータ30には、ネットワークに結合された他のコンピュータとの情報の通信を可能にするために、1つまたは複数のネットワーク38(たとえば、とりわけ、LAN、WAN、無線ネットワークまたはインターネット)とのインターフェースを含めることができる。コンピュータ30には、通常は、当技術分野で周知の通り、プロセッサ31とメモリ32、ユーザ入力装置33、表示装置34、大容量記憶装置36及びネットワーク38のそれぞれとの間のアナログまたはディジタルの適当なインターフェースが含まれることを諒解されたい。
【0025】
コンピュータ30は、オペレーティング・システム40の制御下で動作し、さまざまなコンピュータ・ソフトウェア・アプリケーション、コンポーネント、プログラム、オブジェクト、モジュール、データ構造など(たとえば、とりわけ、コンパイラ42、仮想マシン44、ソース・コード46及びクラス・ファイル48)を実行するか、他の方法でこれらを利用する。さらに、さまざまなアプリケーション、コンポーネント、プログラム、オブジェクト、モジュールなどは、たとえば分散コンピューティング環境またはクライアント−サーバ・コンピューティング環境など、ネットワーク38を介してコンピュータ30に結合された別のコンピュータ内の1つまたは複数のプロセッサ上で実行でき、これによって、コンピュータ・プログラムの機能を実装するのに必要な処理を、ネットワーク上の複数のコンピュータに割り振ることができる。
【0026】
一般に、本発明の実施例を実装するために実行されるルーチンは、オペレーティング・システムの一部として実装されるものであれ、特定のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュールまたは命令のシーケンスとして実装されるものであれ、本明細書では「コンピュータ・プログラム」または単に「プログラム」と呼称する。コンピュータ・プログラムには、通常は、さまざまな時点でコンピュータ内のさまざまなメモリ及び記憶装置に存在し、コンピュータ内の1つまたは複数のプロセッサによって読み取られ、実行される時に、そのコンピュータに本発明のさまざまな態様を実施するステップまたは要素を実行するのに必要なステップを実行させる、1つまたは複数の命令が含まれる。さらに、本明細書では、完全に機能するコンピュータ及びコンピュータ・システムに関して本発明を説明するが、本発明のさまざまな実施形態が、さまざまな形のプログラム製品として配布可能であり、本発明が、配布の実行に実際に使用される信号担持媒体の特定の種類に無関係に同等に適用されることを、当業者は諒解するであろう。信号担持媒体の例には、とりわけ、揮発性及び不揮発性のメモリ・デバイス、フロッピ及び他の取外し可能ディスク、ハード・ディスク装置、光ディスク(たとえば、CD−ROM、DVDなど)などの記録可能型媒体と、ディジタル通信リンク及びアナログ通信リンクなどの伝送型媒体とが含まれるが、これに制限されない。
【0027】
さらに、以下で説明するさまざまなプログラムは、本発明の特定の実施形態でそれらが実施される目的の応用分野に基づいて識別することができる。しかし、以下の特定のプログラムの命名法は、単に便宜のために使用されるものであり、したがって、本発明は、そのような命名法によって識別または暗示される特定の応用分野だけでの使用に制限されないことを諒解されたい。
【0028】
図1及び図2に示された例の環境が、本発明を制限する目的のものでないことを、当業者は諒解するであろう。実際、当業者は、他の代替ハードウェアまたはソフトウェア環境を、本発明の範囲から逸脱せずに使用することができることを諒解するであろう。
【0029】
関係に基づくオブジェクトの順序付け
本明細書で説明する実施例は、全般的に、データ・オブジェクト間のアクセス関係に基づいてオブジェクト・ヒープ内のデータ・オブジェクトを編成することによって動作する。オブジェクト・ヒープには、コンピュータ・プログラムのための作業メモリを表すコンピュータ・メモリのどのセグメントでも含めることができ、通常は、コンピュータ・プログラムの実行中にデータが動的に割り振られ、使用され、管理されるメモリのセグメントを含めることができる。必ずではないが、通常、オブジェクト・ヒープは、ガーベジ・コレクタによって管理され、ガーベジ・コレクタは、ガーベジ・コレクションが実行される時には必ず、コンピュータ・プログラムと並列に走行するか、コンピュータ・プログラムの実行を停止させる「ストップ・ザ・ワールド(stop-the-world)」コレクタとして動作するか、単にプログラムの特定のスレッドとすることができる。当技術分野で全般的に既知のさまざまな種類のガーベジ・コレクタを、本発明との一貫性を有する形で使用することができる。
【0030】
本明細書で説明するアクセス関係は、通常は、データ・オブジェクトへのアクセスの有望な時間的な近接性に少なくとも部分的に基づくか、異なるデータ・オブジェクトのアクセスの相対頻度に少なくとも部分的に基づいて、複数のデータ・オブジェクトの間に存在する。たとえば、アクセス関係は、2つのオブジェクトの間に親子関係が存在する時すなわち、あるオブジェクト(親)が他方のオブジェクト(子)のメモリのある部分にアクセスする時に、必ず定義することができる。子も、それが親である場合に(それ自体がこれらの子の親である他のオブジェクトの親である場合も含めて)、それ自体の関係を有することができる。本明細書で説明する形でオブジェクトを編成することによって、多重レベル・メモリ・アーキテクチャでのキャッシュ・ミスまたはページ・フォルトが減る。というのは、短い時間枠内でアクセスされるオブジェクトが、メモリ内の同一の編成ブロック(たとえば、キャッシュ・ラインまたは仮想メモリ・ページ)内に存在する可能性が高まるからである。
【0031】
本明細書で説明するいくつかの実施例では、同一のアクセス連鎖に含まれる複数のデータ・オブジェクトすなわち、特定のルート・オブジェクトがアクセスされた後にさまざまなシーケンスで参照されるオブジェクトを、それらのオブジェクトの間の時間的近接性に基づいて、メモリ内(たとえば、オブジェクト・ヒープ内の連続するメモリ・セグメント内)で一緒に論理的にグループ化することができる。さらに、いくつかの実施例では、そのようなグループ内の特定のオブジェクトを、相対アクセス頻度またはオブジェクトがアクセスされる順序に基づいて、互いに相対的に配置することができる。
【0032】
以下で説明する特定の実施例では、Sun Microsystems社によって開発されたJavaプログラミング環境で実行されるコンピュータ・プログラムの性能の最適化における本発明の具体的な応用例に焦点を合わせる。しかし、本発明は、オブジェクト・ヒープを使用する他のオブジェクト指向プログラミング環境での適用可能性を有することを諒解されたい。さらに、すべてのデータ(オブジェクト指向の意味で「オブジェクト」と呼ばれない時であっても)をオブジェクトとして表現できる場合、本発明は、非オブジェクト指向プログラミング環境での適用可能性をも有する。したがって、本発明は、以下で説明する特定のJavaベースの実施形態に制限されない。
【0033】
図3は、本発明との一貫性を有する関係ベースのオブジェクト順序付けを実装するために例の実施例で使用される主要なソフトウェア・コンポーネントを示す図である。具体的に言うと、図3には、仮想マシン44に結合されたコンパイラ42が示されており、このコンパイラは、入力としてソース・コード46を受け取り、それに応答して、仮想マシン44によって実行できる1つまたは複数のクラス・ファイル48を出力する。
【0034】
コンパイラ42、仮想マシン44、ソース・コード46及びクラス・ファイル48のそれぞれは、さまざまな既知のJava言語仕様との互換性を有するように構成される。ソース・コード46は、コンピュータ・プログラムの人間可読Javaソース・コード表現である。コンパイラ42は、ブロック50に示されるように、Javaのソース・コード46から、Javaコンピュータ・プログラムの中間表現を表す複数のバイトコードを生成するのに使用される。
【0035】
生成されたバイトコードは、1つまたは複数のクラスに編成され、このクラスは、仮想マシン44によるコンピュータ・プログラムの実行中に割り振られ、使用されるオブジェクトのテンプレートを表す。クラスは、実行可能バイトコードとそのような実行可能コードが頼るデータの両方を含むクラス・ファイルに編成される。オブジェクトに関する他の情報も、通常は、当技術分野で既知の通りクラス・ファイルに含まれる。
【0036】
生成されたクラスは、クラス検証ブロック51によって処理され、クラス検証ブロック51は、クラスに対するさまざまな検証動作及び分析動作を実行して、クラスにエラーがなく、クラスがさまざまな実行時エラーを引き起こさないようにし、また、Java言語のすべてのセキュリティ要件が満たされるようにする。バイトコード生成とクラス検証の両方が周知であり、したがって、本明細書でこれ以上詳細に説明する必要がないことを諒解されたい。
【0037】
検証されたクラスは、オブジェクト・アクセス・プロファイリング・ブロック52に渡されて、本発明との一貫性を有する形でのアクセス・プロファイリングが実行される。具体的に言うと、クラスのアクセス・パターンは、クラス内で定義されている実行可能コードのシミュレーションに基づいて生成される(図4及び図5に関して下で詳細に説明する)。オブジェクト・アクセス・プロファイリング・ブロック52の出力は、1つまたは複数のクラス・ファイル48である。下で詳細に説明するように、このようなクラス・ファイルには、それに埋め込まれたプロファイリングされたアクセス情報が含まれる場合があるが、いくつかの実施形態では、そのような情報がクラス・ファイルに格納されない場合があり、これによって、オブジェクト・アクセス・プロファイリング・ブロック52でのオブジェクト・アクセス・プロファイリングが実行されなくなる。
【0038】
生成されたクラス・ファイルは、後に実行するために第三者に配布するかなんらかの持続性媒体に格納することができ、また、仮想マシン44によって即座に実行することができる。仮想マシン44によって、Java仮想マシン(JVM)が実装されるが、これは、基本的には、特定のコンピュータ・プラットホーム上で仮定のマイクロプロセッサの動作をエミュレートするものである。異なる仮想マシンを使用して、クラス・ファイルを異なるプラットホーム上で実行できるようにすることが可能である。さらに、コンパイラ42と仮想マシンは、同一のコンピュータ・システム上に存在する必要がないことを諒解されたい。
【0039】
クラス・ファイルは、当技術分野で一般に既知の形で、クラス・ローダ・コンポーネント54を使用して、仮想マシン44によってロードされる。しかし、図示の実施例のクラス・ローダ・コンポーネント54は、ロードされたクラス・ファイルに関するプロファイリングされたアクセス情報がコンパイラによってクラス・ファイルに埋め込まれていない場合に、そのクラス・ファイルをオブジェクト・アクセス・プロファイリング・ブロック56に渡して、そのような情報を得ることもできる。さらに、クラス・ローダ・コンポーネント54は、追加のクラス検証を実行して、やはり当技術分野で既知の形で、Javaセキュリティ規則に合致することを検証することもできる。
【0040】
コンピュータ・プログラムの実行中に作業記憶域を提供するために、仮想マシン44には、「From」区画60と「To」区画62を含むオブジェクト・ヒープ58が含まれる。データ記憶域は、実行時中に、作業記憶域として使用するためにFrom区画60内で割り振られる。その後、ガーベジ・コレクタ(ガーベジ・コレクション論理70によって表される)が、到達可能なオブジェクトをFrom区画60からTo区画62へ周期的にコピーし、From区画とTo区画をスワップし、その結果、前のTo区画が新しいFrom区画になり、前のFrom区画が新しいTo区画になるようにする。このようなオブジェクト・ヒープ管理アルゴリズムを、コピー型ガーベジ・コレクションと称する。しかし、他のオブジェクト・ヒープ管理アルゴリズムを使用することができるので、他のオブジェクト・ヒープ編成を使用することもできる。
【0041】
クラス・ローダ・コンポーネント54によるクラスのロードに応答して、1つまたは複数のスレッド64が、インタープリタ63によって実行され、インタープリタ63は、バイトコードのそれぞれについて、仮想マシンが動作するプラットホームに適したネイティブ・コードを生成する。したがって、各スレッドは、異なるメソッド呼び出しを介するコヒーレンシを維持するのに必要なデータが維持される呼出しスタック66を割り振られる。さらに、ブロック68に示されているように、必要であれば、追加のオブジェクト・アクセス・プロファイリングを実行時中に実行することができる。オブジェクト・ヒープは、ガーベジ・コレクション論理70によって管理され、ガーベジ・コレクション論理70は、図示の実施例ではコピー型ガーベジ・コレクタである。
【0042】
図3からわかるように、各スレッドは、単一のガーベジ・コレクタ・スレッドによって管理されるオブジェクト・ヒープを共用する。同一のコンピュータ・システム上で同時に実行される複数のコンピュータ・プログラムも、同一のオブジェクト・ヒープを共用することができる。しかし、図示の実施例では、追加のコンピュータ・プログラムは、別々のオブジェクト・ヒープ(及び関連するガーベジ・コレクタ)を割り振られるが、それらはこの図には示されていない。
【0043】
仮想マシン44によるJavaバイトコードの解釈と実行は、当技術分野で周知の動作であることが諒解されるであろう。他の代替案の中でもジャストインタイム・コンパイルを含む、仮想マシンに対する追加の変更も、仮想マシン44内で実施することができる。
【0044】
上で述べたように、本発明との一貫性を有するオブジェクト・アクセス・プロファイリングは、コンピュータ・プログラムの寿命のうちのさまざまな時、たとえば、コンパイル中(オブジェクト・アクセス・プロファイリング・ブロック52によって表される)、ロード中(オブジェクト・アクセス・プロファイリング・ブロック56によって表される)または実行中(ブロック68によって表される)に実行することができる。通常、プロファイリングは、そのような期間のうちのただ1つで実行されるが、コンパイル中にオブジェクト・アクセス・プロファイリングへのアクセスを有しない他のシステムによって生成されたクラス・ファイルを仮想マシンが実行する可能性があると予想される場合には、たとえばクラス・ロード中に、オブジェクト・アクセス・プロファイリングが実行されたことと、適当なアクセス情報が生成されたことを調べるために検査する必要が生じる場合があることを諒解されたい。一般に、プロファイリングは、コンピュータの実行中の性能ペナルティを最小にするために、たとえばコンパイル中またはロード中など、処理のうちでできる限り早期に実行することが好ましい。
【0045】
本発明との一貫性を有するオブジェクト・アクセス・プロファイリングを実行するのに適したルーチンの1つを、図4及び図5の100に示す。図4からわかるように、ルーチン100は、必要であればクラスを取り出すことによって、ブロック102で開始される。上で述べたように、オブジェクト・アクセス・プロファイリングは、すでにクラスがロードされた後、または、クラス・ファイルに格納されたプログラム・コードの実行中に、実行することができる。そのような場合には、クラスの取出が不要になる可能性がある。
【0046】
次に、ブロック104で、ロード/ストア・カウント・テーブルとアクセス順序木データ構造を初期設定する。ロード/ストア・カウント・テーブルは、あるクラスで参照されるオブジェクトのそれぞれへの予測されたアクセスのカウントを、ロード・アクセスとストア・アクセスによって分離して維持するのに使用される。たとえば、図6からわかるように、ロード/ストア・カウント・テーブルに適したデータ構造の1つが、テーブル75に示されており、これには、それぞれにオブジェクトIDフィールド78、ロード・カウント・フィールド80及びストア・カウント・フィールド82が含まれる、複数の項目76が含まれる。オブジェクトIDフィールド78には、参照されるオブジェクトを識別することのできる一意の識別子が含まれる。プロファイリング情報に基づいて、ロード・カウント・フィールド80には、ロード型のアクセス(たとえば、Javaのaload動作とget field動作)の回数が格納され、ストア・カウント・フィールド82には、同様に、ストア型アクセス(たとえば、Javaのastore動作とput field動作)の回数が格納される。通常、テーブル75は、すべての項目のデータがクリアされた状態で初期設定される。
【0047】
他のデータ構造を使用して、とりわけ連係リストとハッシュ・テーブルを含む、所与のクラスに関するロード・アクセス及びストア・アクセスの数を表すことができることを諒解されたい。さらに、いくつかの実施形態では、ロード・アクセスとストア・アクセスの別々のカウントを維持する必要がなく、これによって、ロード・カウント・フィールド80及びストア・カウント・フィールド82を同一のフィールドに組み合わせることができることを諒解されたい。さらに、下で詳細に説明するように、あるオブジェクトに関するアクセス情報は、アクセス順序木データ構造内で維持することができ、これによって、テーブル75または同等のデータ構造が不要になる。
【0048】
図7は、複数のノード88が依存するルート・オブジェクトまたはルート・ノード86を含む、アクセス順序木85の1例を示す図である。ルート・ノード86は、その下ですべてのオブジェクトが特定のメソッドによって参照される、木の出発点を表す。ノード88は、一般に、ルート・ノード86によって表される特定のメソッド内のフィールドまたは参照されるオブジェクトを表す。ノード88のうちのいくつかを、他のノード88が参照でき、参照されるオブジェクトの連鎖が表されることに留意されたい。たとえば、アクセス順序木85で表現される例のクラスの「this」オブジェクトについて、「this」オブジェクトから「table[]」オブジェクト、「tempObject」オブジェクト及び「next」オブジェクトへの呼出しまたはアクセスの連鎖が図示されており、これは、例のクラスによって定義されるオブジェクトの実行中に、オブジェクト「table[]」、「tempObject」及び「next」が、「this」オブジェクトへの参照の直後に順番に参照されることを表す。
【0049】
各ノード内には、呼出しアクセス連鎖内のオブジェクトのオブジェクト識別子を単純に格納することができる。他の実施形態では、各ノード内に、そのオブジェクトに対するアクセスの数を表すアクセス・カウントが含まれることが望ましい場合がある。そのようなアクセス・カウントは、ロード及びストアによって分離するか、一緒にグループ化することができる。上で述べたように、この情報は、別々のアクセス・テーブルの使用に対する代替物として、ノード内に格納することができる。
【0050】
さらに、各木は、通常は、そのクラスについて定義される各メソッドによって参照されるオブジェクトによって分離される。そのような場合には、たとえば、ルート・ノード86と各フィールドのノード88の間に追加ノードを挿入し、フィールド・ノードをメソッドによって分類できるようにすることが望ましい場合がある。さまざまなデータ構造、たとえば連係リストなどを使用して、本発明との一貫性を有する呼出し木を表すことができることを諒解されたい。通常、アクセス順序木の初期設定には、子ノードを関連付けられていないルート・ノード・オブジェクトの初期設定が含まれる。
【0051】
図4を参照すると、ロード/ストア・カウント・テーブルとアクセス順序木が初期設定された後に、制御をブロック106に移して、クラス内の各バイトコードを分析してロード/ストア・カウント・テーブルを構築するループに入る。具体的に言うと、クラス内の各バイト・コードについて、制御をブロック108に移して、バイトコードが新しいオブジェクトを操作するかどうかすなわち、バイトコードが、ロード/ストア・カウント・テーブルに対応する項目を有しないオブジェクトを参照するかどうかを判定する。そうである場合には、制御をブロック110に移して、新しいオブジェクトのためにロード/ストア・カウント・テーブルに新しい項目を追加する。これには、新しい項目へのオブジェクト識別子の格納と、ロード・カウント及びストア・カウントの0への初期設定が含まれる。その後、制御をブロック112に移して、バイトコードがオブジェクトに対するロード・アクセスを実行するかどうかを判定する。また、ブロック108に戻って、バイトコードが新しいオブジェクトを操作しない場合には、制御は、ブロック110を迂回して、ブロック112に直接に移される。
【0052】
バイトコードが、オブジェクトに対するロード型のアクセスを実行する場合には、制御をブロック114に移して、そのオブジェクトのロード・カウントを増分する、すなわち、オブジェクトに対応する項目のロード・カウント・フィールドに格納された値を1つ増やす。その後、制御をブロック106に戻して、追加のバイトコードを処理する。
【0053】
ブロック112に戻って、バイトコードがオブジェクトに対するロード・アクセスを実行しない場合、制御をブロック116に移して、バイトコードがオブジェクトに対するストア型のアクセスを実行するかどうかを判定する。そうでない場合には、このバイトコードのそれ以上の処理を行う必要はなく、制御をブロック106に戻す。しかし、バイトコードがオブジェクトに対するストア・アクセスを実行する場合には、制御をブロック118に移して、そのオブジェクトのストア・カウントを増分した後に、ブロック106に制御を返す。
【0054】
クラスのすべてのバイトコードを処理した後に、ブロック106から図5のブロック120に制御を移す。ブロック120から、クラスのアクセス順序木を構築するためにクラスの各バイトコードを処理する、第2のループが開始される。
【0055】
各バイトコードについて、制御をブロック122に移して、シミュレーション・スタックを使用してバイトコードを検査する。具体的に言うと、バイトコード実行の効果をシミュレートして、「シミュレートされた」呼出しスタックを構築する。
【0056】
シミュレーション・スタックを用いてバイトコードを検査した後に、制御をブロック124に移して、バイトコードが、そこからロードまたはストアを行うオブジェクト参照を使用するロード動作またはストア動作であるかどうか、すなわち、バイトコードが、ロード動作またはストア動作を実行するために、本明細書で「参照されるオブジェクト」と称する別のオブジェクトにアクセスするかどうかを判定する。そうでない場合には、制御をブロック120に戻し、追加のバイトコードを処理する。
【0057】
しかし、バイトコードが、オブジェクト参照を使用するロード動作またはストア動作である場合には、制御をブロック126に移して、この参照されるオブジェクトをロードまたはストアした前のオブジェクトが存在するかどうかを判定する。本明細書で使用する前のオブジェクトとは、問題の参照されるオブジェクトへのアクセスに到達するために以前にアクセスされたオブジェクトを表す。したがって、前のオブジェクトが存在するならば、呼出し連鎖またはアクセス連鎖が、前のオブジェクトと参照されるオブジェクトの間で定義される。
【0058】
まず、参照されるオブジェクトに関して前のオブジェクトがまだ存在しないと仮定すると、制御をブロック128に移して、参照されるオブジェクトがアクセス順序木にすでに存在するかどうかを判定する。そうでない場合には、参照されるオブジェクトのために新しいノードを木に追加し、制御をブロック132に移して、参照されるオブジェクトのアクセス・カウントを増分する。ブロック128に戻って、そのオブジェクトがすでに木に存在する場合には、新しいノードを追加せず、制御を直接にブロック132に移して、アクセス・カウンタを増分する。
【0059】
上で述べたように、アクセス・カウントは、木の各ノード内で維持することができる。代替案では、アクセス・カウント情報を、ロード/ストア・カウント・テーブル内で維持することができ、これによって、ブロック132が不要になる。
【0060】
参照されるオブジェクトのアクセス・カウントを増分した後に、制御をブロック134に移して、バイトコードがロード動作であるかどうかを判定する。そうでない場合には、制御をブロック120に返して、追加のバイトコードを処理する。しかし、バイトコードがロード動作である場合には、制御をブロック136に移して、前のオブジェクトに参照されるオブジェクトをセットし、基本的に木を1レベル下にトラバースして、後続のロード動作またはストア動作に関する前のオブジェクトとして、参照されるオブジェクトをセットする。その後、制御をブロック120に返して、追加のバイトコードを処理する。
【0061】
ブロック126に戻って、ロード動作またはストア動作に関して前のオブジェクトが存在する場合には、制御をブロック138に移して、参照されるオブジェクトが、前のオブジェクトの子のリストに存在するかどうかを判定する。そうである場合には、制御を直接ブロック132に移して、参照されるオブジェクトのアクセス・カウントを増分する。しかし、参照されるオブジェクトが子のリストに存在しない場合には、まず制御をブロック14に移して、前のオブジェクトの子のリストに参照されるオブジェクトのノードを追加し、参照されるオブジェクトが、前のオブジェクトへのアクセスの直後にアクセスされることによって前のオブジェクトとのアクセス関係を有することを示す。
【0062】
クラスのすべてのバイトコードを処理した後に、そのクラスのアクセス順序木データ構造を構築し、そのアクセス順序木から、クラス内のどのオブジェクトがどの順序でアクセスされるかを確認することができる。その後、制御をブロック120からブロック142に移して、各ノードの子を、そのアクセス・カウンタに基づいて順序付ける。具体的に言うと、各ノードについて、その子は、これらのノードのそれぞれに格納されたアクセス・カウントに基づいてアクセス木内で順序付けられ、最も高いアクセス・カウントを有する子が、最初に配置され、他の子は、アクセス・カウントの降順でそれに続く。したがって、この2次レベルの順序付けによって、より頻繁にアクセスされる子ノードが、親ノードの近くに編成されて、より頻繁にトラバースされる呼出し連鎖またはアクセス連鎖が、互いにできる限り近くに格納されるようになる。
【0063】
各ノードの子が、上で説明した形で編成された後に、制御をブロック144及び146に移して、任意選択として、後に実行時中に使用するために、クラス・ファイルに最近生成されたプロファイリングされたアクセス情報を格納する。しかし、オブジェクト・アクセス・プロファイリングが実行時に実行される場合には、クラス・ファイル内でオブジェクトを順序付けることと、アクセス情報をクラス・ファイルに格納することが不要になる可能性があることを諒解されたい。したがって、そのような状況では、ブロック144及び146を省略することができる。
【0064】
ブロック144では、クラス・ファイル内のオブジェクト参照を、アクセス順序木に従って、したがって、木に固有のアクセス情報を使用して順序付け、これによって、特定の連鎖またはシーケンスで(すなわち、時間的近接性を伴って)アクセスされるオブジェクトへの参照が、互いに近くに順序付けられてグループを形成し、そのようなグループ内のオブジェクト(たとえば、同一の親オブジェクトから依存する兄弟)への参照は、さらに、相対的なアクセス頻度によって順序付けられる。この種の順序付けは、単純に、現在処理されているノードの最も左側の未処理の子としてクラスに格納された次のノードを再帰的に選択するアルゴリズムを介して木をトラバースし、すべての子ノードを処理し終えた時に親ノードへ戻ることによって、実行できることを諒解されたい。
【0065】
その結果、上で説明したアルゴリズムを使用して、クラス・ファイル自体が、関連するオブジェクトへの参照が互いに近くに配置される形で編成される。その結果、この形で最適化されたクラス・ファイルの、実行時中のオブジェクト・ヒープへの後続のロードは、改良されたガーベジ・コレクションに関連する利益と独立に、オブジェクト・ヒープのFrom区画内のキャッシュ・ミスまたはページ・フォルトを減らす能力も有する。
【0066】
ブロック144で、クラス内のオブジェクト参照を順序付けた後に、制御をブロック146に移して、クラス・ファイルにロード/ストア・カウント・テーブルとアクセス順序木を格納する。その後、プロファイリングが完了し、ルーチン100が終了する。
【0067】
図8は、図3のコンパイラ42によって出力される、図4及び図5のルーチン100によって生成されたプロファイリングされたアクセス情報を含む、Javaのクラス・ファイル150の例を示す図である。クラス・ファイル150は、Javaの「可搬性」すなわち、Java仮想マシン(JVM)をサポートするプラットホームの基礎となるアーキテクチャに無関係に、規格に準拠するJVMと共にすべてのシステムで走行する能力を可能にする、Javaクラスの標準外部表現である。クラス・ファイル150には、複数のデータ・フィールド152ないし173が含まれる。「magic(マジック)」データ・フィールド152は、このファイルをJavaクラス・ファイルとして識別できるようにする、特定の任意のビット・シーケンスである。このビット・シーケンスは、ファイルがJavaクラス・ファイルとして認識されるようにするために、16進値0xCAFEBABEを有しなければならない。また、「minor version(マイナ・バージョン)」データ・フィールド154及び「major version(メジャー・バージョン)」データ・フィールド156は、クラス・ファイルのバージョンを識別するためのフィールドである。
【0068】
「constant pool(定数プール)」データ・フィールド159では、可変長の項目のリストが定義され、この定数プールのサイズは、「constant pool count(定数プール・カウント)」データ・フィールド158によって識別される。各項目は、このクラス・ファイル内の他の場所で使用される定数または外部参照を表す。定数プールを使用することによって、値の単一の出現によってクラス・ファイル内の複数の必要を満たすことができるようになる。
【0069】
「access flags(アクセス・フラグ)」データ・フィールド160では、他のクラスからこのクラスを参照するのに必要なオーソリティを含む、クラス・ファイルによって表されるクラスの基本特性の一部が定義される。「this class(このクラス)」データ・フィールド162は、このクラスの名前を含む項目の定数プールへのインデックスであり、「superclass(スーパークラス)」データ・フィールド164は、このクラスのスーパークラスの名前を含む項目の定数プールへのインデックスである。
【0070】
「interfaces(インターフェース)」データ・フィールド167では、このクラスで実装されるインターフェースの名前を識別する定数プール・インデックス値のリストが定義され、そのサイズは、「interfaces count(インターフェース・カウント)」データ・フィールド166によって識別される。インターフェースは、Javaでは、他のオブジェクト指向言語で提供される「多重軽傷」と同一の機能の一部を達成するために使用される。
【0071】
「fields(フィールド)」データ・フィールド169では、このクラスのフィールドを記述した可変長の項目のリストが定義され、そのサイズは、「fields count」データ・フィールド168によって識別される。フィールドの名前と、存在する場合にはそのインスタンス化値は、定数プールへのインデックスとして表される。
【0072】
「methods(メソッド)」データ・フィールド171では、このクラスのメソッドを記述する可変長の項目のリストが定義され、そのサイズは、「methods count(メソッド・カウント)」データ・フィールド170によって識別される。フィールドの名前は、定数プールへのインデックスとして表される。各メソッドの実際の解釈可能コード(すなわち、バイトコードの組)は、そのメソッド項目の末尾に付加される。
【0073】
「attributes(属性)」データ・フィールド173では、クラスの他の特性のためのリポジトリが定義され、そのサイズは、「attributes count(属性カウント)」データ・フィールド172によって識別される。
【0074】
クラスによって参照されるオブジェクトへの参照は、fieldsデータ・フィールド169に格納され、図5のブロック144に関して上で説明した形で参照が編成されるのは、このデータ・フィールド内である。クラスのプロファイリングされたアクセス情報は、通常は、図8のテーブル75及びアクセス順序木85の配置によって表されるように、クラス・ファイルのattributesデータ・フィールド173に格納される。
【0075】
図9は、ガーベジ・コレクション論理70(図3)によって実行されるコレクタ・スレッド200を示す図である。一般に、コレクタ・スレッドは、ブロック202で初期設定されるが、これには、通常、メモリ内のオブジェクト・ヒープの割振りが含まれる。次に、ブロック204で、コレクタ・スレッドは、ガーベジ・コレクションの技術で周知の通り、トリガをかけるイベント、たとえば、タイマの満了、所定の閾値未満への使用可能メモリの減少などを待つ。
【0076】
トリガをかけるイベントが発生した後に、ブロック206でコレクション・サイクルを初期設定する。次に、ルート・コピー・ルーチン208を実行して、オブジェクト・ヒープのFrom区画からTo区画へ、到達可能なすべてのオブジェクトをコピーする。次に、区画スワップ・ルーチン210を実行して、To区画とFrom区画をスワップし、その結果、To区画にコピーされたオブジェクトが、本質的にFrom区画に「返される」ようにする。その結果、ルート・コピー・ルーチン208でTo区画にコピーされなかったすべてのオブジェクトは、次のガーベジ・コレクション・サイクルで、新しいオブジェクトが前のFrom区画にコピーされる際に、効果的に破棄される。
【0077】
図10及び11は、本発明との一貫性を有する形で関係ベースのオブジェクト順序付けを実施する際のルート・コピー・ルーチン208の動作を示す図である。図10からわかるように、ルート・コピー・ルーチン208は、プロファイリングされたアクセス情報が、オブジェクト・ヒープを使用するコンピュータ・プログラム内の各クラスについて使用可能になるようにするループを開始することによって、ブロック212で開始される。そのようなクラスのそれぞれについて、制御をブロック212からブロック214に移して、上でルーチン100によって生成されたプロファイリングされたアクセス情報がクラス・ファイルに含まれるかどうかを判定する。そうである場合には、このクラスのそれ以上の処理を行う必要はなく、制御をブロック212に返して、追加のクラスを処理する。
【0078】
しかし、そのようなアクセス情報が使用可能でない場合には、そのクラスについてオブジェクト・アクセス・プロファイリングを行うルーチン100を呼び出し、その後、ブロック216で、相対アクセス頻度に基づいて、クラス・オブジェクト参照フィールドを再順序付けする。その後、制御をブロック212に返して、追加のクラスを処理する。
【0079】
すべてのクラスを処理した後に、各クラスのプロファイリングされたアクセス情報が、ガーベジ・コレクタから使用可能になる。その後、制御をブロック218に移して、現在呼出しスタック上に配置されているオブジェクト参照を処理するループを開始する。上で述べたように、呼出しスタックには、通常は、コンピュータ・プログラム内の1つまたは複数のメソッドの実行中に使用されるオブジェクトへの参照が含まれる。コンピュータ・プログラムによってメソッドが呼び出される時には、必ず、そのメソッドによって使用されるパラメータが、そのようなパラメータを含む項目を呼出しスタック上にプッシュすることによって、そのメソッドに渡される。さらに、呼出し元メソッドに関する戻り情報が、その項目に追加され、その結果、プログラムは、呼び出されたメソッドが終了した後に再開できるようになる。呼び出されたメソッドが中止または完了した時には、必ず、それのための項目が、呼出しスタックからポップされ、情報が呼出し元メソッドに返される。呼出しスタックの使用及び動作は、当技術分野で周知である。
【0080】
ブロック218では、特にFORループを開始して、現在呼出しスタック上にあるオブジェクト参照のそれぞれを、2つのリストすなわち、呼出し連鎖またはアクセス連鎖に見つかるすべてのオブジェクトを含む「順序」リストと、他のすべてのオブジェクトの「孤児(orphaned)」リストにソートする。したがって、そのような参照のそれぞれについて、制御をブロック220に渡して、そのオブジェクト参照に関する参照されるオブジェクトが、そのクラスのアクセス順序木内にあるかどうかを判定する。
【0081】
そうである場合には、制御をブロック222に移して、参照されるオブジェクトを「順序」リストに追加する。そうでない場合には、ブロック224で、参照されるオブジェクトを「孤児」リストに追加する。すべてのオブジェクトをこの形で処理した後に、ブロック218からブロック226及び228に制御を移して、各リストのオブジェクトを別々に処理する。
【0082】
ブロック226では、「順序」リスト内のオブジェクトを処理し、基本的に、「順序」リスト内の各オブジェクトによって参照されるオブジェクトを、アクセス順序木によって定義されるアクセス順序でTo区画にコピーする。さらに、この時点で、From区画内の元のオブジェクトのそれぞれに、To区画内のそのオブジェクトの新しいコピーを指す転送ポインタを追加する。その結果、From区画内のオブジェクトの古いコピーへの参照のすべてが、単にそのための転送ポインタに従うことによって、そのオブジェクトの新しいコピーを突きとめることができる。
【0083】
「孤児」リストに含まれるオブジェクトについて、ブロック228で、各オブジェクトをTo区画にコピーし、やはりFrom区画内のオブジェクトの元のコピーに転送ポインタを追加する。「孤児」リスト内のオブジェクトは、アクセス順序木上に存在しないので、そのようなオブジェクトの特定の編成は使用されない。
【0084】
ブロック226及び228の完了時に、呼出しスタック上のオブジェクト参照の処理が完了し、制御を図11のブロック230に移して、オブジェクト・ヒープ内のすべての静的オブジェクトを処理するループを開始する。当技術分野で既知の通り、静的オブジェクトは、通常は、大域的にアクセス可能なオブジェクトである。
【0085】
ブロック230で、静的オブジェクトのそれぞれを処理するループが開始される。そのようなオブジェクトのそれぞれについて、制御をブロック232に移して、その静的オブジェクトに含まれる参照のそれぞれを処理する。そのような参照のそれぞれについて、制御をブロック234に移して、その参照によって参照されるオブジェクトが、すでにTo区画にコピーされているかどうかを判定する。そうである場合には、制御をブロック232に戻して、静的オブジェクト内の追加の参照を処理する。しかし、参照されるオブジェクトがTo区画内にない場合には、制御をブロック236に移して、参照されるオブジェクトをTo区画にコピーし、To区画内の新しいコピーを指す転送ポインタを、From区画内の元のコピーに追加する。その後、制御をブロック232に戻して、追加の参照を処理する。
【0086】
現在の静的オブジェクト内のすべての参照を処理した後に、ブロック232は、制御をブロック230に戻して、上で説明した形で追加の静的オブジェクトを処理する。その後、すべての静的オブジェクトを処理した後に、ブロック230は、制御をブロック238に移して、To区画内の到達可能なオブジェクトによって参照されるすべてのオブジェクトも、To区画にコピーされるようにする。
【0087】
具体的に言うと、ブロック238では、制御をブロック240に渡してオブジェクト内の参照のそれぞれを処理することによって、To区画内のオブジェクトのそれぞれを処理する。そのような参照のそれぞれについて、制御をブロック242に移して、参照されるオブジェクトがFrom区画内にあるかどうかを判定する。そうでない場合には、制御をブロック240に戻して、現在処理されているオブジェクト内の追加の参照を処理する。しかし、参照されるオブジェクトがまだFrom区画内にある場合には、制御をブロック244に移して、参照されるオブジェクトが現在転送ポインタを有するかどうかを判定する。
【0088】
そうでない場合には、参照されるオブジェクトは、まだTo区画にコピーされておらず、したがって、ブロック246を実行して、参照されるオブジェクトをTo区画にコピーし、From区画内の元のコピーに転送ポインタを追加する。その後、制御をブロック240に戻して、オブジェクト内の追加の参照を処理する。
【0089】
しかし、参照されるオブジェクトが転送ポインタを有する場合には、参照されるオブジェクトは、すでにTo区画にコピーされており、したがって、ブロック248を実行して、現在処理されているオブジェクト内の参照を、転送ポインタに格納された値と置換する。本質的に、この動作によって、To区画内のオブジェクトの新しいコピーを指すように参照が更新される。その後、制御をブロック240に戻して、オブジェクト内の追加の参照を処理する。
【0090】
現在処理されているオブジェクト内のすべての参照を処理した後に、ブロック240からブロック238に制御を移して、To区画内の追加のオブジェクトを処理する。さらに、To区画内のそのようなオブジェクトのすべてをコピーした後に、ガーベジ・コレクション・サイクルのコピー相が完了し、コレクタ・スレッド200が終了する。
【0091】
図12は、区画スワップ・ルーチン210を詳細に示す図である。上で述べたように、ルート・コピー・ルーチンの完了時に、オブジェクト・ヒープ内の到達可能なオブジェクトのすべてが、To区画にコピーされている。したがって、区画スワップ・ルーチン210では、まずブロック250を実行して、From区画とTo区画へのポインタをスワップし、本質的に、コレクタ・スレッドの次のサイクル中に使用するために、到達可能なオブジェクトのすべてを新たに形成されたFrom区画に戻す。到達可能でないオブジェクトのすべてならびに、到達可能なオブジェクトの元のコピー(まだその新しいコピーへの転送ポインタを含む)は、新しいTo区画に割り振られた空間に残っている。新しいTo区画は、望むならばクリアすることができるが、コレクタ・スレッドの次のサイクルで、その区画にまだ残っている情報のすべてが単純に上書きされるので、通常はこのステップは省略される。
【0092】
ブロック250でポインタをスワップした後に、制御をブロック252に移して、転送ポインタを組み込むようにすべての参照を更新する。具体的に言うと、転送ポインタを有するオブジェクトを指す参照のすべてが、これらの転送ポインタに関連する値を格納するように更新され、本質的に、現在はFrom区画に割り振られている空間内の新しいコピーを指すように参照を更新する。ブロック252の完了時に、オブジェクト・ヒープが収集され、コレクタ・スレッドの現在のサイクルが完了する。したがって、図9からわかるように、制御をブロック204に戻して、コレクタ・スレッドの次のサイクルのトリガになるイベントを待つ。
【0093】
例
上で説明した特定の実施例の動作を例示するために、下の表1に、「Hashtable」と称するクラスのコンポーネントとして提供され、複数の「HashtableElement」オブジェクトを有する、代表的なJava言語メソッド「containsKey」を示す。
【表1】
【0094】
下の表2に、表1に示されたメソッドのコンパイル中に生成される代表的なバイトコードを示す。
【表2】
【0095】
上のオブジェクト・コードに基づくと、図4及び5のルーチン100の実行によって、「table[]」オブジェクトが3回参照され(バイトコード・オフセット1、14及び19)、「tempObject」オブジェクトが2回参照され(バイトコード・オフセット28及び51)、「this」、「value」、「next」及び「key」オブジェクトがそれぞれ1回参照される(それぞれバイトコード・オフセット0、5、53及び39)ことを示す図示のデータを含む、図6のテーブル75などのロード・ストア・テーブルが作成される。同様に、ルーチン100によって、そのメソッドで参照されるさまざまなオブジェクトの相対アクセス順序を示す、図7のアクセス順序木85などのアクセス順序木が作成される。
【0096】
図14ないし16に移ると、From区画302とTo区画304を含む、例のオブジェクト・ヒープ300に対して実行される代表的なガーベジ・コレクション動作が図示されている。図14は、具体的には、ガーベジ・コレクションの前の、ガーベジ・コレクション・サイクル中のJava仮想マシン内のスレッドのうちの1つの呼出しスタックが、停止しているか、たとえば図13の呼出しスタック280の項目282によって表されるようにスタック上にcontainsKeyメソッドを有する時の、From区画302の状態を示す図である。この例では、「Hashtable」オブジェクトと「table[]」オブジェクトが、ガーベジ・コレクション動作の開始時点からスタック上にある。
【0097】
図14からわかるように、オブジェクトが割り振られる順序に基づいて、From区画は、「Hashtable」オブジェクト306、「table[]」オブジェクト308、「HashtableElement」オブジェクト310及び312の対、「HashtableElement」オブジェクトによって参照されるオブジェクト314及び316の対を有する。図14には、さらに、これらのオブジェクトが、その間に点在する追加のオブジェクト318と共に、From区画302内で広く分散することも示されている。
【0098】
次に図15に移ると、From区画302からTo区画304へのオブジェクトのコピー(図10のブロック218から始まる)の結果が示されており、これによって、コピー(アクセント符号によって示される)が、「Hashtable」オブジェクト306と、「table[]」オブジェクト308と、「HashtableElement」オブジェクト310及び312と、オブジェクト314及び316から作られる。オブジェクトのコピーは、To区画内で互いにパックされ、コピーの順序は、幅優先の順序付け(深さ優先の順序付けも使用することができる)に基づく。転送ポインタがFrom区画のオブジェクトに追加されて、To区画内のコピーへの参照が維持されていることに留意されたい。また、オブジェクト318によって表される孤児オブジェクトは、To区画にコピーされず、したがって、区画がスワップされる時に破棄される。
【0099】
次に、図16に示されているように、オブジェクト内に含まれる参照は、図11、具体的にはルート・コピー・ルーチン208のブロック238から始まる処理に関連して説明したように、クリーン・アップされる。区画のスワップの際には、To区画304が、次のガーベジ・コレクション・サイクルのFrom区画になる。
【0100】
まとめとして、本発明の構成に関して以下の事項を開示する。
【0101】
(1)(a)オブジェクト・ヒープに複数のデータ・オブジェクトを格納するステップと、
(b)前記オブジェクト・ヒープ内で、少なくとも第1及び第2のデータ・オブジェクトを、それらの間のアクセス関係に基づいて配置するステップと
を含む、コンピュータ・メモリ内のデータを管理する方法。
(2)前記アクセス関係が、前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップをさらに含む、上記(1)に記載の方法。
(3)前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記第1及び第2のデータ・オブジェクトへのアクセスの間の有望な時間的近接性を判定するステップを含む、上記(2)に記載の方法。
(4)前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記第1及び第2のデータ・オブジェクトが、次々にアクセスされる可能性が高いことを判定するステップを含む、上記(3)に記載の方法。
(5)前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記第1及び第2のデータ・オブジェクトに関するアクセスの相対頻度を判定するステップを含む、上記(2)に記載の方法。
(6)前記データ・オブジェクトが、コンピュータ・プログラムに応答してアクセスされ、前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記コンピュータ・プログラムのコンパイル及びローディングのうちの少なくとも1つの間に実行される、上記(2)に記載の方法。
(7)前記第1及び第2のデータ・オブジェクトの間の前記アクセス関係を判定するステップが、前記コンピュータ・プログラムのためのプロファイリングされたアクセス情報を生成するために、前記コンピュータ・プログラムの少なくとも一部の実行をシミュレートするステップを含む、上記(6)に記載の方法。
(8)前記プロファイリングされたアクセス情報が、前記第1及び第2のデータ・オブジェクトのアクセス順序を表すアクセス順序木を含む、上記(7)に記載の方法。
(9)前記プロファイリングされたアクセス情報が、さらに、前記第1及び第2のデータ・オブジェクトのそれぞれのアクセス・カウントを含む、上記(8)に記載の方法。
(10)前記プロファイリングされたアクセス情報を前記コンピュータ・プログラムと関連付けるステップをさらに含む、上記(7)に記載の方法。
(11)前記プロファイリングされたアクセス情報を前記コンピュータ・プログラムと関連付けるステップが、前記プロファイリングされたアクセス情報を、前記コンピュータ・プログラムの実行可能コードと同一のファイルに格納するステップを含む、上記(10)に記載の方法。
(12)前記第1及び第2のデータ・オブジェクトが、複数のデータ・オブジェクトの中にあり、前記オブジェクト・ヒープ内で少なくとも前記第1及び第2のデータ・オブジェクトをそれらの間のアクセス関係に基づいて配置するステップが、データ・オブジェクトのサブセットを、データ・オブジェクトの前記サブセット内の各データ・オブジェクト間のアクセス関係に基づいて、前記オブジェクト・ヒープ内で一緒にオブジェクト・グループにグループ化するステップを含む、上記(1)に記載の方法。
(13)データ・オブジェクトの前記サブセットを一緒にグループ化するステップが、データ・オブジェクトの前記サブセット内の前記データ・オブジェクトをメモリの連続するセグメントに格納するステップを含む、上記(12)に記載の方法。
(14)前記オブジェクト・グループ内の前記データ・オブジェクトを、それらのアクセスの相対頻度に少なくとも部分的に基づいて配置するステップをさらに含む、上記(13)に記載の方法。
(15)前記オブジェクト・グループ内の前記データ・オブジェクトを、前記データ・オブジェクトがアクセスされる可能性が高い順序に少なくとも部分的に基づいて配置するステップをさらに含む、上記(13)に記載の方法。
(16)前記複数のデータ・オブジェクトを前記オブジェクト・ヒープに格納するステップが、各データ・オブジェクトについて前記オブジェクト・ヒープ内の空間を割り振るステップを含む、上記(1)に記載の方法。
(17)前記オブジェクト・ヒープが、From区画とTo区画とに区分され、前記複数のデータ・オブジェクトを前記オブジェクト・ヒープに格納するステップが、コンピュータ・プログラムの実行中に前記第1及び第2のデータ・オブジェクトを前記From区画に動的に格納するステップを含み、前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置するステップが、前記第1及び第2のデータ・オブジェクトを、それらの間の前記アクセス関係に基づく所定の順序で、前記From区画から前記To区画にコピーするステップを含む、上記(16)に記載の方法。
(18)前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置するステップが、ガーベジ・コレクタによって時々実行され、前記方法がさらに、前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置した後に、前記From及びTo区画をスワップするステップを含む、上記(17)に記載の方法。
(19)前記データ・オブジェクトが、Java仮想マシンによるJavaクラス・ファイルの実行に応答してアクセスされる、上記(1)に記載の方法。
(20)前記第1及び第2のデータ・オブジェクトが、前記Java仮想マシン内の呼出しスタック上のアクセス連鎖内で次々に参照され、前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置するステップが、前記第1及び第2のデータ・オブジェクトが次々に参照されることの判定に応答して、前記第1及び第2のデータ・オブジェクトをメモリの連続するセグメント内でお互いの次に配置するステップを含む、上記(19)に記載の方法。
(21)前記第1及び第2のデータ・オブジェクトが、クラス・ファイル内で定義される第3のデータ・オブジェクトによって参照され、前記方法がさらに、前記クラス・ファイル内で、前記第1及び第2のデータ・オブジェクト間のアクセス関係に基づいて、前記第1データ・オブジェクトへの第1参照と前記第2データ・オブジェクトへの第2参照とを配置するステップを含む、上記(19)に記載の方法。
(22)(a)参照するデータ・オブジェクトによって参照される、複数の参照されるデータ・オブジェクトのそれぞれのアクセスの相対頻度を判定するステップと、
(b)前記複数の参照されるデータ・オブジェクトを、それらのアクセスの前記相対頻度に基づいて、オブジェクト・ヒープ内で配置するステップと
を含む、コンピュータ・メモリ内のデータを管理する方法。
(23)(a)メモリと、
(b)前記メモリ内に存在する、複数のデータ・オブジェクトを記憶するように構成されたオブジェクト・ヒープと、
(c)前記メモリ内に存在する、前記オブジェクト・ヒープ内で少なくとも第1及び第2のデータ・オブジェクトをそれらの間のアクセス関係に基づいて配置するように構成されたプログラムと
を含む装置。
(24)前記プログラムがさらに、前記第1及び第2のデータ・オブジェクトへのアクセスの間の有望な時間的近接性を判定することによって、前記第1及び第2のデータ・オブジェクトの間に前記アクセス関係が存在することを判定するように構成される、上記(23)に記載の装置。
(25)前記プログラムがさらに、前記第1及び第2のデータ・オブジェクトのアクセスの相対頻度を判定することによって、前記第1及び第2のデータ・オブジェクトの間に前記アクセス関係が存在することを判定するように構成される、上記(23)に記載の装置。
(26)前記プログラムが、第2プログラムのプロファイリングされたアクセス情報を生成するために前記第2プログラムの少なくとも一部の実行をシミュレートするように構成された第1プログラムを含む、上記(23)に記載の装置。
(27)前記第1プログラムがさらに、前記第2プログラムの実行可能コードと同一のファイルに前記プロファイリングされたアクセス情報を格納するように構成される、上記(26)に記載の装置。
(28)前記第1及び第2のデータ・オブジェクトが、複数のデータ・オブジェクトの中にあり、前記プログラムがさらに、データ・オブジェクトのサブセットを、データ・オブジェクトの前記サブセット内の各データ・オブジェクトの間のアクセス関係に基づいて、前記オブジェクト・ヒープ内のメモリの連続するセグメント内に一緒にグループ化するように構成される、上記(23)に記載の装置。
(29)前記プログラムがさらに、前記オブジェクト・グループ内の前記データ・オブジェクトのアクセスの相対頻度と、前記オブジェクト・グループ内の前記データ・オブジェクトがアクセスされる可能性が高い順序とのうちの少なくとも1つに少なくとも部分的に基づいて、前記オブジェクト・グループ内の前記データ・オブジェクトを配置するように構成される、上記(28)に記載の装置。
(30)前記オブジェクト・ヒープが、From区画とTo区画とに区分され、前記プログラムが、データ・オブジェクト間の前記アクセス関係に基づく所定の順序で、前記From区画から前記To区画へデータ・オブジェクトをコピーするように構成される、上記(23)に記載の装置。
(31)前記データ・オブジェクトが、Java仮想マシンによるJavaクラス・ファイルの実行に応答してアクセスされる、上記(23)に記載の装置。
(32)(a)オブジェクト・ヒープに格納された複数のオブジェクトからの少なくとも第1及び第2のデータ・オブジェクトを、それらの間のアクセス関係に基づいて配置するように構成されたプログラムと、
(b)前記プログラムを担持する信号担持媒体と
を含むプログラム製品。
(33)前記信号担持媒体が、記録可能媒体と伝送型媒体とのうちの少なくとも1つを含む、上記(32)に記載のプログラム製品。
【図面の簡単な説明】
【図1】本発明との一貫性を有するネットワーク化されたコンピュータ・システムのブロック図である。
【図2】図1のネットワーク化されたコンピュータ・システムからのコンピュータのハードウェア環境及びソフトウェア環境の例のブロック図である。
【図3】図2の環境のソフトウェア・コンポーネントのブロック図である。
【図4】図3のオブジェクト・アクセス・プロファイリング・ルーチンのプログラムの流れを示す流れ図である。
【図5】図3のオブジェクト・アクセス・プロファイリング・ルーチンのプログラムの流れを示す流れ図である。
【図6】図4及び図5のオブジェクト・アクセス・プロファイリング・ルーチンによって生成されるロード/ストア・カウント・テーブルの例のブロック図である。
【図7】図4及び図5のオブジェクト・アクセス・プロファイリング・ルーチンによって生成されるアクセス木の例のブロック図である。
【図8】 Javaクラス・ファイルの例のブロック図である。
【図9】図3のガーベジ・コレクション論理によって実行されるコレクタ・スレッドのプログラムの流れを示す流れ図である。
【図10】図9で参照されているルート・コピー・ルーチンのプログラムの流れを示す流れ図である。
【図11】図9で参照されているルート・コピー・ルーチンのプログラムの流れを示す流れ図である。
【図12】図9で参照されている区画スワップ・ルーチンのプログラムの流れを示す流れ図である。
【図13】図9のコレクタ・スレッドの実行中に発生する呼出しスタックの例を示すブロック図である。
【図14】図9のコレクタ・スレッドによって操作されるオブジェクト・ヒープの例を示すブロック図である。
【図15】図9のコレクタ・スレッドによって操作されるオブジェクト・ヒープの例を示すブロック図である。
【図16】図9のコレクタ・スレッドによって操作されるオブジェクト・ヒープの例を示すブロック図である。
【符号の説明】
42 コンパイラ
44 仮想マシン
46 ソース・コード
48 クラス・ファイル
50 バイトコード生成ブロック
51 クラス検証ブロック
52 オブジェクト・アクセス・プロファイリング・ブロック
54 クラス・ローダ・コンポーネント
56 オブジェクト・アクセス・プロファイリング・ブロック
58 オブジェクト・ヒープ
60 From区画
62 To区画
63 インタープリタ
64 スレッド
66 呼出しスタック
68 オブジェクト・アクセス・プロファイリング・ブロック
70 ガーベジ・コレクション論理
Claims (32)
- (a)オブジェクト・ヒープに複数のデータ・オブジェクトを格納するステップと、
(b)前記オブジェクト・ヒープ内で、少なくとも第1及び第2のデータ・オブジェクトを、該データ・オブジェクトのロード回数及びストア回数を示すロード・ストア・テーブル並びに該データ・オブジェクトの相対アクセス順序を示すアクセス順序木で表されるアクセス関係に基づいて連続するメモリ・セグメント内に配置するステップと、
(c)コンピュータ・プログラムの実行中に前記(b)に記載の配置するステップを行うトリガとなるイベントを発生させるステップと、
を含み、
前記アクセス関係は、複数のデータ・オブジェクトへのアクセス間の時間的近接性又は異なるデータ・オブジェクトのアクセスの相対頻度を含んでいることを特徴とするコンピュータ・メモリ内のデータを管理する方法。 - 前記アクセス関係が、前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップをさらに含む、請求項1に記載の方法。
- 前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記第1及び第2のデータ・オブジェクトへのアクセス間の時間的近接性を判定するステップを含む、請求項2に記載の方法。
- 前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記第1及び第2のデータ・オブジェクトが、次々にアクセスされる可能性が高いことを判定するステップを含む、請求項3に記載の方法。
- 前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記第1及び第2のデータ・オブジェクトに関するアクセスの相対頻度を判定するステップを含む、請求項2に記載の方法。
- 前記データ・オブジェクトが、コンピュータ・プログラムに応答してアクセスされ、前記アクセス関係が前記第1及び第2のデータ・オブジェクトの間に存在することを判定するステップが、前記コンピュータ・プログラムのコンパイル及びローディングのうちの少なくとも1つの間に実行される、請求項2に記載の方法。
- 前記第1及び第2のデータ・オブジェクトの間の前記アクセス関係を判定するステップが、前記コンピュータ・プログラムのためのプロファイリングされたアクセス情報を生成するために、前記コンピュータ・プログラムの少なくとも一部の実行をシミュレートするステップを含む、請求項6に記載の方法。
- 前記プロファイリングされたアクセス情報が、前記第1及び第2のデータ・オブジェクトのアクセス順序を表すアクセス順序木を含む、請求項7に記載の方法。
- 前記プロファイリングされたアクセス情報が、さらに、前記第1及び第2のデータ・オブジェクトのそれぞれのアクセス・カウントを含む、請求項8に記載の方法。
- 前記プロファイリングされたアクセス情報を前記コンピュータ・プログラムと関連付けるステップをさらに含む、請求項7に記載の方法。
- 前記プロファイリングされたアクセス情報を前記コンピュータ・プログラムと関連付けるステップが、前記プロファイリングされたアクセス情報を、前記コンピュータ・プログラムの実行可能コードと同一のファイルに格納するステップを含む、請求項10に記載の方法。
- 前記第1及び第2のデータ・オブジェクトが、複数のデータ・オブジェクトの中にあり、前記オブジェクト・ヒープ内で少なくとも前記第1及び第2のデータ・オブジェクトをそれらの間の前記アクセス関係に基づいて配置するステップが、データ・オブジェクトのサブセットを、データ・オブジェクトの前記サブセット内の各データ・オブジェクト間のアクセス関係に基づいて、前記オブジェクト・ヒープ内で一緒にオブジェクト・グループにグループ化するステップを含む、請求項1に記載の方法。
- データ・オブジェクトの前記サブセットを一緒にグループ化するステップが、データ・オブジェクトの前記サブセット内の前記データ・オブジェクトをメモリの連続するセグメントに格納するステップを含む、請求項12に記載の方法。
- 前記オブジェクト・グループ内の前記データ・オブジェクトを、それらのアクセスの相対頻度に少なくとも部分的に基づいて配置するステップをさらに含む、請求項13に記載の方法。
- 前記オブジェクト・グループ内の前記データ・オブジェクトを、前記データ・オブジェクトがアクセスされる可能性が高い順序に少なくとも部分的に基づいて配置するステップをさらに含む、請求項13に記載の方法。
- 前記複数のデータ・オブジェクトを前記オブジェクト・ヒープに格納するステップが、各データ・オブジェクトについて前記オブジェクト・ヒープ内の空間を割り振るステップを含む、請求項1に記載の方法。
- 前記オブジェクト・ヒープが、From区画とTo区画とに区分され、前記複数のデータ・オブジェクトを前記オブジェクト・ヒープに格納するステップが、コンピュータ・プログラムの実行中に前記第1及び第2のデータ・オブジェクトを前記From区画に動的に格納するステップを含み、前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置するステップが、前記第1及び第2のデータ・オブジェクトを、それらの間の前記アクセス関係に基づいたアクセス順序で、前記From区画から前記To区画にコピーするステップを含む、請求項16に記載の方法。
- 前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置するステップが、ガーベジ・コレクタによって時々実行され、前記方法がさらに、前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置した後に、前記From及びTo区画をスワップするステップを含む、請求項17に記載の方法。
- 前記データ・オブジェクトが、Java仮想マシンによるJavaクラス・ファイルの実行に応答してアクセスされる、請求項1に記載の方法。
- 前記第1及び第2のデータ・オブジェクトが、前記Java仮想マシン内の呼出しスタック上のアクセス連鎖内で次々に参照され、前記オブジェクト・ヒープ内で前記第1及び第2のデータ・オブジェクトを配置するステップが、前記第1及び第2のデータ・オブジェクトが次々に参照されることの判定に応答して、前記第1及び第2のデータ・オブジェクトをメモリの連続するセグメント内でお互いの次に配置するステップを含む、請求項19に記載の方法。
- 前記第1及び第2のデータ・オブジェクトが、クラス・ファイル内で定義される第3のデータ・オブジェクトによって参照され、前記方法がさらに、前記クラス・ファイル内で、前記第1及び第2のデータ・オブジェクト間のアクセス関係に基づいて、前記第1データ・オブジェクトへの第1参照と前記第2データ・オブジェクトへの第2参照とを配置するステップを含み、
前記アクセス関係は、相対的なアクセス頻度を含んでいることを特徴とする請求項19に記載の方法。 - (a)参照するデータ・オブジェクトによって参照される、複数の参照されるデータ・オブジェクトのそれぞれのアクセスの相対頻度を判定するステップと、
(b)前記複数の参照されるデータ・オブジェクトを該データ・オブジェクトのロード回数及びストア回数を示すロード・ストア・テーブルで表されるアクセスの前記相対頻度に基づいてオブジェクト・ヒープ内の連続するメモリ・セグメント内に配置するステップと、
(c)コンピュータ・プログラムの実行中に前記(b)に記載の配置するステップを行うトリガとなるイベントを発生させるステップと、
を含むことを特徴とするコンピュータ・メモリ内のデータを管理する方法。 - (a)メモリと、
(b)前記メモリ内に存在する、複数のデータ・オブジェクトを記憶するように構成されたオブジェクト・ヒープと、
(c)前記メモリ内に存在する、前記オブジェクト・ヒープ内で少なくとも第1及び第2のデータ・オブジェクトを該データ・オブジェクトのロード回数及びストア回数を示すロード・ストア・テーブル並びに該データ・オブジェクトの相対アクセス順序を示すアクセス順序木で表されるアクセス関係に基づいて連続するメモリ・セグメント内に配置するように構成し、かつ、その配置のトリガとなるイベントを発生させるように構成したプログラムと、
を含み、
前記アクセス関係は、複数のデータ・オブジェクトへのアクセス間の時間的近接性又は異なるデータ・オブジェクトのアクセスの相対頻度を含んでいることを特徴とする装置。 - 前記プログラムがさらに、前記第1及び第2のデータ・オブジェクトへのアクセス間の時間的近接性を判定することによって、前記第1及び第2のデータ・オブジェクトの間に前記アクセス関係が存在することを判定するように構成される、請求項23に記載の装置。
- 前記プログラムがさらに、前記第1及び第2のデータ・オブジェクトのアクセスの相対頻度を判定することによって、前記第1及び第2のデータ・オブジェクトの間に前記アクセス関係が存在することを判定するように構成される、請求項23に記載の装置。
- 前記プログラムが、第2プログラムのプロファイリングされたアクセス情報を生成するために前記第2プログラムの少なくとも一部の実行をシミュレートするように構成された第1プログラムを含む、請求項23に記載の装置。
- 前記第1プログラムがさらに、前記第2プログラムの実行可能コードと同一のファイルに前記プロファイリングされたアクセス情報を格納するように構成される、請求項26に記載の装置。
- 前記第1及び第2のデータ・オブジェクトが、複数のデータ・オブジェクトの中にあり、前記プログラムがさらに、データ・オブジェクトのサブセットを、データ・オブジェクトの前記サブセット内の各データ・オブジェクトの間の前記アクセス関係に基づいて、前記オブジェクト・ヒープ内のメモリの連続するセグメント内に一緒にグループ化するように構成される、請求項23に記載の装置。
- 前記プログラムがさらに、前記オブジェクト・グループ内の前記データ・オブジェクトのアクセスの相対頻度と、前記オブジェクト・グループ内の前記データ・オブジェクトがアクセスされる可能性が高い順序とのうちの少なくとも1つに少なくとも部分的に基づいて、前記オブジェクト・グループ内の前記データ・オブジェクトを配置するように構成される、請求項28に記載の装置。
- 前記オブジェクト・ヒープが、From区画とTo区画とに区分され、前記プログラムが、データ・オブジェクト間の前記アクセス関係に基づく所定の順序で、前記From区画から前記To区画へデータ・オブジェクトをコピーするように構成される、請求項23に記載の装置。
- 前記データ・オブジェクトが、Java仮想マシンによるJavaクラス・ファイルの実行に応答してアクセスされる、請求項23に記載の装置。
- オブジェクト・ヒープに格納された複数のオブジェクトからの少なくとも第1及び第2のデータ・オブジェクトを、該データ・オブジェクトのロード回数及びストア回数を示すロード・ストア・テーブル並びに該データ・オブジェクトの相対アクセス順序を示すアクセス順序木で表されるアクセス関係であって前記第1及び第2のデータ・オブジェクトへのアクセス間の時間的近接性又はアクセスの相対頻度を含むアクセス関係に基づいて連続するメモリ・セグメント内に配置するように構成し、かつ、その配置のトリガとなるイベントを発生させるように構成したプログラムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/298,123 US6480862B1 (en) | 1999-04-23 | 1999-04-23 | Relation-based ordering of objects in an object heap |
US09/298123 | 1999-04-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000322315A JP2000322315A (ja) | 2000-11-24 |
JP3659317B2 true JP3659317B2 (ja) | 2005-06-15 |
Family
ID=23149150
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000116852A Expired - Lifetime JP3659317B2 (ja) | 1999-04-23 | 2000-04-18 | データを管理する方法及び装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6480862B1 (ja) |
JP (1) | JP3659317B2 (ja) |
KR (1) | KR100384905B1 (ja) |
Families Citing this family (75)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6629112B1 (en) * | 1998-12-31 | 2003-09-30 | Nortel Networks Limited | Resource management for CORBA-based applications |
US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US6826748B1 (en) | 1999-01-28 | 2004-11-30 | Ati International Srl | Profiling program execution into registers of a computer |
US7013456B1 (en) * | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US6594678B1 (en) * | 2000-01-05 | 2003-07-15 | Sun Microsystems, Inc. | Methods and apparatus for improving locality of reference through memory management |
US6823351B1 (en) * | 2000-05-15 | 2004-11-23 | Sun Microsystems, Inc. | Work-stealing queues for parallel garbage collection |
US7487152B1 (en) * | 2000-05-31 | 2009-02-03 | International Business Machines Corporation | Method for efficiently locking resources of a global data repository |
US6760815B1 (en) * | 2000-06-02 | 2004-07-06 | Sun Microsystems, Inc. | Caching mechanism for a virtual heap |
US6934755B1 (en) | 2000-06-02 | 2005-08-23 | Sun Microsystems, Inc. | System and method for migrating processes on a network |
US6763440B1 (en) * | 2000-06-02 | 2004-07-13 | Sun Microsystems, Inc. | Garbage collection using nursery regions for new objects in a virtual heap |
US6854115B1 (en) * | 2000-06-02 | 2005-02-08 | Sun Microsystems, Inc. | Process persistence in a virtual machine |
US6865585B1 (en) * | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6959440B1 (en) * | 2000-08-02 | 2005-10-25 | Intel Corporation | Dynamic removal of a driver stack when a parent driver uses a child driver |
US6757890B1 (en) * | 2000-12-28 | 2004-06-29 | Sun Microsystems, Inc. | Methods and apparatus for enabling local Java object allocation and collection |
US6820101B2 (en) * | 2000-12-28 | 2004-11-16 | Sun Microsystems, Inc. | Methods and apparatus for optimizing garbage collection using separate heaps of memory for storing local objects and non-local objects |
GB0107921D0 (en) * | 2001-03-30 | 2001-05-23 | Ibm | Computer system with multiple heaps and heap reset facility |
US7017152B2 (en) * | 2001-04-06 | 2006-03-21 | Appmind Software Ab | Method of detecting lost objects in a software system |
US6959430B2 (en) * | 2001-05-09 | 2005-10-25 | Sun Microsystems, Inc. | Specialized heaps for creation of objects in object-oriented environments |
US6934741B2 (en) * | 2001-06-27 | 2005-08-23 | Sun Microsystems, Inc. | Globally distributed load balancing |
US7103887B2 (en) * | 2001-06-27 | 2006-09-05 | Sun Microsystems, Inc. | Load-balancing queues employing LIFO/FIFO work stealing |
US7072911B1 (en) * | 2001-07-27 | 2006-07-04 | Novell, Inc. | System and method for incremental replication of changes in a state based distributed database |
US7113980B2 (en) | 2001-09-06 | 2006-09-26 | Bea Systems, Inc. | Exactly once JMS communication |
US7398531B2 (en) * | 2002-05-07 | 2008-07-08 | Oracle International Corporation | Providing common memory management code to objects that are instances of different classes |
US7076511B1 (en) * | 2002-05-07 | 2006-07-11 | Oracle International Corporation | Simplified deallocation of memory for programming objects |
US7174354B2 (en) * | 2002-07-31 | 2007-02-06 | Bea Systems, Inc. | System and method for garbage collection in a computer system, which uses reinforcement learning to adjust the allocation of memory space, calculate a reward, and use the reward to determine further actions to be taken on the memory space |
US7424498B1 (en) | 2003-06-30 | 2008-09-09 | Data Domain, Inc. | Probabilistic summary data structure based encoding for garbage collection |
US7451168B1 (en) | 2003-06-30 | 2008-11-11 | Data Domain, Inc. | Incremental garbage collection of data in a secondary storage |
US7624137B2 (en) * | 2004-01-05 | 2009-11-24 | International Business Machines Corporation | Method and apparatus for scheduling and performing garbage collection in a real-time system with guaranteed space bounds |
US7519639B2 (en) * | 2004-01-05 | 2009-04-14 | International Business Machines Corporation | Method and apparatus for dynamic incremental defragmentation of memory |
US20050203919A1 (en) * | 2004-03-09 | 2005-09-15 | Deutsch L. P. | Method and apparatus for reordering an arbitrary order signal sequence into a streamable signal sequence |
US9092558B2 (en) * | 2004-04-05 | 2015-07-28 | International Business Machines Corporation | Grouping frequently referenced data items to co-locate for cache utilization |
US7412465B2 (en) * | 2004-04-06 | 2008-08-12 | International Business Machines Corporation | Method for append mode insertion of rows into tables in database management systems |
US7769974B2 (en) * | 2004-09-10 | 2010-08-03 | Microsoft Corporation | Increasing data locality of recently accessed resources |
JP4719859B2 (ja) * | 2004-09-14 | 2011-07-06 | 国立大学法人京都大学 | データ処理方法、データ処理装置及びコンピュータプログラム |
US7406597B2 (en) * | 2004-10-29 | 2008-07-29 | International Business Machines Corporation | Methods for efficiently authenticating multiple objects based on access patterns |
US8452938B1 (en) * | 2004-12-30 | 2013-05-28 | Azul Systems, Inc. | Garbage collection with memory quick release |
US7870265B2 (en) * | 2005-06-30 | 2011-01-11 | Oracle International Corporation | System and method for managing communications sessions in a network |
CN101346634B (zh) * | 2005-11-04 | 2012-10-24 | 甲骨文国际公司 | 用于通信网络中的网守的系统和方法 |
US7895223B2 (en) * | 2005-11-29 | 2011-02-22 | Cisco Technology, Inc. | Generating search results based on determined relationships between data objects and user connections to identified destinations |
US8171466B2 (en) * | 2006-05-16 | 2012-05-01 | Oracle International Corporation | Hitless application upgrade for SIP server architecture |
US8112525B2 (en) * | 2006-05-16 | 2012-02-07 | Oracle International Corporation | Engine near cache for reducing latency in a telecommunications environment |
US8001250B2 (en) * | 2006-05-16 | 2011-08-16 | Oracle International Corporation | SIP and HTTP convergence in network computing environments |
US8219697B2 (en) * | 2006-05-17 | 2012-07-10 | Oracle International Corporation | Diameter protocol and SH interface support for SIP server architecture |
US20080005520A1 (en) * | 2006-06-09 | 2008-01-03 | Siegwart David K | Locality with parallel hierarchical copying garbage collection |
US7661027B2 (en) * | 2006-10-10 | 2010-02-09 | Bea Systems, Inc. | SIP server architecture fault tolerance and failover |
US20080086567A1 (en) * | 2006-10-10 | 2008-04-10 | Bea Systems, Inc. | SIP server architecture for improving latency in message processing |
US20080148241A1 (en) * | 2006-10-11 | 2008-06-19 | Scott Thomas Jones | Method and apparatus for profiling heap objects |
US9667430B2 (en) * | 2006-12-13 | 2017-05-30 | Oracle International Corporation | System and method for a SIP server with offline charging |
US8078737B2 (en) * | 2006-12-13 | 2011-12-13 | Oracle International Corporation | System and method for efficient storage of long-lived session state in a SIP server |
US20080147551A1 (en) * | 2006-12-13 | 2008-06-19 | Bea Systems, Inc. | System and Method for a SIP Server with Online Charging |
US7895475B2 (en) * | 2007-07-11 | 2011-02-22 | Oracle International Corporation | System and method for providing an instrumentation service using dye injection and filtering in a SIP application server environment |
JP2009266113A (ja) * | 2008-04-28 | 2009-11-12 | Internatl Business Mach Corp <Ibm> | メモリ管理方法およびシステム |
US8788460B2 (en) * | 2008-06-12 | 2014-07-22 | Microsoft Corporation | Exploring attached and unattached content databases |
US8635188B2 (en) * | 2008-06-12 | 2014-01-21 | Microsoft Corporation | Techniques for extracting data from content databases |
US20090327377A1 (en) * | 2008-06-26 | 2009-12-31 | Tatu Ylonen Oy Ltd | Copying entire subgraphs of objects without traversing individual objects |
US7937419B2 (en) * | 2008-06-26 | 2011-05-03 | Tatu Ylonen Oy | Garbage collection via multiobjects |
US20100070959A1 (en) * | 2008-09-17 | 2010-03-18 | International Business Machines Corporation | Dynamic improved executables |
JP5278901B2 (ja) * | 2008-10-24 | 2013-09-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 頻繁に発生するイベントを推定する方法 |
JP2010108409A (ja) * | 2008-10-31 | 2010-05-13 | Hitachi Ltd | ストレージ管理方法及び管理サーバ |
US20100161687A1 (en) * | 2008-12-24 | 2010-06-24 | International Business Machines Corporation | System and method for optimizing garbage collection with allocation modifiers |
US20100293206A1 (en) * | 2009-05-12 | 2010-11-18 | Tatu Ylonen Oy Ltd | Clustering related objects during garbage collection |
US8868853B2 (en) | 2009-08-12 | 2014-10-21 | Nec Corporation | Data processing device, data recording method and data recording program |
JP5883300B2 (ja) * | 2012-02-02 | 2016-03-09 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | オブジェクトを特定するためのハッシュコードを生成するための方法、プログラム及びシステム |
US20140304478A1 (en) * | 2013-04-05 | 2014-10-09 | Nec Laboratories America, Inc. | Space Reclamation of Objects in a Persistent Cache |
US9430153B2 (en) * | 2014-10-22 | 2016-08-30 | International Business Machines Corporation | Garbage collection and other management of memory heaps |
JP2017004469A (ja) * | 2015-06-16 | 2017-01-05 | 富士通株式会社 | 基地局装置、処理方法、プログラム、無線通信システム、及び、基地局処理カード |
US11593262B1 (en) | 2018-04-25 | 2023-02-28 | Seagate Technology Llc | Garbage collection command scheduling |
US11194714B2 (en) * | 2020-03-31 | 2021-12-07 | International Business Machines Corporation | Deep object graph traversal |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5088036A (en) * | 1989-01-17 | 1992-02-11 | Digital Equipment Corporation | Real time, concurrent garbage collection system and method |
JPH044429A (ja) * | 1990-04-23 | 1992-01-08 | Nec Corp | 仮想記憶システムにおける自動再配置リンク方式 |
JP2920660B2 (ja) * | 1990-06-07 | 1999-07-19 | 富士ゼロックス株式会社 | ガーベッジコレクションシステムにおけるアクセス可能なオブジェクトの判別方法 |
US5742809A (en) * | 1990-08-31 | 1998-04-21 | Fujitsu Limited | Database generic composite structure processing system |
JP3628032B2 (ja) * | 1992-06-15 | 2005-03-09 | マイクロソフト コーポレーション | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 |
JPH06214803A (ja) * | 1993-01-18 | 1994-08-05 | Nec Corp | 仮想空間ブロック配置方式 |
JP3520527B2 (ja) * | 1993-06-25 | 2004-04-19 | ソニー株式会社 | データ管理方法 |
JPH07129410A (ja) * | 1993-11-05 | 1995-05-19 | Fujitsu Ltd | コンパイラにおけるメモリ割り付け方法 |
US5799268A (en) * | 1994-09-28 | 1998-08-25 | Apple Computer, Inc. | Method for extracting knowledge from online documentation and creating a glossary, index, help database or the like |
US5721915A (en) * | 1994-12-30 | 1998-02-24 | International Business Machines Corporation | Interaction between application of a log and maintenance of a table that maps record identifiers during online reorganization of a database |
JPH08263381A (ja) * | 1995-03-27 | 1996-10-11 | Nec Corp | 仮想記憶システムにおける自動再配置リンク方式 |
US5787447A (en) * | 1995-05-08 | 1998-07-28 | Sun Microsystems, Inc. | Memory allocation maintaining ordering across multiple heaps |
FR2736737B1 (fr) * | 1995-07-12 | 1997-08-14 | Alcatel Nv | Dispositif de gestion de relations entre des objets |
JPH0962574A (ja) * | 1995-08-28 | 1997-03-07 | Mitsubishi Electric Corp | メモリ・アドレス割り付け方法 |
US5940621A (en) * | 1996-01-23 | 1999-08-17 | Hewlett-Packard Company | Language independent optimal size-based storage allocation |
US5778378A (en) * | 1996-04-30 | 1998-07-07 | International Business Machines Corporation | Object oriented information retrieval framework mechanism |
US6138123A (en) * | 1996-07-25 | 2000-10-24 | Rathbun; Kyle R. | Method for creating and using parallel data structures |
JP3425069B2 (ja) * | 1996-10-28 | 2003-07-07 | 富士通株式会社 | バイナリ・プログラム変換装置および方法 |
US5822759A (en) * | 1996-11-22 | 1998-10-13 | Versant Object Technology | Cache system |
US6038566A (en) * | 1996-12-04 | 2000-03-14 | Tsai; Daniel E. | Method and apparatus for navigation of relational databases on distributed networks |
US5974421A (en) * | 1996-12-23 | 1999-10-26 | Microsoft Corporation | Cache-efficient object loader |
JPH10320263A (ja) * | 1997-05-22 | 1998-12-04 | Fujitsu Ltd | Gcアタッチメント装置及びプログラム記憶媒体 |
US6199075B1 (en) * | 1997-05-30 | 2001-03-06 | Sun Microsystems, Inc. | Method and apparatus for generational garbage collection of a heap memory shared by multiple processors |
US5995973A (en) * | 1997-08-29 | 1999-11-30 | International Business Machines Corporation | Storing relationship tables identifying object relationships |
JP3177950B2 (ja) * | 1997-09-19 | 2001-06-18 | 日本電気株式会社 | キャッシュ最適化処理方法およびキャッシュ最適化処理プログラムを記録した記録媒体 |
US6330556B1 (en) * | 1999-03-15 | 2001-12-11 | Trishul M. Chilimbi | Data structure partitioning to optimize cache utilization |
-
1999
- 1999-04-23 US US09/298,123 patent/US6480862B1/en not_active Expired - Lifetime
-
2000
- 2000-04-18 JP JP2000116852A patent/JP3659317B2/ja not_active Expired - Lifetime
- 2000-04-21 KR KR10-2000-0021291A patent/KR100384905B1/ko not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
KR20010007010A (ko) | 2001-01-26 |
US6480862B1 (en) | 2002-11-12 |
JP2000322315A (ja) | 2000-11-24 |
KR100384905B1 (ko) | 2003-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3659317B2 (ja) | データを管理する方法及び装置 | |
US6330556B1 (en) | Data structure partitioning to optimize cache utilization | |
US6321240B1 (en) | Data structure partitioning with garbage collection to optimize cache utilization | |
US6845437B2 (en) | Computer system with heap and card table | |
US7263700B1 (en) | Serially, reusable virtual machine | |
US6701520B1 (en) | Preventing garbage collection of objects in object oriented computer programming languages | |
US20040123278A1 (en) | Persistent cache apparatus and methods | |
US11573894B2 (en) | Tracking garbage collection states of references | |
AU2754001A (en) | Methods and apparatus for improving locality of reference through memory management | |
US20070156967A1 (en) | Identifying delinquent object chains in a managed run time environment | |
Richter | Garbage collection: Automatic memory management in the Microsoft .NET Framework | |
EP4341818A1 (en) | Write barrier for remembered set maintenance in generational z garbage collector | |
Fritchie | A study of Erlang ETS table implementations and performance | |
US20200142677A1 (en) | Fields Hotness Based Object Splitting | |
US11789863B2 (en) | On-the-fly remembered set data structure adaptation | |
US11573794B2 (en) | Implementing state-based frame barriers to process colorless roots during concurrent execution | |
US11875193B2 (en) | Tracking frame states of call stack frames including colorless roots | |
US11513954B2 (en) | Consolidated and concurrent remapping and identification for colorless roots | |
Willard et al. | Autonomous garbage collection: resolving memory leaks in long-running server applications | |
Taware | Cold object identification and segregation via application profiling | |
Meehan et al. | Java garbage collection—a generic solution? | |
Lam et al. | Being Lazy When It Counts: Practical Constant-Time Memory Management for Functional Programming | |
Brown | Memory Management on a Massively Parallel Capability Architecture | |
Nasartschuk | Improving virtual machines using string deduplication and internal object pools | |
WO2022245954A1 (en) | Write barrier for remembered set maintenance in generational z garbage collector |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20040126 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20040126 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20040126 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20040227 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040428 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040810 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041012 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20041018 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041130 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041206 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050201 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050203 |
|
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: 20050301 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20050301 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050308 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090325 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100325 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110325 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110325 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120325 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130325 Year of fee payment: 8 |