JP2000322315A - データを管理する方法及び装置 - Google Patents
データを管理する方法及び装置Info
- Publication number
- JP2000322315A JP2000322315A JP2000116852A JP2000116852A JP2000322315A JP 2000322315 A JP2000322315 A JP 2000322315A JP 2000116852 A JP2000116852 A JP 2000116852A JP 2000116852 A JP2000116852 A JP 2000116852A JP 2000322315 A JP2000322315 A JP 2000322315A
- 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.)
- Granted
Links
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 Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
によって、オブジェクト・ヒープにアクセスする際のコ
ンピュータの性能を改良する方法を提供する。 【解決手段】 装置、プログラム製品及び方法が、デー
タ・オブジェクト間のアクセス関係に基づいて(たとえ
ば、アクセスの時間的近接性または相対頻度に基づい
て)オブジェクト・ヒープ内のデータ・オブジェクトを
編成する。そうすることによって、互いに密に連続して
アクセスされるデータ・オブジェクトが、互いに同一ペ
ージ内に配置され、おそらくは同一のキャッシュ・ライ
ン内に配置される可能性が高まる。その結果、そのよう
なオブジェクトにアクセスする時に、多重レベル・メモ
リ・アーキテクチャ内(たとえば、特定のアーキテクチ
ャに応じて、特定のキャッシュ・メモリ内または仮想メ
モリ方式内)でのメモリ・スワッピングの頻度が、しば
しば低下し、システム性能の総合的な改善がもたらされ
る。
Description
ュータ及びコンピュータ・ソフトウェアに関する。具体
的には、本発明は、全般的にオブジェクト・ヒープ内の
オブジェクトの管理に関する。
などのデータ処理システムの性能及び信頼性にとって非
常に重要である。具体的に言うと、コンピュータ・プロ
グラムによって使用されるデータは、通常は、コンピュ
ータ内で、限られたアドレス空間を有するメモリ内に記
憶される。多くのコンピュータでは、データは、「オブ
ジェクト・ヒープ」と称するメモリの部分に割り当てら
れた空間である「オブジェクト」の形で記憶される。オ
ブジェクトには、しばしば、他のオブジェクトへの「参
照」(ポインタとも称する)が含まれ、その結果、コン
ピュータ・プログラムが、あるオブジェクトからの参照
に従うことによって別のオブジェクトの情報にアクセス
できるようになる。通常、各コンピュータ・プログラム
は、それ自体のオブジェクト・ヒープを有するので、複
数のコンピュータ・プログラムが1台のコンピュータで
活動状態になっている場合には、複数のオブジェクト・
ヒープが、そのコンピュータ内で維持される可能性があ
る。
を使用する時には、必ず、空きメモリの一部が、メモリ
「割振り」と称する処理を使用してそのデータのために
予約される。コンピュータ内で使用可能なメモリの量が
限られているので、もはやコンピュータによって使用さ
れなくなったデータのために予約されたメモリを解放ま
たは「割振り解除」することが重要である。そうしなけ
れば、使用可能メモリが使い果たされると、コンピュー
タの性能が、通常は低下し、また、システム障害が発生
する場合がある。
・プログラムが、コンピュータ内の他のコンピュータ・
プログラムによって割り当てられた未使用メモリを解放
するために使用されることがよくある。しばしば、ガー
ベジ・コレクタは、他のコンピュータ・プログラムと並
列に動作して、オブジェクト・ヒープ全体を周期的に走
査し、未使用オブジェクトに割り振られているメモリを
割振り解除する(オブジェクトの「収集」とも称する処
理)。コンピュータ内で並列に動作する異なるコンピュ
ータ・プログラムには、互いに並列に実行される1つま
たは複数の「スレッド」が含まれることがしばしばであ
る。さらに、異なるコンピュータ・プログラムが異なる
オブジェクト・ヒープを使用する時には、コレクタ・ス
レッドとも称する別々のガーベジ・コレクタ・コンピュ
ータ・プログラムが、各オブジェクト・ヒープの管理に
使用される場合がある。
が、コピー型(copying)ガーベジ・コレクタであり、
これは、オブジェクト・ヒープを「from空間」と「to空
間」の区画に区分し、有効で現在使用されているオブジ
ェクトをfrom空間からto空間にコピーし、効果的に未使
用のオブジェクトを後に残すことによって、オブジェク
ト・ヒープを管理する。コピー型ガーベジ・コレクタの
具体的な実施形態が、生成型(generational)ガーベジ
・コレクタであり、これは、オブジェクト・ヒープをne
w区画とold区画に区分する。生成型ガーベジ・コレクタ
は、新しいオブジェクトが古いオブジェクトより頻繁に
「死ぬ」すなわち使用されなくなる傾向に依存する。言
い換えれば、オブジェクトは、長時間にわたって使用さ
れるにつれて、使用されなくなる可能性がますます低く
なる。
ト・ヒープのnew区画の新しいオブジェクトを繰り返し
走査し、もはや使用中でないオブジェクトのためのメモ
リを破棄し、割振り解除し、閾時間期間を超えて生存す
るオブジェクトをオブジェクト・ヒープのold区画に移
動することによって、オブジェクト・ヒープを管理す
る。古いオブジェクトはより安定する傾向を有すると仮
定すると、通常、オブジェクト・ヒープのold区画の走
査は不要である。
形の形すなわち、各オブジェクトがold区画への移動の
判断基準に合致することが判明するたびに次々に、オブ
ジェクトをオブジェクト・ヒープのold区画に格納す
る。同様に、オブジェクト・ヒープのnew区画内のオブ
ジェクトは、通常は、ガーベジ・コレクタによる割振り
解除及びオブジェクトの移動と、ある時点で区画内で使
用可能な位置への新しいオブジェクトの追加とに起因し
て、new区画全体に広く分散する。
コピー型ガーベジ・コレクタ実施形態でも、線形の形で
from空間からto空間にオブジェクトがコピーされる。し
かし、ガーベジ・コレクタ以外のプロセスによって行わ
れるfrom空間内の割振りとオブジェクトの初期配置に関
して、オブジェクトは、これらのコピー型ガーベジ・コ
レクタ実施形態でもfrom空間全体に広く分散する傾向を
有する。
納する通常の形に固有の結果は、コンピュータ・プログ
ラムによって使用されるさまざまなオブジェクトが、時
間に伴ってオブジェクト・ヒープ全体に広く分散するよ
うになる可能性があることである。しかし、オブジェク
ト・ヒープ内でのオブジェクトの比較的広い分散は、メ
モリ・スワッピング問題に起因する、コンピュータの最
適でない性能をもたらす可能性がある。
は、多重レベル・メモリ・アーキテクチャに依存して、
メモリ性能とコストのバランスをとっている。ほとんど
のコンピュータには、1つまたは複数のレベルの、小容
量で高速のキャッシュ・メモリと、それにインターフェ
ースされた、大容量だが比較的低速の主記憶が含まれ
る。コンピュータ・プログラムがデータを必要とする時
に、データは、コンピュータ内のプロセッサによるアク
セスのために主記憶からキャッシュ・メモリにコピーさ
れる。データは、通常はブロックまたは「キャッシュ・
ライン」に編成され、特定のキャッシュ・ラインに割り
振られたデータのすべてが、グループとしてキャッシュ
との間でスワップされる。
ング可能な記憶空間が、主記憶に使用可能な物理的記憶
域より大きい、仮想記憶方式が実装されている。キャッ
シングに似て、仮想記憶方式では、データがページに編
成され、データは、主記憶と、直接アクセス記憶装置
(DASD)などの外部記憶装置との間でページ単位で
スワップされる。
な利益は、より頻繁に使用されるデータを、しばしば、
より高いレベルのメモリ内に維持することができ、その
結果、そのデータによりすばやくアクセスできることで
ある。キャッシュ・メモリからアクセスされるデータ
が、現在キャッシュ・メモリ内に格納されていないキャ
ッシュ・ラインに割り振られている時には、必ずキャッ
シュ・ミスが発生し、そのデータの取出は、より低いレ
ベルのメモリからデータを取り出さなければならないの
で長時間を要する。同様に、主記憶からアクセスされる
データが、現在主記憶内に格納されていないページに割
り振られている時には、必ずページ・フォルトが発生
し、そのデータの取出は、そのデータを外部記憶装置か
らスワップ・インしなければならないので長時間を要す
る。
ャッシュ・ラインを占め、多くの場合に、複数のページ
を占める。その結果、オブジェクト・ヒープ内のオブジ
ェクトが比較的広く分散している状態では、オブジェク
ト・ヒープ内の異なる位置に配置されたオブジェクトへ
の連続するアクセスが、各キャッシュ・メモリ内と、お
そらくは主記憶内でのかなりの量のメモリ・スワップを
必要とする可能性がある。その結果、オブジェクト・ヒ
ープへのアクセスは長時間を要する傾向を有し、コンピ
ュータは、ピーク効率より低い効率で動作する。
野には、特に改良されたガーベジ・コレクション技法に
よって、オブジェクト・ヒープにアクセスする際のコン
ピュータの性能を改良する方法に対する実質的な必要が
存在する。
ジェクト間のアクセス関係に基づいてオブジェクト・ヒ
ープ内のデータ・オブジェクトを編成する装置、プログ
ラム製品及び方法を提供することによって、従来技術に
関連する上記及び他の問題に対処する。それを行うこと
によって、互いに密に連続してアクセスされるデータ・
オブジェクトが、互いに同一のページ内に配置される可
能性が高まり、おそらくは同一のキャッシュ・ラインに
配置される可能性が高まる。その結果、そのようなオブ
ジェクトにアクセスする時に、多重レベル・メモリ・ア
ーキテクチャ内(たとえば、具体的なアーキテクチャに
応じて、特定のキャッシュ・メモリ内または仮想記憶方
式内)のメモリ・スワッピングの頻度が、しばしば低下
し、システム性能の総合的な改善がもたらされる。
ス関係は、少なくとも部分的には、そのようなデータ・
オブジェクトへのアクセスの有望な時間的近接性、たと
えば、コンピュータ・プログラムの実行中にオブジェク
トのグループが通常は次々とアクセスされる時に基づく
ものとすることができる。複数のデータ・オブジェクト
の間のアクセス関係は、少なくとも部分的に、異なるデ
ータ・オブジェクトのアクセスの相対頻度に基づくもの
とすることもできる。アクセス関係を定義する他の形
は、本明細書に示された開示を読めば、当業者には明白
になる。
・ヒープ内のデータ・オブジェクトの順序付けが、コン
ピュータ・プログラムによって使用されるデータ・オブ
ジェクトの異なるクラスについて生成された、プロファ
イリングされたアクセス情報に頼る。このプロファイリ
ングは、コンピュータ・プログラムのコンパイル中、ロ
ード中または実行中を含む、さまざまな時に実行するこ
とができる。通常、データ・オブジェクトへのアクセス
の回数またはデータ・オブジェクトがアクセスされる順
序などの情報は、予測することができ、オブジェクト・
ヒープ内でデータ・オブジェクトを順序付ける方法の決
定に使用することができる。
環境図面を参照すると、複数の図面を通じて同様の符号
によって同様の部分が表されているが、図1には、本発
明との一貫性を有するコンピュータ・システム10が示
されている。コンピュータ・システム10は、ネットワ
ーク18を介してサーバ16(たとえば、PCベースの
サーバ、ミニコンピュータ、ミッドレンジ・コンピュー
タ、メインフレーム・コンピュータなど)に結合された
1つまたは複数のクライアント・コンピュータ12、1
4及び20(たとえば、デスクトップ・コンピュータま
たはPCベースのコンピュータ、ワークステーションな
ど)を含むネットワーク化されたコンピュータ・システ
ムとして図示されている。ネットワーク18は、ローカ
ル・エリア・ネットワーク、広域ネットワーク、無線ネ
ットワーク及び公衆ネットワーク(たとえばインターネ
ット)を含むがこれに制限されない、事実上すべての種
類のネットワーク化相互接続を表すことができる。さら
に、たとえば複数のサーバなど、任意の台数のコンピュ
ータ及び他の装置を、ネットワーク18を介してネット
ワーク化することができる。
イアント・コンピュータ12及び14に類似するものと
することができるが、これには、とりわけ、中央処理装
置(CPU)21、コンピュータ表示装置22などの複
数の周辺構成要素、記憶装置23、プリンタ24及びさ
まざまな入力装置(たとえばマウス26及びキーボード
27)を含めることができる。サーバ16は、当技術分
野で周知の通り、通常はより高い処理性能とより大きい
記憶容量を有するが、同様に構成することができる。
0のハードウェア及びソフトウェアの環境の例を別の形
で示す図である。本発明の目的のために、装置30は、
事実上すべての種類のコンピュータ、コンピュータ・シ
ステムまたは他のプログラム可能電子装置を表すことが
でき、これには、クライアント・コンピュータ(たとえ
ば、図1のクライアント・コンピュータ12、14及び
20に類似の)、サーバ・コンピュータ(たとえば、図
1のサーバ16に類似の)、ポータブル・コンピュー
タ、組込みコントローラなどが含まれる。装置30は、
図1に示された形でネットワークに結合することがで
き、代替形態では、独立型の装置とすることができる。
装置30を、以下では「コンピュータ」と呼称するが、
用語「装置」は、本発明との一貫性を有する、他の適当
なプログラム可能電子装置を含むことができることを諒
解されたい。
2に結合された少なくとも1つのプロセッサ31が含ま
れる。プロセッサ31は、1つまたは複数のプロセッサ
(たとえばマイクロプロセッサ)を表すことができ、メ
モリ32は、既知の多重レベル・メモリ・アーキテクチ
ャのいずれかを使用して実装することができ、これに
は、たとえば、ランダム・アクセス・メモリ(RAM)
デバイスを使用して実装される主記憶32aと、たとえ
ば1つまたは複数のレベルのキャッシュ・メモリ32b
(プロセッサ31の内部または外部)ならびにさまざま
な不揮発性メモリまたはバックアップ・メモリ(たとえ
ば、プログラム可能メモリまたはフラッシュ・メモリ)
及び読取専用メモリなどの1つまたは複数の補助レベル
のメモリが含まれる。当技術分野で既知の通り、データ
は、主記憶とキャッシュ・メモリの間及び「キャッシュ
・ライン」の形で異なるレベルのキャッシュ・メモリの
間でスワップされ、特定のレベルのキャッシュに存在し
ないデータへのアクセスは、「キャッシュ・ミス」と、
別のレベルのメモリからの必要なデータの取出しに関連
する追加の遅延をもたらす。
明したように)キャッシュ・メモリまたはプロセッサ3
1内のレジスタなど、物理的にコンピュータ30内の別
の場所に配置されるメモリ記憶域ならびに、たとえば大
容量記憶装置36上またはネットワーク38を介してコ
ンピュータ30に結合される別のコンピュータ上に格納
されるものなどの仮想記憶として使用される記憶容量を
含むものと考えることができる。当技術分野で既知の通
り、仮想記憶アーキテクチャを用いると、データは、大
容量記憶装置と主記憶の間で「ページ」の形でスワップ
され、主記憶に存在しないデータへのアクセスは、「ペ
ージ・フォルト」と、外部記憶装置からの必要なデータ
の取出に関連する追加の遅延をもたらす。
を通信するために、複数の入力及び出力も受け取る。ユ
ーザまたは操作員とのインターフェースのために、コン
ピュータ30には、通常は、1つまたは複数のユーザ入
力装置33(たとえば、とりわけ、キーボード、マウ
ス、トラックボール、ジョイスティック、タッチパッド
またはマイクロフォン)と、表示装置34(たとえば、
とりわけ、CRTモニタ、LCD表示パネルまたはスピ
ーカ)が含まれる。しかし、たとえばいくつかのサーバ
実施形態など、コンピュータ30のいくつかの実施形態
では、直接のユーザ入出力がコンピュータによってサポ
ートされない場合があることを諒解されたい。
には、1つまたは複数の大容量記憶装置36、たとえ
ば、とりわけ、フロッピまたは他の取外し可能ディスク
駆動装置、ハード・ディスク装置、直接アクセス記憶装
置(DASD)、光ディスク駆動装置(たとえば、CD
駆動装置、DVD駆動装置など)または、テープ駆動装
置も含めることができる。さらに、コンピュータ30に
は、ネットワークに結合された他のコンピュータとの情
報の通信を可能にするために、1つまたは複数のネット
ワーク38(たとえば、とりわけ、LAN、WAN、無
線ネットワークまたはインターネット)とのインターフ
ェースを含めることができる。コンピュータ30には、
通常は、当技術分野で周知の通り、プロセッサ31とメ
モリ32、ユーザ入力装置33、表示装置34、大容量
記憶装置36及びネットワーク38のそれぞれとの間の
アナログまたはディジタルの適当なインターフェースが
含まれることを諒解されたい。
システム40の制御下で動作し、さまざまなコンピュー
タ・ソフトウェア・アプリケーション、コンポーネン
ト、プログラム、オブジェクト、モジュール、データ構
造など(たとえば、とりわけ、コンパイラ42、仮想マ
シン44、ソース・コード46及びクラス・ファイル4
8)を実行するか、他の方法でこれらを利用する。さら
に、さまざまなアプリケーション、コンポーネント、プ
ログラム、オブジェクト、モジュールなどは、たとえば
分散コンピューティング環境またはクライアント−サー
バ・コンピューティング環境など、ネットワーク38を
介してコンピュータ30に結合された別のコンピュータ
内の1つまたは複数のプロセッサ上で実行でき、これに
よって、コンピュータ・プログラムの機能を実装するの
に必要な処理を、ネットワーク上の複数のコンピュータ
に割り振ることができる。
実行されるルーチンは、オペレーティング・システムの
一部として実装されるものであれ、特定のアプリケーシ
ョン、コンポーネント、プログラム、オブジェクト、モ
ジュールまたは命令のシーケンスとして実装されるもの
であれ、本明細書では「コンピュータ・プログラム」ま
たは単に「プログラム」と呼称する。コンピュータ・プ
ログラムには、通常は、さまざまな時点でコンピュータ
内のさまざまなメモリ及び記憶装置に存在し、コンピュ
ータ内の1つまたは複数のプロセッサによって読み取ら
れ、実行される時に、そのコンピュータに本発明のさま
ざまな態様を実施するステップまたは要素を実行するの
に必要なステップを実行させる、1つまたは複数の命令
が含まれる。さらに、本明細書では、完全に機能するコ
ンピュータ及びコンピュータ・システムに関して本発明
を説明するが、本発明のさまざまな実施形態が、さまざ
まな形のプログラム製品として配布可能であり、本発明
が、配布の実行に実際に使用される信号担持媒体の特定
の種類に無関係に同等に適用されることを、当業者は諒
解するであろう。信号担持媒体の例には、とりわけ、揮
発性及び不揮発性のメモリ・デバイス、フロッピ及び他
の取外し可能ディスク、ハード・ディスク装置、光ディ
スク(たとえば、CD−ROM、DVDなど)などの記
録可能型媒体と、ディジタル通信リンク及びアナログ通
信リンクなどの伝送型媒体とが含まれるが、これに制限
されない。
ラムは、本発明の特定の実施形態でそれらが実施される
目的の応用分野に基づいて識別することができる。しか
し、以下の特定のプログラムの命名法は、単に便宜のた
めに使用されるものであり、したがって、本発明は、そ
のような命名法によって識別または暗示される特定の応
用分野だけでの使用に制限されないことを諒解された
い。
明を制限する目的のものでないことを、当業者は諒解す
るであろう。実際、当業者は、他の代替ハードウェアま
たはソフトウェア環境を、本発明の範囲から逸脱せずに
使用することができることを諒解するであろう。
ジェクト間のアクセス関係に基づいてオブジェクト・ヒ
ープ内のデータ・オブジェクトを編成することによって
動作する。オブジェクト・ヒープには、コンピュータ・
プログラムのための作業メモリを表すコンピュータ・メ
モリのどのセグメントでも含めることができ、通常は、
コンピュータ・プログラムの実行中にデータが動的に割
り振られ、使用され、管理されるメモリのセグメントを
含めることができる。必ずではないが、通常、オブジェ
クト・ヒープは、ガーベジ・コレクタによって管理さ
れ、ガーベジ・コレクタは、ガーベジ・コレクションが
実行される時には必ず、コンピュータ・プログラムと並
列に走行するか、コンピュータ・プログラムの実行を停
止させる「ストップ・ザ・ワールド(stop-the-worl
d)」コレクタとして動作するか、単にプログラムの特
定のスレッドとすることができる。当技術分野で全般的
に既知のさまざまな種類のガーベジ・コレクタを、本発
明との一貫性を有する形で使用することができる。
は、データ・オブジェクトへのアクセスの有望な時間的
な近接性に少なくとも部分的に基づくか、異なるデータ
・オブジェクトのアクセスの相対頻度に少なくとも部分
的に基づいて、複数のデータ・オブジェクトの間に存在
する。たとえば、アクセス関係は、2つのオブジェクト
の間に親子関係が存在する時すなわち、あるオブジェク
ト(親)が他方のオブジェクト(子)のメモリのある部
分にアクセスする時に、必ず定義することができる。子
も、それが親である場合に(それ自体がこれらの子の親
である他のオブジェクトの親である場合も含めて)、そ
れ自体の関係を有することができる。本明細書で説明す
る形でオブジェクトを編成することによって、多重レベ
ル・メモリ・アーキテクチャでのキャッシュ・ミスまた
はページ・フォルトが減る。というのは、短い時間枠内
でアクセスされるオブジェクトが、メモリ内の同一の編
成ブロック(たとえば、キャッシュ・ラインまたは仮想
メモリ・ページ)内に存在する可能性が高まるからであ
る。
は、同一のアクセス連鎖に含まれる複数のデータ・オブ
ジェクトすなわち、特定のルート・オブジェクトがアク
セスされた後にさまざまなシーケンスで参照されるオブ
ジェクトを、それらのオブジェクトの間の時間的近接性
に基づいて、メモリ内(たとえば、オブジェクト・ヒー
プ内の連続するメモリ・セグメント内)で一緒に論理的
にグループ化することができる。さらに、いくつかの実
施例では、そのようなグループ内の特定のオブジェクト
を、相対アクセス頻度またはオブジェクトがアクセスさ
れる順序に基づいて、互いに相対的に配置することがで
きる。
crosystems社によって開発されたJavaプログラミング環
境で実行されるコンピュータ・プログラムの性能の最適
化における本発明の具体的な応用例に焦点を合わせる。
しかし、本発明は、オブジェクト・ヒープを使用する他
のオブジェクト指向プログラミング環境での適用可能性
を有することを諒解されたい。さらに、すべてのデータ
(オブジェクト指向の意味で「オブジェクト」と呼ばれ
ない時であっても)をオブジェクトとして表現できる場
合、本発明は、非オブジェクト指向プログラミング環境
での適用可能性をも有する。したがって、本発明は、以
下で説明する特定のJavaベースの実施形態に制限されな
い。
ースのオブジェクト順序付けを実装するために例の実施
例で使用される主要なソフトウェア・コンポーネントを
示す図である。具体的に言うと、図3には、仮想マシン
44に結合されたコンパイラ42が示されており、この
コンパイラは、入力としてソース・コード46を受け取
り、それに応答して、仮想マシン44によって実行でき
る1つまたは複数のクラス・ファイル48を出力する。
・コード46及びクラス・ファイル48のそれぞれは、
さまざまな既知のJava言語仕様との互換性を有するよう
に構成される。ソース・コード46は、コンピュータ・
プログラムの人間可読Javaソース・コード表現である。
コンパイラ42は、ブロック50に示されるように、Ja
vaのソース・コード46から、Javaコンピュータ・プロ
グラムの中間表現を表す複数のバイトコードを生成する
のに使用される。
数のクラスに編成され、このクラスは、仮想マシン44
によるコンピュータ・プログラムの実行中に割り振ら
れ、使用されるオブジェクトのテンプレートを表す。ク
ラスは、実行可能バイトコードとそのような実行可能コ
ードが頼るデータの両方を含むクラス・ファイルに編成
される。オブジェクトに関する他の情報も、通常は、当
技術分野で既知の通りクラス・ファイルに含まれる。
51によって処理され、クラス検証ブロック51は、ク
ラスに対するさまざまな検証動作及び分析動作を実行し
て、クラスにエラーがなく、クラスがさまざまな実行時
エラーを引き起こさないようにし、また、Java言語のす
べてのセキュリティ要件が満たされるようにする。バイ
トコード生成とクラス検証の両方が周知であり、したが
って、本明細書でこれ以上詳細に説明する必要がないこ
とを諒解されたい。
セス・プロファイリング・ブロック52に渡されて、本
発明との一貫性を有する形でのアクセス・プロファイリ
ングが実行される。具体的に言うと、クラスのアクセス
・パターンは、クラス内で定義されている実行可能コー
ドのシミュレーションに基づいて生成される(図4及び
図5に関して下で詳細に説明する)。オブジェクト・ア
クセス・プロファイリング・ブロック52の出力は、1
つまたは複数のクラス・ファイル48である。下で詳細
に説明するように、このようなクラス・ファイルには、
それに埋め込まれたプロファイリングされたアクセス情
報が含まれる場合があるが、いくつかの実施形態では、
そのような情報がクラス・ファイルに格納されない場合
があり、これによって、オブジェクト・アクセス・プロ
ファイリング・ブロック52でのオブジェクト・アクセ
ス・プロファイリングが実行されなくなる。
するために第三者に配布するかなんらかの持続性媒体に
格納することができ、また、仮想マシン44によって即
座に実行することができる。仮想マシン44によって、
Java仮想マシン(JVM)が実装されるが、これは、基
本的には、特定のコンピュータ・プラットホーム上で仮
定のマイクロプロセッサの動作をエミュレートするもの
である。異なる仮想マシンを使用して、クラス・ファイ
ルを異なるプラットホーム上で実行できるようにするこ
とが可能である。さらに、コンパイラ42と仮想マシン
は、同一のコンピュータ・システム上に存在する必要が
ないことを諒解されたい。
既知の形で、クラス・ローダ・コンポーネント54を使
用して、仮想マシン44によってロードされる。しか
し、図示の実施例のクラス・ローダ・コンポーネント5
4は、ロードされたクラス・ファイルに関するプロファ
イリングされたアクセス情報がコンパイラによってクラ
ス・ファイルに埋め込まれていない場合に、そのクラス
・ファイルをオブジェクト・アクセス・プロファイリン
グ・ブロック56に渡して、そのような情報を得ること
もできる。さらに、クラス・ローダ・コンポーネント5
4は、追加のクラス検証を実行して、やはり当技術分野
で既知の形で、Javaセキュリティ規則に合致することを
検証することもできる。
記憶域を提供するために、仮想マシン44には、「Fro
m」区画60と「To」区画62を含むオブジェクト・ヒ
ープ58が含まれる。データ記憶域は、実行時中に、作
業記憶域として使用するためにFrom区画60内で割り振
られる。その後、ガーベジ・コレクタ(ガーベジ・コレ
クション論理70によって表される)が、到達可能なオ
ブジェクトをFrom区画60からTo区画62へ周期的にコ
ピーし、From区画とTo区画をスワップし、その結果、前
のTo区画が新しいFrom区画になり、前のFrom区画が新し
いTo区画になるようにする。このようなオブジェクト・
ヒープ管理アルゴリズムを、コピー型ガーベジ・コレク
ションと称する。しかし、他のオブジェクト・ヒープ管
理アルゴリズムを使用することができるので、他のオブ
ジェクト・ヒープ編成を使用することもできる。
るクラスのロードに応答して、1つまたは複数のスレッ
ド64が、インタープリタ63によって実行され、イン
タープリタ63は、バイトコードのそれぞれについて、
仮想マシンが動作するプラットホームに適したネイティ
ブ・コードを生成する。したがって、各スレッドは、異
なるメソッド呼び出しを介するコヒーレンシを維持する
のに必要なデータが維持される呼出しスタック66を割
り振られる。さらに、ブロック68に示されているよう
に、必要であれば、追加のオブジェクト・アクセス・プ
ロファイリングを実行時中に実行することができる。オ
ブジェクト・ヒープは、ガーベジ・コレクション論理7
0によって管理され、ガーベジ・コレクション論理70
は、図示の実施例ではコピー型ガーベジ・コレクタであ
る。
一のガーベジ・コレクタ・スレッドによって管理される
オブジェクト・ヒープを共用する。同一のコンピュータ
・システム上で同時に実行される複数のコンピュータ・
プログラムも、同一のオブジェクト・ヒープを共用する
ことができる。しかし、図示の実施例では、追加のコン
ピュータ・プログラムは、別々のオブジェクト・ヒープ
(及び関連するガーベジ・コレクタ)を割り振られる
が、それらはこの図には示されていない。
解釈と実行は、当技術分野で周知の動作であることが諒
解されるであろう。他の代替案の中でもジャストインタ
イム・コンパイルを含む、仮想マシンに対する追加の変
更も、仮想マシン44内で実施することができる。
するオブジェクト・アクセス・プロファイリングは、コ
ンピュータ・プログラムの寿命のうちのさまざまな時、
たとえば、コンパイル中(オブジェクト・アクセス・プ
ロファイリング・ブロック52によって表される)、ロ
ード中(オブジェクト・アクセス・プロファイリング・
ブロック56によって表される)または実行中(ブロッ
ク68によって表される)に実行することができる。通
常、プロファイリングは、そのような期間のうちのただ
1つで実行されるが、コンパイル中にオブジェクト・ア
クセス・プロファイリングへのアクセスを有しない他の
システムによって生成されたクラス・ファイルを仮想マ
シンが実行する可能性があると予想される場合には、た
とえばクラス・ロード中に、オブジェクト・アクセス・
プロファイリングが実行されたことと、適当なアクセス
情報が生成されたことを調べるために検査する必要が生
じる場合があることを諒解されたい。一般に、プロファ
イリングは、コンピュータの実行中の性能ペナルティを
最小にするために、たとえばコンパイル中またはロード
中など、処理のうちでできる限り早期に実行することが
好ましい。
アクセス・プロファイリングを実行するのに適したルー
チンの1つを、図4及び図5の100に示す。図4から
わかるように、ルーチン100は、必要であればクラス
を取り出すことによって、ブロック102で開始され
る。上で述べたように、オブジェクト・アクセス・プロ
ファイリングは、すでにクラスがロードされた後、また
は、クラス・ファイルに格納されたプログラム・コード
の実行中に、実行することができる。そのような場合に
は、クラスの取出が不要になる可能性がある。
・カウント・テーブルとアクセス順序木データ構造を初
期設定する。ロード/ストア・カウント・テーブルは、
あるクラスで参照されるオブジェクトのそれぞれへの予
測されたアクセスのカウントを、ロード・アクセスとス
トア・アクセスによって分離して維持するのに使用され
る。たとえば、図6からわかるように、ロード/ストア
・カウント・テーブルに適したデータ構造の1つが、テ
ーブル75に示されており、これには、それぞれにオブ
ジェクトIDフィールド78、ロード・カウント・フィ
ールド80及びストア・カウント・フィールド82が含
まれる、複数の項目76が含まれる。オブジェクトID
フィールド78には、参照されるオブジェクトを識別す
ることのできる一意の識別子が含まれる。プロファイリ
ング情報に基づいて、ロード・カウント・フィールド8
0には、ロード型のアクセス(たとえば、Javaのaload
動作とget field動作)の回数が格納され、ストア・カ
ウント・フィールド82には、同様に、ストア型アクセ
ス(たとえば、Javaのastore動作とput field動作)の
回数が格納される。通常、テーブル75は、すべての項
目のデータがクリアされた状態で初期設定される。
リストとハッシュ・テーブルを含む、所与のクラスに関
するロード・アクセス及びストア・アクセスの数を表す
ことができることを諒解されたい。さらに、いくつかの
実施形態では、ロード・アクセスとストア・アクセスの
別々のカウントを維持する必要がなく、これによって、
ロード・カウント・フィールド80及びストア・カウン
ト・フィールド82を同一のフィールドに組み合わせる
ことができることを諒解されたい。さらに、下で詳細に
説明するように、あるオブジェクトに関するアクセス情
報は、アクセス順序木データ構造内で維持することがで
き、これによって、テーブル75または同等のデータ構
造が不要になる。
ト・オブジェクトまたはルート・ノード86を含む、ア
クセス順序木85の1例を示す図である。ルート・ノー
ド86は、その下ですべてのオブジェクトが特定のメソ
ッドによって参照される、木の出発点を表す。ノード8
8は、一般に、ルート・ノード86によって表される特
定のメソッド内のフィールドまたは参照されるオブジェ
クトを表す。ノード88のうちのいくつかを、他のノー
ド88が参照でき、参照されるオブジェクトの連鎖が表
されることに留意されたい。たとえば、アクセス順序木
85で表現される例のクラスの「this」オブジェクトに
ついて、「this」オブジェクトから「table[]」オブジ
ェクト、「tempObject」オブジェクト及び「next」オブ
ジェクトへの呼出しまたはアクセスの連鎖が図示されて
おり、これは、例のクラスによって定義されるオブジェ
クトの実行中に、オブジェクト「table[]」、「tempObj
ect」及び「next」が、「this」オブジェクトへの参照
の直後に順番に参照されることを表す。
オブジェクトのオブジェクト識別子を単純に格納するこ
とができる。他の実施形態では、各ノード内に、そのオ
ブジェクトに対するアクセスの数を表すアクセス・カウ
ントが含まれることが望ましい場合がある。そのような
アクセス・カウントは、ロード及びストアによって分離
するか、一緒にグループ化することができる。上で述べ
たように、この情報は、別々のアクセス・テーブルの使
用に対する代替物として、ノード内に格納することがで
きる。
いて定義される各メソッドによって参照されるオブジェ
クトによって分離される。そのような場合には、たとえ
ば、ルート・ノード86と各フィールドのノード88の
間に追加ノードを挿入し、フィールド・ノードをメソッ
ドによって分類できるようにすることが望ましい場合が
ある。さまざまなデータ構造、たとえば連係リストなど
を使用して、本発明との一貫性を有する呼出し木を表す
ことができることを諒解されたい。通常、アクセス順序
木の初期設定には、子ノードを関連付けられていないル
ート・ノード・オブジェクトの初期設定が含まれる。
ント・テーブルとアクセス順序木が初期設定された後
に、制御をブロック106に移して、クラス内の各バイ
トコードを分析してロード/ストア・カウント・テーブ
ルを構築するループに入る。具体的に言うと、クラス内
の各バイト・コードについて、制御をブロック108に
移して、バイトコードが新しいオブジェクトを操作する
かどうかすなわち、バイトコードが、ロード/ストア・
カウント・テーブルに対応する項目を有しないオブジェ
クトを参照するかどうかを判定する。そうである場合に
は、制御をブロック110に移して、新しいオブジェク
トのためにロード/ストア・カウント・テーブルに新し
い項目を追加する。これには、新しい項目へのオブジェ
クト識別子の格納と、ロード・カウント及びストア・カ
ウントの0への初期設定が含まれる。その後、制御をブ
ロック112に移して、バイトコードがオブジェクトに
対するロード・アクセスを実行するかどうかを判定す
る。また、ブロック108に戻って、バイトコードが新
しいオブジェクトを操作しない場合には、制御は、ブロ
ック110を迂回して、ブロック112に直接に移され
る。
ード型のアクセスを実行する場合には、制御をブロック
114に移して、そのオブジェクトのロード・カウント
を増分する、すなわち、オブジェクトに対応する項目の
ロード・カウント・フィールドに格納された値を1つ増
やす。その後、制御をブロック106に戻して、追加の
バイトコードを処理する。
オブジェクトに対するロード・アクセスを実行しない場
合、制御をブロック116に移して、バイトコードがオ
ブジェクトに対するストア型のアクセスを実行するかど
うかを判定する。そうでない場合には、このバイトコー
ドのそれ以上の処理を行う必要はなく、制御をブロック
106に戻す。しかし、バイトコードがオブジェクトに
対するストア・アクセスを実行する場合には、制御をブ
ロック118に移して、そのオブジェクトのストア・カ
ウントを増分した後に、ブロック106に制御を返す。
後に、ブロック106から図5のブロック120に制御
を移す。ブロック120から、クラスのアクセス順序木
を構築するためにクラスの各バイトコードを処理する、
第2のループが開始される。
122に移して、シミュレーション・スタックを使用し
てバイトコードを検査する。具体的に言うと、バイトコ
ード実行の効果をシミュレートして、「シミュレートさ
れた」呼出しスタックを構築する。
トコードを検査した後に、制御をブロック124に移し
て、バイトコードが、そこからロードまたはストアを行
うオブジェクト参照を使用するロード動作またはストア
動作であるかどうか、すなわち、バイトコードが、ロー
ド動作またはストア動作を実行するために、本明細書で
「参照されるオブジェクト」と称する別のオブジェクト
にアクセスするかどうかを判定する。そうでない場合に
は、制御をブロック120に戻し、追加のバイトコード
を処理する。
照を使用するロード動作またはストア動作である場合に
は、制御をブロック126に移して、この参照されるオ
ブジェクトをロードまたはストアした前のオブジェクト
が存在するかどうかを判定する。本明細書で使用する前
のオブジェクトとは、問題の参照されるオブジェクトへ
のアクセスに到達するために以前にアクセスされたオブ
ジェクトを表す。したがって、前のオブジェクトが存在
するならば、呼出し連鎖またはアクセス連鎖が、前のオ
ブジェクトと参照されるオブジェクトの間で定義され
る。
のオブジェクトがまだ存在しないと仮定すると、制御を
ブロック128に移して、参照されるオブジェクトがア
クセス順序木にすでに存在するかどうかを判定する。そ
うでない場合には、参照されるオブジェクトのために新
しいノードを木に追加し、制御をブロック132に移し
て、参照されるオブジェクトのアクセス・カウントを増
分する。ブロック128に戻って、そのオブジェクトが
すでに木に存在する場合には、新しいノードを追加せ
ず、制御を直接にブロック132に移して、アクセス・
カウンタを増分する。
は、木の各ノード内で維持することができる。代替案で
は、アクセス・カウント情報を、ロード/ストア・カウ
ント・テーブル内で維持することができ、これによっ
て、ブロック132が不要になる。
ントを増分した後に、制御をブロック134に移して、
バイトコードがロード動作であるかどうかを判定する。
そうでない場合には、制御をブロック120に返して、
追加のバイトコードを処理する。しかし、バイトコード
がロード動作である場合には、制御をブロック136に
移して、前のオブジェクトに参照されるオブジェクトを
セットし、基本的に木を1レベル下にトラバースして、
後続のロード動作またはストア動作に関する前のオブジ
ェクトとして、参照されるオブジェクトをセットする。
その後、制御をブロック120に返して、追加のバイト
コードを処理する。
はストア動作に関して前のオブジェクトが存在する場合
には、制御をブロック138に移して、参照されるオブ
ジェクトが、前のオブジェクトの子のリストに存在する
かどうかを判定する。そうである場合には、制御を直接
ブロック132に移して、参照されるオブジェクトのア
クセス・カウントを増分する。しかし、参照されるオブ
ジェクトが子のリストに存在しない場合には、まず制御
をブロック14に移して、前のオブジェクトの子のリス
トに参照されるオブジェクトのノードを追加し、参照さ
れるオブジェクトが、前のオブジェクトへのアクセスの
直後にアクセスされることによって前のオブジェクトと
のアクセス関係を有することを示す。
後に、そのクラスのアクセス順序木データ構造を構築
し、そのアクセス順序木から、クラス内のどのオブジェ
クトがどの順序でアクセスされるかを確認することがで
きる。その後、制御をブロック120からブロック14
2に移して、各ノードの子を、そのアクセス・カウンタ
に基づいて順序付ける。具体的に言うと、各ノードにつ
いて、その子は、これらのノードのそれぞれに格納され
たアクセス・カウントに基づいてアクセス木内で順序付
けられ、最も高いアクセス・カウントを有する子が、最
初に配置され、他の子は、アクセス・カウントの降順で
それに続く。したがって、この2次レベルの順序付けに
よって、より頻繁にアクセスされる子ノードが、親ノー
ドの近くに編成されて、より頻繁にトラバースされる呼
出し連鎖またはアクセス連鎖が、互いにできる限り近く
に格納されるようになる。
れた後に、制御をブロック144及び146に移して、
任意選択として、後に実行時中に使用するために、クラ
ス・ファイルに最近生成されたプロファイリングされた
アクセス情報を格納する。しかし、オブジェクト・アク
セス・プロファイリングが実行時に実行される場合に
は、クラス・ファイル内でオブジェクトを順序付けるこ
とと、アクセス情報をクラス・ファイルに格納すること
が不要になる可能性があることを諒解されたい。したが
って、そのような状況では、ブロック144及び146
を省略することができる。
のオブジェクト参照を、アクセス順序木に従って、した
がって、木に固有のアクセス情報を使用して順序付け、
これによって、特定の連鎖またはシーケンスで(すなわ
ち、時間的近接性を伴って)アクセスされるオブジェク
トへの参照が、互いに近くに順序付けられてグループを
形成し、そのようなグループ内のオブジェクト(たとえ
ば、同一の親オブジェクトから依存する兄弟)への参照
は、さらに、相対的なアクセス頻度によって順序付けら
れる。この種の順序付けは、単純に、現在処理されてい
るノードの最も左側の未処理の子としてクラスに格納さ
れた次のノードを再帰的に選択するアルゴリズムを介し
て木をトラバースし、すべての子ノードを処理し終えた
時に親ノードへ戻ることによって、実行できることを諒
解されたい。
用して、クラス・ファイル自体が、関連するオブジェク
トへの参照が互いに近くに配置される形で編成される。
その結果、この形で最適化されたクラス・ファイルの、
実行時中のオブジェクト・ヒープへの後続のロードは、
改良されたガーベジ・コレクションに関連する利益と独
立に、オブジェクト・ヒープのFrom区画内のキャッシュ
・ミスまたはページ・フォルトを減らす能力も有する。
ト参照を順序付けた後に、制御をブロック146に移し
て、クラス・ファイルにロード/ストア・カウント・テ
ーブルとアクセス順序木を格納する。その後、プロファ
イリングが完了し、ルーチン100が終了する。
力される、図4及び図5のルーチン100によって生成
されたプロファイリングされたアクセス情報を含む、Ja
vaのクラス・ファイル150の例を示す図である。クラ
ス・ファイル150は、Javaの「可搬性」すなわち、Ja
va仮想マシン(JVM)をサポートするプラットホーム
の基礎となるアーキテクチャに無関係に、規格に準拠す
るJVMと共にすべてのシステムで走行する能力を可能
にする、Javaクラスの標準外部表現である。クラス・フ
ァイル150には、複数のデータ・フィールド152な
いし173が含まれる。「magic(マジック)」データ
・フィールド152は、このファイルをJavaクラス・フ
ァイルとして識別できるようにする、特定の任意のビッ
ト・シーケンスである。このビット・シーケンスは、フ
ァイルがJavaクラス・ファイルとして認識されるように
するために、16進値0xCAFEBABEを有しなければならな
い。また、「minor version(マイナ・バージョン)」
データ・フィールド154及び「major version(メジ
ャー・バージョン)」データ・フィールド156は、ク
ラス・ファイルのバージョンを識別するためのフィール
ドである。
・フィールド159では、可変長の項目のリストが定義
され、この定数プールのサイズは、「constant pool co
unt(定数プール・カウント)」データ・フィールド1
58によって識別される。各項目は、このクラス・ファ
イル内の他の場所で使用される定数または外部参照を表
す。定数プールを使用することによって、値の単一の出
現によってクラス・ファイル内の複数の必要を満たすこ
とができるようになる。
ータ・フィールド160では、他のクラスからこのクラ
スを参照するのに必要なオーソリティを含む、クラス・
ファイルによって表されるクラスの基本特性の一部が定
義される。「this class(このクラス)」データ・フィ
ールド162は、このクラスの名前を含む項目の定数プ
ールへのインデックスであり、「superclass(スーパー
クラス)」データ・フィールド164は、このクラスの
スーパークラスの名前を含む項目の定数プールへのイン
デックスである。
タ・フィールド167では、このクラスで実装されるイ
ンターフェースの名前を識別する定数プール・インデッ
クス値のリストが定義され、そのサイズは、「interfac
es count(インターフェース・カウント)」データ・フ
ィールド166によって識別される。インターフェース
は、Javaでは、他のオブジェクト指向言語で提供される
「多重軽傷」と同一の機能の一部を達成するために使用
される。
ルド169では、このクラスのフィールドを記述した可
変長の項目のリストが定義され、そのサイズは、「fiel
ds count」データ・フィールド168によって識別され
る。フィールドの名前と、存在する場合にはそのインス
タンス化値は、定数プールへのインデックスとして表さ
れる。
ルド171では、このクラスのメソッドを記述する可変
長の項目のリストが定義され、そのサイズは、「method
s count(メソッド・カウント)」データ・フィールド
170によって識別される。フィールドの名前は、定数
プールへのインデックスとして表される。各メソッドの
実際の解釈可能コード(すなわち、バイトコードの組)
は、そのメソッド項目の末尾に付加される。
ド173では、クラスの他の特性のためのリポジトリが
定義され、そのサイズは、「attributes count(属性カ
ウント)」データ・フィールド172によって識別され
る。
の参照は、fieldsデータ・フィールド169に格納さ
れ、図5のブロック144に関して上で説明した形で参
照が編成されるのは、このデータ・フィールド内であ
る。クラスのプロファイリングされたアクセス情報は、
通常は、図8のテーブル75及びアクセス順序木85の
配置によって表されるように、クラス・ファイルのattr
ibutesデータ・フィールド173に格納される。
(図3)によって実行されるコレクタ・スレッド200
を示す図である。一般に、コレクタ・スレッドは、ブロ
ック202で初期設定されるが、これには、通常、メモ
リ内のオブジェクト・ヒープの割振りが含まれる。次
に、ブロック204で、コレクタ・スレッドは、ガーベ
ジ・コレクションの技術で周知の通り、トリガをかける
イベント、たとえば、タイマの満了、所定の閾値未満へ
の使用可能メモリの減少などを待つ。
ブロック206でコレクション・サイクルを初期設定す
る。次に、ルート・コピー・ルーチン208を実行し
て、オブジェクト・ヒープのFrom区画からTo区画へ、到
達可能なすべてのオブジェクトをコピーする。次に、区
画スワップ・ルーチン210を実行して、To区画とFrom
区画をスワップし、その結果、To区画にコピーされたオ
ブジェクトが、本質的にFrom区画に「返される」ように
する。その結果、ルート・コピー・ルーチン208でTo
区画にコピーされなかったすべてのオブジェクトは、次
のガーベジ・コレクション・サイクルで、新しいオブジ
ェクトが前のFrom区画にコピーされる際に、効果的に破
棄される。
する形で関係ベースのオブジェクト順序付けを実施する
際のルート・コピー・ルーチン208の動作を示す図で
ある。図10からわかるように、ルート・コピー・ルー
チン208は、プロファイリングされたアクセス情報
が、オブジェクト・ヒープを使用するコンピュータ・プ
ログラム内の各クラスについて使用可能になるようにす
るループを開始することによって、ブロック212で開
始される。そのようなクラスのそれぞれについて、制御
をブロック212からブロック214に移して、上でル
ーチン100によって生成されたプロファイリングされ
たアクセス情報がクラス・ファイルに含まれるかどうか
を判定する。そうである場合には、このクラスのそれ以
上の処理を行う必要はなく、制御をブロック212に返
して、追加のクラスを処理する。
能でない場合には、そのクラスについてオブジェクト・
アクセス・プロファイリングを行うルーチン100を呼
び出し、その後、ブロック216で、相対アクセス頻度
に基づいて、クラス・オブジェクト参照フィールドを再
順序付けする。その後、制御をブロック212に返し
て、追加のクラスを処理する。
のプロファイリングされたアクセス情報が、ガーベジ・
コレクタから使用可能になる。その後、制御をブロック
218に移して、現在呼出しスタック上に配置されてい
るオブジェクト参照を処理するループを開始する。上で
述べたように、呼出しスタックには、通常は、コンピュ
ータ・プログラム内の1つまたは複数のメソッドの実行
中に使用されるオブジェクトへの参照が含まれる。コン
ピュータ・プログラムによってメソッドが呼び出される
時には、必ず、そのメソッドによって使用されるパラメ
ータが、そのようなパラメータを含む項目を呼出しスタ
ック上にプッシュすることによって、そのメソッドに渡
される。さらに、呼出し元メソッドに関する戻り情報
が、その項目に追加され、その結果、プログラムは、呼
び出されたメソッドが終了した後に再開できるようにな
る。呼び出されたメソッドが中止または完了した時に
は、必ず、それのための項目が、呼出しスタックからポ
ップされ、情報が呼出し元メソッドに返される。呼出し
スタックの使用及び動作は、当技術分野で周知である。
始して、現在呼出しスタック上にあるオブジェクト参照
のそれぞれを、2つのリストすなわち、呼出し連鎖また
はアクセス連鎖に見つかるすべてのオブジェクトを含む
「順序」リストと、他のすべてのオブジェクトの「孤児
(orphaned)」リストにソートする。したがって、その
ような参照のそれぞれについて、制御をブロック220
に渡して、そのオブジェクト参照に関する参照されるオ
ブジェクトが、そのクラスのアクセス順序木内にあるか
どうかを判定する。
2に移して、参照されるオブジェクトを「順序」リスト
に追加する。そうでない場合には、ブロック224で、
参照されるオブジェクトを「孤児」リストに追加する。
すべてのオブジェクトをこの形で処理した後に、ブロッ
ク218からブロック226及び228に制御を移し
て、各リストのオブジェクトを別々に処理する。
オブジェクトを処理し、基本的に、「順序」リスト内の
各オブジェクトによって参照されるオブジェクトを、ア
クセス順序木によって定義されるアクセス順序でTo区画
にコピーする。さらに、この時点で、From区画内の元の
オブジェクトのそれぞれに、To区画内のそのオブジェク
トの新しいコピーを指す転送ポインタを追加する。その
結果、From区画内のオブジェクトの古いコピーへの参照
のすべてが、単にそのための転送ポインタに従うことに
よって、そのオブジェクトの新しいコピーを突きとめる
ことができる。
ついて、ブロック228で、各オブジェクトをTo区画に
コピーし、やはりFrom区画内のオブジェクトの元のコピ
ーに転送ポインタを追加する。「孤児」リスト内のオブ
ジェクトは、アクセス順序木上に存在しないので、その
ようなオブジェクトの特定の編成は使用されない。
出しスタック上のオブジェクト参照の処理が完了し、制
御を図11のブロック230に移して、オブジェクト・
ヒープ内のすべての静的オブジェクトを処理するループ
を開始する。当技術分野で既知の通り、静的オブジェク
トは、通常は、大域的にアクセス可能なオブジェクトで
ある。
れぞれを処理するループが開始される。そのようなオブ
ジェクトのそれぞれについて、制御をブロック232に
移して、その静的オブジェクトに含まれる参照のそれぞ
れを処理する。そのような参照のそれぞれについて、制
御をブロック234に移して、その参照によって参照さ
れるオブジェクトが、すでにTo区画にコピーされている
かどうかを判定する。そうである場合には、制御をブロ
ック232に戻して、静的オブジェクト内の追加の参照
を処理する。しかし、参照されるオブジェクトがTo区画
内にない場合には、制御をブロック236に移して、参
照されるオブジェクトをTo区画にコピーし、To区画内の
新しいコピーを指す転送ポインタを、From区画内の元の
コピーに追加する。その後、制御をブロック232に戻
して、追加の参照を処理する。
を処理した後に、ブロック232は、制御をブロック2
30に戻して、上で説明した形で追加の静的オブジェク
トを処理する。その後、すべての静的オブジェクトを処
理した後に、ブロック230は、制御をブロック238
に移して、To区画内の到達可能なオブジェクトによって
参照されるすべてのオブジェクトも、To区画にコピーさ
れるようにする。
御をブロック240に渡してオブジェクト内の参照のそ
れぞれを処理することによって、To区画内のオブジェク
トのそれぞれを処理する。そのような参照のそれぞれに
ついて、制御をブロック242に移して、参照されるオ
ブジェクトがFrom区画内にあるかどうかを判定する。そ
うでない場合には、制御をブロック240に戻して、現
在処理されているオブジェクト内の追加の参照を処理す
る。しかし、参照されるオブジェクトがまだFrom区画内
にある場合には、制御をブロック244に移して、参照
されるオブジェクトが現在転送ポインタを有するかどう
かを判定する。
クトは、まだTo区画にコピーされておらず、したがっ
て、ブロック246を実行して、参照されるオブジェク
トをTo区画にコピーし、From区画内の元のコピーに転送
ポインタを追加する。その後、制御をブロック240に
戻して、オブジェクト内の追加の参照を処理する。
インタを有する場合には、参照されるオブジェクトは、
すでにTo区画にコピーされており、したがって、ブロッ
ク248を実行して、現在処理されているオブジェクト
内の参照を、転送ポインタに格納された値と置換する。
本質的に、この動作によって、To区画内のオブジェクト
の新しいコピーを指すように参照が更新される。その
後、制御をブロック240に戻して、オブジェクト内の
追加の参照を処理する。
ての参照を処理した後に、ブロック240からブロック
238に制御を移して、To区画内の追加のオブジェクト
を処理する。さらに、To区画内のそのようなオブジェク
トのすべてをコピーした後に、ガーベジ・コレクション
・サイクルのコピー相が完了し、コレクタ・スレッド2
00が終了する。
を詳細に示す図である。上で述べたように、ルート・コ
ピー・ルーチンの完了時に、オブジェクト・ヒープ内の
到達可能なオブジェクトのすべてが、To区画にコピーさ
れている。したがって、区画スワップ・ルーチン210
では、まずブロック250を実行して、From区画とTo区
画へのポインタをスワップし、本質的に、コレクタ・ス
レッドの次のサイクル中に使用するために、到達可能な
オブジェクトのすべてを新たに形成されたFrom区画に戻
す。到達可能でないオブジェクトのすべてならびに、到
達可能なオブジェクトの元のコピー(まだその新しいコ
ピーへの転送ポインタを含む)は、新しいTo区画に割り
振られた空間に残っている。新しいTo区画は、望むなら
ばクリアすることができるが、コレクタ・スレッドの次
のサイクルで、その区画にまだ残っている情報のすべて
が単純に上書きされるので、通常はこのステップは省略
される。
後に、制御をブロック252に移して、転送ポインタを
組み込むようにすべての参照を更新する。具体的に言う
と、転送ポインタを有するオブジェクトを指す参照のす
べてが、これらの転送ポインタに関連する値を格納する
ように更新され、本質的に、現在はFrom区画に割り振ら
れている空間内の新しいコピーを指すように参照を更新
する。ブロック252の完了時に、オブジェクト・ヒー
プが収集され、コレクタ・スレッドの現在のサイクルが
完了する。したがって、図9からわかるように、制御を
ブロック204に戻して、コレクタ・スレッドの次のサ
イクルのトリガになるイベントを待つ。
の表1に、「Hashtable」と称するクラスのコンポーネ
ントとして提供され、複数の「HashtableElement」オブ
ジェクトを有する、代表的なJava言語メソッド「contai
nsKey」を示す。
ンパイル中に生成される代表的なバイトコードを示す。
4及び5のルーチン100の実行によって、「tabl
e[]」オブジェクトが3回参照され(バイトコード・オ
フセット1、14及び19)、「tempObject」オブジェ
クトが2回参照され(バイトコード・オフセット28及
び51)、「this」、「value」、「next」及び「key」
オブジェクトがそれぞれ1回参照される(それぞれバイ
トコード・オフセット0、5、53及び39)ことを示
す図示のデータを含む、図6のテーブル75などのロー
ド・ストア・テーブルが作成される。同様に、ルーチン
100によって、そのメソッドで参照されるさまざまな
オブジェクトの相対アクセス順序を示す、図7のアクセ
ス順序木85などのアクセス順序木が作成される。
2とTo区画304を含む、例のオブジェクト・ヒープ3
00に対して実行される代表的なガーベジ・コレクショ
ン動作が図示されている。図14は、具体的には、ガー
ベジ・コレクションの前の、ガーベジ・コレクション・
サイクル中のJava仮想マシン内のスレッドのうちの1つ
の呼出しスタックが、停止しているか、たとえば図13
の呼出しスタック280の項目282によって表される
ようにスタック上にcontainsKeyメソッドを有する時
の、From区画302の状態を示す図である。この例で
は、「Hashtable」オブジェクトと「table[]」オブジェ
クトが、ガーベジ・コレクション動作の開始時点からス
タック上にある。
割り振られる順序に基づいて、From区画は、「Hashtabl
e」オブジェクト306、「table[]」オブジェクト30
8、「HashtableElement」オブジェクト310及び31
2の対、「HashtableElement」オブジェクトによって参
照されるオブジェクト314及び316の対を有する。
図14には、さらに、これらのオブジェクトが、その間
に点在する追加のオブジェクト318と共に、From区画
302内で広く分散することも示されている。
To区画304へのオブジェクトのコピー(図10のブロ
ック218から始まる)の結果が示されており、これに
よって、コピー(アクセント符号によって示される)
が、「Hashtable」オブジェクト306と、「table[]」
オブジェクト308と、「HashtableElement」オブジェ
クト310及び312と、オブジェクト314及び31
6から作られる。オブジェクトのコピーは、To区画内で
互いにパックされ、コピーの順序は、幅優先の順序付け
(深さ優先の順序付けも使用することができる)に基づ
く。転送ポインタがFrom区画のオブジェクトに追加され
て、To区画内のコピーへの参照が維持されていることに
留意されたい。また、オブジェクト318によって表さ
れる孤児オブジェクトは、To区画にコピーされず、した
がって、区画がスワップされる時に破棄される。
ジェクト内に含まれる参照は、図11、具体的にはルー
ト・コピー・ルーチン208のブロック238から始ま
る処理に関連して説明したように、クリーン・アップさ
れる。区画のスワップの際には、To区画304が、次の
ガーベジ・コレクション・サイクルのFrom区画になる。
の事項を開示する。
のデータ・オブジェクトを格納するステップと、(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)に記
載のプログラム製品。
たコンピュータ・システムのブロック図である。
ステムからのコンピュータのハードウェア環境及びソフ
トウェア環境の例のブロック図である。
ブロック図である。
ング・ルーチンのプログラムの流れを示す流れ図であ
る。
ング・ルーチンのプログラムの流れを示す流れ図であ
る。
ファイリング・ルーチンによって生成されるロード/ス
トア・カウント・テーブルの例のブロック図である。
ファイリング・ルーチンによって生成されるアクセス木
の例のブロック図である。
る。
行されるコレクタ・スレッドのプログラムの流れを示す
流れ図である。
チンのプログラムの流れを示す流れ図である。
チンのプログラムの流れを示す流れ図である。
ンのプログラムの流れを示す流れ図である。
る呼出しスタックの例を示すブロック図である。
るオブジェクト・ヒープの例を示すブロック図である。
るオブジェクト・ヒープの例を示すブロック図である。
るオブジェクト・ヒープの例を示すブロック図である。
ロック 54 クラス・ローダ・コンポーネント 56 オブジェクト・アクセス・プロファイリング・ブ
ロック 58 オブジェクト・ヒープ 60 From区画 62 To区画 63 インタープリタ 64 スレッド 66 呼出しスタック 68 オブジェクト・アクセス・プロファイリング・ブ
ロック 70 ガーベジ・コレクション論理
Claims (33)
- 【請求項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のデータ・オブジェクトを配置した後に、前記Fr
om及びTo区画をスワップするステップを含む、請求項1
7に記載の方法。 - 【請求項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のデータ・オブジェク
トが、複数のデータ・オブジェクトの中にあり、前記プ
ログラムがさらに、データ・オブジェクトのサブセット
を、データ・オブジェクトの前記サブセット内の各デー
タ・オブジェクトの間のアクセス関係に基づいて、前記
オブジェクト・ヒープ内のメモリの連続するセグメント
内に一緒にグループ化するように構成される、請求項2
3に記載の装置。 - 【請求項29】前記プログラムがさらに、前記オブジェ
クト・グループ内の前記データ・オブジェクトのアクセ
スの相対頻度と、前記オブジェクト・グループ内の前記
データ・オブジェクトがアクセスされる可能性が高い順
序とのうちの少なくとも1つに少なくとも部分的に基づ
いて、前記オブジェクト・グループ内の前記データ・オ
ブジェクトを配置するように構成される、請求項28に
記載の装置。 - 【請求項30】前記オブジェクト・ヒープが、From区画
とTo区画とに区分され、前記プログラムが、データ・オ
ブジェクト間の前記アクセス関係に基づく所定の順序
で、前記From区画から前記To区画へデータ・オブジェク
トをコピーするように構成される、請求項23に記載の
装置。 - 【請求項31】前記データ・オブジェクトが、Java仮想
マシンによるJavaクラス・ファイルの実行に応答してア
クセスされる、請求項23に記載の装置。 - 【請求項32】(a)オブジェクト・ヒープに格納され
た複数のオブジェクトからの少なくとも第1及び第2の
データ・オブジェクトを、それらの間のアクセス関係に
基づいて配置するように構成されたプログラムと、 (b)前記プログラムを担持する信号担持媒体とを含む
プログラム製品。 - 【請求項33】前記信号担持媒体が、記録可能媒体と伝
送型媒体とのうちの少なくとも1つを含む、請求項32
に記載のプログラム製品。
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 true JP2000322315A (ja) | 2000-11-24 |
JP3659317B2 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) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005529384A (ja) * | 2002-05-07 | 2005-09-29 | オラクル・インターナショナル・コーポレイション | 異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供 |
JP2006085300A (ja) * | 2004-09-14 | 2006-03-30 | Kansai Tlo Kk | データ処理方法、データ処理装置及びコンピュータプログラム |
JP2009266113A (ja) * | 2008-04-28 | 2009-11-12 | Internatl Business Mach Corp <Ibm> | メモリ管理方法およびシステム |
JP2010102525A (ja) * | 2008-10-24 | 2010-05-06 | Internatl Business Mach Corp <Ibm> | 頻繁に発生するイベントを推定する方法 |
JP4812997B2 (ja) * | 2000-01-05 | 2011-11-09 | オラクル・アメリカ・インコーポレイテッド | メモリ管理によって参照の局所性を改善するための方法および装置 |
US8868853B2 (en) | 2009-08-12 | 2014-10-21 | Nec Corporation | Data processing device, data recording method and data recording program |
JP2017004469A (ja) * | 2015-06-16 | 2017-01-05 | 富士通株式会社 | 基地局装置、処理方法、プログラム、無線通信システム、及び、基地局処理カード |
Families Citing this family (68)
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 |
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 |
US6826748B1 (en) | 1999-01-28 | 2004-11-30 | Ati International Srl | Profiling program execution into registers of a computer |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US7013456B1 (en) * | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
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 |
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 |
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 |
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 |
US6934755B1 (en) | 2000-06-02 | 2005-08-23 | Sun Microsystems, Inc. | System and method for migrating processes on a network |
US6760815B1 (en) * | 2000-06-02 | 2004-07-06 | Sun Microsystems, Inc. | Caching mechanism for a virtual heap |
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 |
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 |
US6757890B1 (en) * | 2000-12-28 | 2004-06-29 | Sun Microsystems, Inc. | Methods and apparatus for enabling local Java object allocation and collection |
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 |
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 |
US7451168B1 (en) | 2003-06-30 | 2008-11-11 | Data Domain, Inc. | Incremental garbage collection of data in a secondary storage |
US7424498B1 (en) * | 2003-06-30 | 2008-09-09 | Data Domain, Inc. | Probabilistic summary data structure based encoding for garbage collection |
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 |
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 |
US8001250B2 (en) * | 2006-05-16 | 2011-08-16 | Oracle International Corporation | SIP and HTTP convergence in network computing environments |
US8112525B2 (en) * | 2006-05-16 | 2012-02-07 | Oracle International Corporation | Engine near cache for reducing latency in a telecommunications environment |
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 |
US20080147551A1 (en) * | 2006-12-13 | 2008-06-19 | Bea Systems, Inc. | System and Method for a SIP Server with Online 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 |
US9667430B2 (en) * | 2006-12-13 | 2017-05-30 | Oracle International Corporation | System and method for a SIP server with offline 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 |
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 |
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 |
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 |
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 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH044429A (ja) * | 1990-04-23 | 1992-01-08 | Nec Corp | 仮想記憶システムにおける自動再配置リンク方式 |
JPH06214803A (ja) * | 1993-01-18 | 1994-08-05 | Nec Corp | 仮想空間ブロック配置方式 |
JPH0713824A (ja) * | 1993-06-25 | 1995-01-17 | Sony Corp | データ管理方法 |
JPH07129410A (ja) * | 1993-11-05 | 1995-05-19 | Fujitsu Ltd | コンパイラにおけるメモリ割り付け方法 |
JPH08263381A (ja) * | 1995-03-27 | 1996-10-11 | Nec Corp | 仮想記憶システムにおける自動再配置リンク方式 |
JPH0962574A (ja) * | 1995-08-28 | 1997-03-07 | Mitsubishi Electric Corp | メモリ・アドレス割り付け方法 |
JPH09212369A (ja) * | 1996-01-23 | 1997-08-15 | Hewlett Packard Co <Hp> | 記憶域割り付け装置 |
JPH10187460A (ja) * | 1996-10-28 | 1998-07-21 | Fujitsu Ltd | バイナリ・プログラム変換装置および方法 |
JPH10254718A (ja) * | 1996-12-23 | 1998-09-25 | Microsoft Corp | キャッシュ効果オブジェクトローダ |
JPH1196015A (ja) * | 1997-09-19 | 1999-04-09 | Nec Corp | キャッシュ最適化による言語処理方法およびその言語処理を記録した記録媒体 |
Family Cites Families (16)
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 |
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 | マイクロソフト コーポレーション | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 |
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 |
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 |
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 |
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 |
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 |
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
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH044429A (ja) * | 1990-04-23 | 1992-01-08 | Nec Corp | 仮想記憶システムにおける自動再配置リンク方式 |
JPH06214803A (ja) * | 1993-01-18 | 1994-08-05 | Nec Corp | 仮想空間ブロック配置方式 |
JPH0713824A (ja) * | 1993-06-25 | 1995-01-17 | Sony Corp | データ管理方法 |
JPH07129410A (ja) * | 1993-11-05 | 1995-05-19 | Fujitsu Ltd | コンパイラにおけるメモリ割り付け方法 |
JPH08263381A (ja) * | 1995-03-27 | 1996-10-11 | Nec Corp | 仮想記憶システムにおける自動再配置リンク方式 |
JPH0962574A (ja) * | 1995-08-28 | 1997-03-07 | Mitsubishi Electric Corp | メモリ・アドレス割り付け方法 |
JPH09212369A (ja) * | 1996-01-23 | 1997-08-15 | Hewlett Packard Co <Hp> | 記憶域割り付け装置 |
JPH10187460A (ja) * | 1996-10-28 | 1998-07-21 | Fujitsu Ltd | バイナリ・プログラム変換装置および方法 |
JPH10254718A (ja) * | 1996-12-23 | 1998-09-25 | Microsoft Corp | キャッシュ効果オブジェクトローダ |
JPH1196015A (ja) * | 1997-09-19 | 1999-04-09 | Nec Corp | キャッシュ最適化による言語処理方法およびその言語処理を記録した記録媒体 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4812997B2 (ja) * | 2000-01-05 | 2011-11-09 | オラクル・アメリカ・インコーポレイテッド | メモリ管理によって参照の局所性を改善するための方法および装置 |
JP2005529384A (ja) * | 2002-05-07 | 2005-09-29 | オラクル・インターナショナル・コーポレイション | 異なるクラスのインスタンスであるオブジェクトへの共通のメモリ管理コードの提供 |
JP2006085300A (ja) * | 2004-09-14 | 2006-03-30 | Kansai Tlo Kk | データ処理方法、データ処理装置及びコンピュータプログラム |
JP4719859B2 (ja) * | 2004-09-14 | 2011-07-06 | 国立大学法人京都大学 | データ処理方法、データ処理装置及びコンピュータプログラム |
JP2009266113A (ja) * | 2008-04-28 | 2009-11-12 | Internatl Business Mach Corp <Ibm> | メモリ管理方法およびシステム |
JP2010102525A (ja) * | 2008-10-24 | 2010-05-06 | Internatl Business Mach Corp <Ibm> | 頻繁に発生するイベントを推定する方法 |
US8868853B2 (en) | 2009-08-12 | 2014-10-21 | Nec Corporation | Data processing device, data recording method and data recording program |
JP2017004469A (ja) * | 2015-06-16 | 2017-01-05 | 富士通株式会社 | 基地局装置、処理方法、プログラム、無線通信システム、及び、基地局処理カード |
Also Published As
Publication number | Publication date |
---|---|
KR20010007010A (ko) | 2001-01-26 |
US6480862B1 (en) | 2002-11-12 |
JP3659317B2 (ja) | 2005-06-15 |
KR100384905B1 (ko) | 2003-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3659317B2 (ja) | データを管理する方法及び装置 | |
US6330556B1 (en) | Data structure partitioning to optimize cache utilization | |
US6868488B2 (en) | Binned remembered sets | |
US6321240B1 (en) | Data structure partitioning with garbage collection to optimize cache utilization | |
Singhal et al. | Texas: An efficient, portable persistent store | |
US8402224B2 (en) | Thread-shared software code caches | |
US7092978B2 (en) | Space-efficient, depth-first parallel copying collection technique making use of work—stealing on the same structures that maintain the stack of items to be scanned | |
US8805885B2 (en) | Method, system and program product for interning invariant data objects in dynamic space constrained systems | |
US6845437B2 (en) | Computer system with heap and card table | |
US6701520B1 (en) | Preventing garbage collection of objects in object oriented computer programming languages | |
US8429633B2 (en) | Managing memory to support large-scale interprocedural static analysis for security problems | |
US20040123278A1 (en) | Persistent cache apparatus and methods | |
US11573894B2 (en) | Tracking garbage collection states of references | |
Daloze et al. | Efficient and thread-safe objects for dynamically-typed languages | |
EP4341818A1 (en) | Write barrier for remembered set maintenance in generational z garbage collector | |
Fritchie | A study of Erlang ETS table implementations and performance | |
US11789863B2 (en) | On-the-fly remembered set data structure adaptation | |
US11513954B2 (en) | Consolidated and concurrent remapping and identification for colorless roots | |
US11573794B2 (en) | Implementing state-based frame barriers to process colorless roots during concurrent execution | |
US20220308933A1 (en) | Tracking frame states of call stack frames including colorless roots | |
Meehan et al. | Java garbage collection—a generic solution? | |
Papadimitriou et al. | Exploring thread-level speculation in software: The effects of memory access tracking granularity | |
Lam et al. | Being Lazy When It Counts: Practical Constant-Time Memory Management for Functional Programming | |
Nasartschuk | Improving virtual machines using string deduplication and internal object pools | |
Babynyuk | Efficient Data Structures with GraalVM Native Image |
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 |