IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許7397179階層化オブジェクトメモリ配置のためのランタイム装置の管理
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-04
(45)【発行日】2023-12-12
(54)【発明の名称】階層化オブジェクトメモリ配置のためのランタイム装置の管理
(51)【国際特許分類】
   G06F 9/445 20180101AFI20231205BHJP
【FI】
G06F9/445 150
【請求項の数】 26
(21)【出願番号】P 2022519202
(86)(22)【出願日】2019-12-20
(65)【公表番号】
(43)【公表日】2023-04-12
(86)【国際出願番号】 CN2019126847
(87)【国際公開番号】W WO2021120140
(87)【国際公開日】2021-06-24
【審査請求日】2022-12-15
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ヤン、ビン
(72)【発明者】
【氏名】シエ、チャオ
(72)【発明者】
【氏名】チェン、ドン-ユアン
(72)【発明者】
【氏名】バオ、ジア
(72)【発明者】
【氏名】スン、ミンキュ
(72)【発明者】
【氏名】ハグハット、モハンマド、アール.
(72)【発明者】
【氏名】シ、チミン
(72)【発明者】
【氏名】チョウ、ジェン
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2017-167819(JP,A)
【文献】特開2017-138852(JP,A)
【文献】特開2012-164350(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/445
(57)【特許請求の範囲】
【請求項1】
ランタイムコンピューティング環境を管理するためのエンハンスドコンピューティングシステムであって、
プロセッサと、
前記プロセッサに結合されたメモリと
を備え、
前記メモリが、前記プロセッサによって実行されると、前記エンハンスドコンピューティングシステムに、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させることと
を行わせる一連の命令を含む、エンハンスドコンピューティングシステム。
【請求項2】
前記命令が、実行されると、前記エンハンスドコンピューティングシステムに、
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視することと、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正することと
をさらに行わせる、請求項1に記載のエンハンスドコンピューティングシステム。
【請求項3】
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、前記命令が、実行されると、前記エンハンスドコンピューティングシステムに、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させることと、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させることと
を行わせる、請求項1または2に記載のエンハンスドコンピューティングシステム。
【請求項4】
前記閾値が、前記第1のメモリ階層および前記第2のメモリ階層の相対的な容量に基づいて決定される、請求項3に記載のエンハンスドコンピューティングシステム。
【請求項5】
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、前記命令が、実行されると、前記エンハンスドコンピューティングシステムに、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換させる、請求項1から4のいずれか一項に記載のエンハンスドコンピューティングシステム。
【請求項6】
前記命令が、実行されると、前記エンハンスドコンピューティングシステムに、
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成されている、割り当てることと、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振ることと
をさらに行わせる、請求項1から5のいずれか一項に記載のエンハンスドコンピューティングシステム。
【請求項7】
ランタイムコンピューティング環境を管理するための半導体装置であって、
1または複数の基板と、
前記1または複数の基板に結合された論理と
を備え、
前記論理が、構成可能論理または固定機能ハードウェア論理のうち1または複数において少なくとも部分的に実装され、前記論理が、前記1または複数の基板に結合されて、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、移行させることと
を行う、半導体装置。
【請求項8】
前記1または複数の基板に結合された前記論理が、
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視することと、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正することと
をさらに行う、請求項7に記載の半導体装置。
【請求項9】
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、前記1または複数の基板に結合された前記論理が、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させることと、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させることと
を行う、請求項7または8に記載の半導体装置。
【請求項10】
前記閾値が、前記第1のメモリ階層および前記第2のメモリ階層の相対的な容量に基づいて決定される、請求項9に記載の半導体装置。
【請求項11】
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、前記1または複数の基板に結合された前記論理が、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換する、請求項7から10のいずれか一項に記載の半導体装置。
【請求項12】
前記1または複数の基板に結合された前記論理が、
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成されている、割り当てることと、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振ることと
をさらに行う、請求項7から11のいずれか一項に記載の半導体装置。
【請求項13】
ランタイムコンピューティング環境を管理するためのコンピュータプログラムであって、コンピューティングシステムに、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てる手順と、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振る手順と、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させる手順であって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、移行させる手順と
を実行させる、コンピュータプログラム。
【請求項14】
前記コンピューティングシステムに、
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視する手順と、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正する手順と
をさらに実行させる、請求項13に記載のコンピュータプログラム。
【請求項15】
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、前記コンピューティングシステムに、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させる手順と、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させる手順と
を実行させる、請求項13または14に記載のコンピュータプログラム。
【請求項16】
前記閾値が、前記第1のメモリ階層および前記第2のメモリ階層の相対的な容量に基づいて決定される、請求項15に記載のコンピュータプログラム。
【請求項17】
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、前記コンピューティングシステムに、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換する手順を実行させる、請求項13から16のいずれか一項に記載のコンピュータプログラム。
【請求項18】
前記コンピューティングシステムに、
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てる手順であって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成されている、割り当てる手順と、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振る手順と
をさらに実行させる、請求項13から17のいずれか一項に記載のコンピュータプログラム。
【請求項19】
請求項13から18のいずれか一項に記載のコンピュータプログラムを格納しているコンピュータ可読記憶媒体。
【請求項20】
ランタイムコンピューティング環境を管理するためのコンピューティング装置を動作させる方法であって、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てる段階と、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振る段階と、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させる段階であって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、移行させる段階と
を備える、方法。
【請求項21】
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視する段階と、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正する段階と
をさらに備える、請求項20に記載の方法。
【請求項22】
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させる段階が、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させる段階と、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させる段階と
を備える、請求項20または21に記載の方法。
【請求項23】
前記閾値が、前記第1のメモリ階層および前記第2のメモリ階層の相対的な容量に基づいて決定される、請求項22に記載の方法。
【請求項24】
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振る段階が、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換する段階を含む、請求項20から23のいずれか一項に記載の方法。
【請求項25】
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てる段階であって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成されている、割り当てる段階と、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振る段階と
をさらに備える、請求項20から24のいずれか一項に記載の方法。
【請求項26】
実行されると、プロセッサに請求項20から25のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
実施形態は、一般に、コンピュータランタイム環境のための技術に関する。より詳細には、実施形態は、階層化オブジェクトメモリ配置のためにランタイムコンピュータ装置を管理することに関する。
【背景技術】
【0002】
サーバ、クラウドインフラストラクチャ、およびデータベースコントローラなどのコンピュータベースのアプリケーションは、Java(登録商標)仮想マシンなどの仮想マシンを利用して、プラットフォーム独立環境でプログラムを実行する能力を提供する。仮想マシンは、比較的軽微なコード変更のみで、プログラムが種々のコンピューティングプラットフォームにおいて実装されることを可能にする。JAVA(登録商標)、PYTHON、およびJAVASCRIPT(登録商標)などのマネージドプログラミング言語は、仮想マシン環境で実行可能な柔軟なアプリケーションを作成するためのツールをプログラマに提供する。かかるマネージド言語では、メモリ管理、ガベージコレクション、およびホットメソッドプロファイリングを提供するマネージドランタイムが使用される。マネージドランタイムでは、アプリケーションは、通常、マシンに依存しない一連の命令(バイトコード)としてレンダリングされ、その後、実行中に解釈される。ホットメソッドプロファイラは、ランタイム情報を収集して、どのメソッドがホットスポットであるかを識別する。したがって、識別されたホットメソッドは、より高速な実行のためにジャストインタイム(JIT)コンパイラを介してネイティブコードにコンパイルすることができる。ガベージコレクタは通常、独立したスレッドで実行され、データヒープを管理およびリサイクルする。
【0003】
メモリストレージのためのオブジェクトのランタイム割り振りを管理することは、特に、異なる性能、容量、およびコストを有するメモリの2つ以上の階層を使用する異種メモリアーキテクチャにおいて、より高い性能またはより低いコストのための最適化を試みる際に課題となる。
【図面の簡単な説明】
【0004】
実施形態の種々の利点は、以下の明細書および添付の特許請求の範囲を読み、以下の図面を参照することによって、当業者に明らかになるであろう。
【0005】
図1A】従来のマネージドランタイム環境と、1または複数の実施形態による階層化オブジェクトメモリ配置を有する例示的なエンハンスドマネージドランタイム環境との比較ブロック図である。
図1B】従来のマネージドランタイム環境と、1または複数の実施形態による階層化オブジェクトメモリ配置を有する例示的な拡張マネージドランタイム環境との比較ブロック図である。
図2A】1または複数の実施形態による例示的な階層化オブジェクトメモリ配置を示すブロック図である。
図2B】1または複数の実施形態による例示的な階層化オブジェクトメモリ配置を示すブロック図である。
図3】1または複数の実施形態による例示的なホットオブジェクトプロファイラを示すブロック図である。
図4】1または複数の実施形態による例示的なホットオブジェクトプロファイラの動作を示すフローチャートである。
図5A】1または複数の実施形態による、オブジェクト構造およびコード関数への例示的拡張を示す図である。
図5B】1または複数の実施形態による、オブジェクト構造およびコード関数への例示的拡張を示す図である。
図5C】1または複数の実施形態による、オブジェクト構造およびコード関数への例示的拡張を示す図である。
図6】1または複数の実施形態による、例示的ホットオブジェクト割り振りリダイレクタの動作を示すフローチャートである。
図7A】1または複数の実施形態による例示的なオブジェクト移行を示す図である。
図7B】1または複数の実施形態による例示的なオブジェクト移行を示す図である。
図7C】1または複数の実施形態による例示的なオブジェクト移行を示す図である。
図8A】1または複数の実施形態による、例示的なオブジェクトマイグレータの動作を示すフローチャートである。
図8B】1または複数の実施形態による、例示的なオブジェクトマイグレータの動作を示すフローチャートである。
図8C】1または複数の実施形態による、例示的なオブジェクトマイグレータの動作を示すフローチャートである。
図8D】1または複数の実施形態による、例示的なオブジェクトマイグレータの動作を示すフローチャートである。
図9A】1または複数の実施形態による、階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティング装置の動作を示すフローチャートである。
図9B】1または複数の実施形態による、階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティング装置の動作を示すフローチャートである。
図9C】1または複数の実施形態による、階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティング装置の動作を示すフローチャートである。
図10A】1または複数の実施形態による、階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティングシステムを示すブロック図である。
図10B】1または複数の実施形態による、階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティングシステムを示すブロック図である。
図11】1または複数の実施形態による、階層化オブジェクトメモリ配置を有するランタイムコンピューティング環境を管理するための例示的な半導体装置を示すブロック図である。
図12】1または複数の実施形態による例示的なプロセッサを示すブロック図である。
図13】1または複数の実施形態によるマルチプロセッサベースのコンピューティングシステムの一例を示すブロック図である。
【発明を実施するための形態】
【0006】
図1Aは、Java仮想マシンなどの仮想マシン環境で動作可能な従来のマネージドランタイム環境110のブロック図を示している。従来のマネージドランタイム環境110では、ホットメソッドプロファイラ111が、メソッド呼び出しの頻度に基づいて、JITコンパイラ112によりネイティブコードメソッド115にコンパイルされるホットメソッドを識別する。ホットメソッドとして識別されないメソッド、またはJITコンパイラ112を介してコンパイルされないメソッドは、バイトコードメソッド114として解釈される。バイトコードメソッド114およびネイティブコードメソッド115を実行すると、オブジェクトヒープ116にオブジェクトが配置される。独立したスレッドで実行されるガベージコレクタ113は、オブジェクトヒープ116内のオブジェクトを管理およびリサイクルするように動作する。ホットメソッドプロファイラ111、JITコンパイラ112およびガベージコレクタ113は、ランタイムエンジンを形成することができる。バイトコードメソッド114、ネイティブコードメソッド115およびオブジェクトヒープ116は、ランタイムデータエリアに含まれ得る。
【0007】
図1Bは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による階層化オブジェクトメモリ配置を有する例示的なエンハンスドマネージドランタイム環境120のブロック図を示している。図1Aに示す複数の構成要素(ホットメソッドプロファイラ111、JITコンパイラ112、バイトコードメソッド114、およびネイティブコードメソッド115)に加えて、エンハンスドマネージドランタイム環境120は、ホットオブジェクトプロファイラ121、オブジェクト割り振りリダイレクタ122、エンハンスドガベージコレクタ123、ホットオブジェクトヒープ126、およびコールドオブジェクトヒープ127を含み得る。ホットオブジェクトヒープ126およびコールドオブジェクトヒープ127は、それぞれ、ホットまたはコールドとして指定されたオブジェクトを格納することができる。ホットオブジェクトとして指定されたオブジェクトは、コールドオブジェクトとして指定された他のオブジェクトよりも頻繁にアクセスされる可能性が高いオブジェクトである。エンハンスドガベージコレクタ123は、オブジェクトマイグレータ124を含み、オブジェクトマイグレータ124は、ホットオブジェクトヒープ126とコールドオブジェクトヒープ127との間でオブジェクトを移行させることができる。ホットオブジェクトプロファイラ121、オブジェクト割り振りリダイレクタ122、エンハンスドガベージコレクタ123、ホットオブジェクトヒープ126、およびコールドオブジェクトヒープ127はそれぞれ、ランタイム環境への拡張として(例えば、Java仮想マシンへの拡張として)コードで実装することができる。エンハンスドマネージドランタイム環境120はまた、メモリインターフェース125を含んでもよく、メモリインターフェース125は、階層化メモリアーキテクチャ内でオブジェクトを割り振り、クエリし、移動させるための好適な方法を提供するように動作する。一例として、メモリインターフェース125は、Intel(登録商標)OneAPIメモリインターフェースを介して提供され得る。ホットメソッドプロファイラ111、JITコンパイラ112、ホットオブジェクトプロファイラ121、オブジェクト割り振りリダイレクタ122、およびエンハンスドガベージコレクタ123は、エンハンスドランタイムエンジンを形成することができる。ホットオブジェクトヒープ126およびコールドオブジェクトヒープ127は、第1のメモリ階層(階層1、ホットオブジェクトヒープ)と第2のメモリ階層(階層2、コールドオブジェクトヒープ)との間で配分されて、ランタイムデータエリアに含まれ得る。バイトコードメソッド114およびネイティブコードメソッド115は、第1のメモリ階層、第2のメモリ階層、および/または他のランタイムメモリ(特定せず)内のランタイムデータエリアに含まれ得る。
【0008】
ホットオブジェクトプロファイラ121は、ホットメソッドプロファイラ111から(例えば、ホットメソッドのリストとして)ホットメソッドを受信し、ホットメソッドに基づいてホットオブジェクトを識別することができる。ホットオブジェクトプロファイラ121はまた、ホットオブジェクトヒープ126内のオブジェクトおよび/またはコールドオブジェクトヒープ127内のオブジェクトを監視し、1または複数の監視されたオブジェクトのホットネススコアを更新することができる。ホットオブジェクトプロファイラ121のさらなる詳細および特徴は、図3および図4を参照して以下でさらに説明される。
【0009】
オブジェクト割り振りリダイレクタ122は、新たに作成されたオブジェクト(すなわち、オブジェクトが作成される際のオブジェクト)のホットオブジェクトヒープ126およびコールドオブジェクトヒープ127への割り振りを管理する。オブジェクト割り振りリダイレクタ122は、JITコンパイラ112内に組み込むことができ(例えば、エンハンスドJITコンパイラを形成する)、あるいはJITコンパイラ112と密接に関連付けることができる。オブジェクト割り振りリダイレクタ122は、バイトコードメソッド114およびネイティブコードメソッド115(例えば、図5B図5Cを参照)への拡張を採用することができる。オブジェクト割り振りリダイレクタ122の追加の詳細および特徴は、図5A図5Cおよび図6を参照して以下でさらに説明される。
【0010】
エンハンスドガベージコレクタ123は、ホットオブジェクトヒープ126およびコールドオブジェクトヒープ127内のオブジェクトを管理およびリサイクルするように動作する。オブジェクトマイグレータ124は、ガベージコレクションプロセスの一部として動作し、各オブジェクトのホットネススコアに基づいて、ホットオブジェクトヒープ126とコールドオブジェクトヒープ127との間でオブジェクトを移行させる。エンハンスドガベージコレクタ123は、JITコンパイラ112およびオブジェクト割り振りリダイレクタ122のための実行スレッドとは独立した実行スレッドで実行することができる。エンハンスドガベージコレクタ123(オブジェクトマイグレータ124を含む)のさらなる詳細および特徴は、図7A図7Cおよび図8A図8Dを参照して以下でさらに説明される。
【0011】
ホットオブジェクトヒープ126は、メモリ階層1とラベル付けされた第1のメモリ階層にホットオブジェクトを格納し得る。コールドオブジェクトヒープ127は、メモリ階層2とラベル付けされた第2のメモリ階層にコールドオブジェクトを格納し得る。メモリ階層1は、メモリ階層2のメモリ構成要素と比較して異なるタイプまたは品質のメモリ構成要素を含み得る。例えば、一方において、メモリ階層1は、より高い性能、より高いコスト、および/またはより低い容量を有するメモリ構成要素を含んでもよく、他方において、メモリ階層2は、より低いコスト、より低い性能、および/またはより高い容量を有するメモリ構成要素を含んでもよい。例えば、メモリ階層1は、(例えば、より高いコストに起因して)容量に対する厳しい制約を有し得る一方で、メモリ階層2は、(例えば、より低いコストに起因して)容量がより豊富であってもよい。一例として、メモリ階層1はDRAM(ダイナミックランダムアクセスメモリ)を含んでもよく、メモリ階層2はIntel(登録商標)Optane(商標)メモリを含んでもよい。別の例示として、メモリ階層1はeDRAM(埋め込みDRAM)を含んでもよく、メモリ階層2は従来のDRAMを含んでもよい。他のメモリ階層の組み合わせも可能である。ホットオブジェクトヒープ126およびコールドオブジェクトヒープ127のさらなる詳細および特徴は、図2および図7A図7Cを参照して以下でさらに説明される。
【0012】
図2Aは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態によるハイブリッドメモリアーキテクチャ210内の例示的な階層化オブジェクトメモリ配置を示すブロック図を示している。ハイブリッドメモリアーキテクチャ210は、(メモリ階層1としてラベル付けされた)第1のメモリ階層に維持されるホットオブジェクトヒープ211と、(メモリ階層2としてラベル付けされた)第2のメモリ階層に維持されるコールドオブジェクトヒープ214とを含み得る。一部の実施形態では、ハイブリッドメモリアーキテクチャは、3つ以上のメモリ階層を有してもよく、例えば、以下に説明するように3つのメモリ階層が図2Bに示されていることが理解されよう。メモリ階層1およびメモリ階層2は、等しいサイズのブロックとして示されているが、メモリ階層1およびメモリ階層2はそれぞれ、同じメモリサイズ/容量を有してもよく、または異なるメモリサイズ/容量を有してもよいことが理解されよう。各メモリ階層のサイズ/容量は、性能および/またはコストを考慮して選択することができる。例えば、高い性能(例えば、帯域幅、アクセスレイテンシなど)が所望される場合、階層2メモリ(より低い性能のメモリ)に対する階層1メモリ(より高い性能のメモリ)の比率を比較的高くすることが選択されてもよい。別の例として、より低い全体コストが所望される場合、階層2メモリ(より低いコスト)に対する階層1メモリ(より高いコスト)の比率を比較的低くすることが選択されてもよい。
【0013】
ホットオブジェクトヒープ211は、ホットオブジェクトとして指定されたオブジェクトを格納することができる。コールドオブジェクトヒープ214は、コールドオブジェクトとして指定されたオブジェクトを格納することができる。それぞれ図1Bを参照して上述したように、ホットオブジェクトヒープ211はホットオブジェクトヒープ126であってもよく、コールドオブジェクトヒープ214はコールドオブジェクトヒープ127であってもよい。上述したように、ホットオブジェクトとして指定されたオブジェクトは、他のオブジェクトよりも頻繁にアクセスされる可能性が高いオブジェクトである。コールドオブジェクトとして指定されたオブジェクトは、他のオブジェクトよりも頻繁にアクセスされない可能性が高いオブジェクトである。各オブジェクトは、オブジェクトがホットまたはコールドとして指定されるかどうかを判定する際に使用され得るホットネススコアを含み得る。オブジェクトのホットネススコアは、例えば、オブジェクトがホットメソッドによって作成または割り振られたか否か、および/またはオブジェクト呼び出しまたはアクセスの頻度に基づいてもよい。
【0014】
オブジェクトクラスは、最も関連するメソッドおよびそれらの関連するデータを含むように編成され、異なるクラスは最もデータ相互依存性が低くなる。すなわち、1つのクラス内のメソッドは、別のクラス内のデータフィールドに直接アクセスせず、その代わりに、getField()およびsetField()などの明確に定義されたインターフェース/メソッドを介してアクセスする。ホットメソッドが属するクラスインスタンスがホットオブジェクトとみなされる場合、ホットオブジェクトのメモリ配置(すなわち、ホットメソッドによってアクセスされるメモリ配置)は、全体的な性能に影響を与える可能性が最も高い。注目すべきは、第2層のオブジェクトアクセス(すなわち、ホットオブジェクトからの別のオブジェクトのデータを参照すること)は、そのオブジェクトのgetField()/setField()がホットメソッドになったときに自然にキャプチャされ得ることである。
【0015】
したがって、オブジェクトのホットネスに基づいてメモリ階層間でオブジェクトを配分することにより、ハイブリッドメモリアーキテクチャの性能および/またはコストを最適化または向上させる能力が促進される。例えば、頻繁にアクセスされる(またはアクセスされる可能性が高い)オブジェクトは、それほど頻繁にアクセスされないオブジェクトと比較して性能により大きな影響を与えるため、ホットオブジェクトをより高性能のメモリ階層に割り振ることで、全体的な性能の改善が促進される。同様に、コールドオブジェクトをより低いコストの(しかしより低い性能の)メモリ階層に割り振ることで、全体的な性能に対する影響がより小さくなるが、これは、頻繁にアクセスされないオブジェクトの性能差が、全体的な性能における有意な差をもたらす可能性が低いためである。それでも、コールドオブジェクトをより低いコストのメモリ階層に割り振ることは、それらのコールドオブジェクトをよりコストの高いメモリ階層に配置することよりもコスト効率が高くなる。全体として、本明細書で説明される階層化オブジェクトメモリ配置技術は、メモリ階層内の低性能メモリの使用によって引き起こされる性能の劣化を最小限に抑えながら、メモリコストを削減することができる。
【0016】
1または複数の実施形態では、オブジェクトはさらに、オブジェクトの相対年齢(例えば、オブジェクトが作成または割り振られてからの時間の長さ)に基づいて、ヤングまたはオールドとしての指定を有し得る。オブジェクトは、パラメータまたはフィールドを含むことができ、パラメータまたはフィールドは、オブジェクトがヤングであるかまたはオールドであるかを示すためにマーキング(またはフラグ付け)され得る。ヤングまたはオールドとしてフラグ付けされたオブジェクトを処理する多くの方法が存在してもよく、これには、それらを別々のスペースまたはストレージエリアに編成することが含まれるが、これに限定されない。図2Aに示すように、ホットオブジェクトヒープ211は、ヤングオブジェクト212(すなわち、ヤングと指定されたオブジェクト)およびオールドオブジェクト213(すなわち、オールドと指定されたオブジェクト)を含み得る。同様に、コールドオブジェクトヒープ214は、ヤングオブジェクト215(すなわち、ヤングと指定されたオブジェクト)およびオールドオブジェクト216(すなわち、オールドと指定されたオブジェクト)を含み得る。オブジェクトは、ヤングオブジェクトヒープ(ヤングオブジェクトを含む)およびオールドオブジェクトヒープ(オールドオブジェクトを含む)に関して概念的に編成することができるが、オブジェクトの相対年齢は、オブジェクトのアクセス頻度またはホットネスとほとんど(または全く)関係がない場合がある。例えば、一部のヤングオブジェクトは、短時間しか存在しなかった可能性があるが、頻繁に(またはまれに)アクセスされる可能性がある。対照的に、一部のオールドオブジェクトは、比較的長い期間存在していた可能性があるが、まれにしか(または一部の例では頻繁に)アクセスされない可能性がある。したがって、目標が、ハイブリッドメモリアーキテクチャにおけるメモリ性能および/または低コストを最適化または向上させることである場合、オブジェクト年齢(ヤングであるか、オールドであるか)は、異なるメモリ階層間でオブジェクトを配分するための適切な基準にはならない。したがって、メモリ階層1およびメモリ階層2はそれぞれ、ヤングオブジェクトおよびオールドオブジェクトの両方を含み得る。特定のメモリ階層は、ヤングオブジェクトのみを含んでもよく、またはオールドオブジェクトのみを含んでもよいことが理解されよう。
【0017】
図2Bは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態によるハイブリッドメモリアーキテクチャ220内の例示的な階層化オブジェクトメモリ配置を示すブロック図を示している。ハイブリッドメモリアーキテクチャ220は、(メモリ階層1としてラベル付けされた)第1のメモリ階層に維持される第1のオブジェクトヒープ221と、(メモリ階層2としてラベル付けされた)第2のメモリ階層に維持される第2のオブジェクトヒープ224と、(メモリ階層3としてラベル付けされた)第3のメモリ階層に維持される第3のオブジェクトヒープ227とを含み得る。第1のオブジェクトヒープ221は最もホットなオブジェクトを含むことができ、第2のオブジェクトヒープ224は中間レベルのホットネスのオブジェクトを含むことができ、第3のオブジェクトヒープ227は最もコールドなオブジェクトを含むことができ、いずれの場合もオブジェクトホットネススコアに基づいている。メモリ階層1、メモリ階層2、およびメモリ階層3は、等しいサイズのブロックとして示されているが、メモリ階層はそれぞれ、同じメモリサイズ/容量を有してもよく、または異なるメモリサイズ/容量を有してもよいことが理解されよう。各メモリ階層のサイズ/容量は、性能および/またはコストを考慮して選択することができる。
【0018】
1または複数の実施形態では、オブジェクトはさらに、上述したように、オブジェクトの相対年齢(例えば、オブジェクトが作成または割り振られてからの時間の長さ)に基づいて、ヤングまたはオールドとしての指定を有し得る。図2Bに示すように、第1のオブジェクトヒープ221は、ヤングオブジェクト222(すなわち、ヤングと指定されたオブジェクト)およびオールドオブジェクト223(すなわち、オールドと指定されたオブジェクト)を含むことができ、同様に、第2のオブジェクトヒープ224は、ヤングオブジェクト225およびオールドオブジェクト226を含むことができ、第3のオブジェクトヒープ227は、ヤングオブジェクト228およびオールドオブジェクト229を含むことができる。上述したように、オブジェクトは、ヤングオブジェクトヒープ(ヤングオブジェクトを含む)およびオールドオブジェクトヒープ(オールドオブジェクトを含む)に関して概念的に編成することができるが、オブジェクトの相対年齢は、オブジェクトのアクセス頻度またはホットネスとほとんど(または全く)関係がない場合があるので、オブジェクト年齢(ヤングであるか、オールドであるか)は、異なるメモリ階層間でオブジェクトを配分するための適切な基準にはならない場合がある。したがって、各メモリ階層は、ヤングオブジェクトおよびオールドオブジェクトの両方を含み得る。一部のメモリ階層は、ヤングオブジェクトのみを含んでもよく、またはオールドオブジェクトのみを含んでもよいことが理解されよう。
【0019】
図3は、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による例示的なホットオブジェクトプロファイラ121の機能を示すブロック図を示している。オブジェクトは、例えば、オブジェクトがホットメソッドによって作成または割り振られたか否か、および/またはオブジェクト呼び出しまたはアクセスの頻度に基づくホットネススコアを有してもよい。ホットオブジェクトプロファイラ121は、ホットメソッドプロファイラ111から、メソッド呼び出しの頻度に基づいてホットメソッドとして識別されたメソッドを受信する。ホットメソッドプロファイラ111からのホットメソッドは、例えば、
hot_method_list:

method_1,
method_2,
...
method_i,
...

などのメソッドのリストとして受信され得る。
【0020】
これらのホットメソッドは、ホットオブジェクトを効率的に識別するためにホットプロファイラ121によって使用される。受信した各ホットメソッドについて、ホットオブジェクトプロファイラ121は、メソッド内で内部的に割り振られた(作成された)オブジェクトである内部オブジェクト311と、メソッドの外部的に割り振られた(作成された)オブジェクトであってメソッド呼び出しの引数としてメソッドに渡された外部オブジェクト312とを識別することができる。各内部オブジェクト311について、ホットオブジェクトプロファイラ121は、内部オブジェクトタイプ(またはクラス)をホット(ラベル313)として識別することができる。この識別は、以下でさらに説明するように、そのオブジェクトタイプの(ホットメソッドによって)新たに作成されたオブジェクトをホットオブジェクトヒープに割り振る際に、オブジェクト割り振りリダイレクタ122によって使用することができる。
【0021】
各外部オブジェクト312について、ホットオブジェクトプロファイラ121は、引数(ラベル314)として参照される各オブジェクトの呼び出しをカウントすることができる。一部の実施形態では、ホットオブジェクトプロファイラ121は、例えば、
external_obj_list(i)[with method_i from hot_method_list]
{method_i,eobject_1,weight_1(%)}
{method_i,eobject_2,weight_2(%)}
{method_i,eobject_3,weight_3(%)}
など、呼び出し頻度に基づいてオブジェクトの重み付きリストを生成することができる。
【0022】
次いで、ホットオブジェクトプロファイラ121は、フィルタ(ラベル315)を適用して、より低い呼び出し頻度(または重み付きリスト内のより低い重み)を有するオブジェクトを選別し、その結果、より高い呼び出し頻度(または重み付きリスト内のより高い重み)を有するオブジェクトが得られ、次いで、これに、ホットオブジェクトに起因するホットネススコアを割り当てることができる(ラベル316)。オブジェクトフィルタリングは、重み(%)の閾値(例えば、所定の閾値)に基づいてもよく、またはメモリ階層バジェットまたは相対的なメモリ階層の可用性に基づいて動的に実行されてもよい。ホットオブジェクトプロファイラ121は、ホットネススコアをかかる各ホットオブジェクトに割り当てることができる。一例として、ホットオブジェクトに割り当てられたホットネススコアは2の値であってもよい。フィルタ315によって選別されたより低い呼び出し頻度(またはより低い重み)のオブジェクトは、ホットオブジェクトプロファイラ121によってコールドオブジェクト(ラベル317)に起因するホットネススコアを割り当てられてもよく、かかるコールドオブジェクトの各々はホットネススコアを割り当てられてもよく、一例として、コールドオブジェクトに割り当てられたホットネススコアは0の値であってもよい。ホットオブジェクトプロファイラ121によってホットオブジェクトまたはコールドオブジェクトとして識別されたオブジェクトは、エンハンスドガベージコレクタ123による後続のガベージコレクションサイクルにおいて、適切なホット/コールドオブジェクトヒープへの移行(再配置)を受けて、それらの現在のメモリ位置(現在のオブジェクトヒープ)に留まることができる。
【0023】
ホットオブジェクトプロファイラ121はまた、ヒープオブジェクト(ラベル318)を監視し、1または複数の監視されたオブジェクトのホットネススコアを更新することができる。監視されるヒープオブジェクトは、ホットオブジェクトヒープ126内のオブジェクトおよび/またはコールドオブジェクトヒープ127内のオブジェクトを含み得る。監視されるヒープオブジェクトごとに、ホットオブジェクトプロファイラ121は、各オブジェクトの呼び出しをカウントすることができる。次いで、ホットオブジェクトプロファイラ121は、ホットメソッドによる呼び出しをカウントすることに基づいて、ホットネススコアを修正することができる。一部の実施形態では、オブジェクトのホットネススコアは、ホットメソッドによって呼び出されたオブジェクトについて増加されてもよく(例えば、ホットネススコアを1だけ増加させる)、オブジェクトのホットネススコアは、ホットメソッドによって現在呼び出されていないオブジェクトについて減少されてもよい(例えば、ホットネススコアを1だけ減少させる)。一部の実施形態では、オブジェクトのホットネススコアは、ホットメソッドによって呼び出されたオブジェクトについてホット値にリセットされてもよく(例えば、ホットネスを値2にリセットする)、オブジェクトのホットネススコアは、ホットメソッドによって現在呼び出されていないオブジェクトについてコールド値にリセットされてもよい(例えば、ホットネスを値0にリセットする)。
【0024】
図4は、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による例示的なホットオブジェクトプロファイラ121によって実行される方法410を示すフローチャートである。ブロック412において、ホットオブジェクトプロファイラ121は、ホットメソッドのリストを受信することができる。ホットメソッドのリストは、ホットメソッドプロファイラ111から取得され得る。受信されたホットメソッドのリスト内の各ホットなmethod_iは、以下に説明されるように評価することができる。
【0025】
ブロック414において、受信されたホットなmethod_iに対する(例えば、内部オブジェクト311の)各内部オブジェクトは、ホットオブジェクトとして識別することができる。ホットオブジェクトプロファイラ121は、ホットオブジェクトとして識別されたかかる内部オブジェクトの各々にホットネススコアを割り当てることができる(例えば、ホット内部オブジェクトに割り当てられたホットネススコアは1の値であってもよい)。
【0026】
ブロック416において、ホットオブジェクトプロファイラ121は、ホットなmethod_iにおける引数として参照される各外部引数の呼び出しをカウントすることができる。一部の実施形態では、ホットオブジェクトプロファイラ121は、呼び出し頻度に基づいてオブジェクトの重み付きリストを生成することができる。
【0027】
ブロック418において、ホットオブジェクトプロファイラ121は、ホットメソッドのリストの終わりに到達したか否かを判定することができる。ノーの場合、プロセスはブロック414に戻り、ホットメソッドリスト内の次のホットメソッドを評価することができる。イエスの場合、プロセスはブロック420に進むことができる。
【0028】
ブロック420において、ホットオブジェクトプロファイラ121は、呼び出し頻度に基づいて外部オブジェクトをホット(またはコールド)として識別することができる。ホットオブジェクトプロファイラ121は、より低い呼び出し頻度(または重み付きリスト内のより低い重み)を有するオブジェクトをフィルタリングして、ホットオブジェクトとして識別され得るより高い呼び出し頻度(または重み付きリスト内のより高い重み)を有するオブジェクトをもたらし得る。ホットオブジェクトプロファイラ121は、オブジェクトがホットであることを示すために、かかる各ホットオブジェクトにホットネススコアを割り当てることができる(例えば、ホット外部オブジェクトに割り当てられたホットネススコアは2の値であってもよい)。フィルタリングされた外部オブジェクト、すなわち、より低い呼び出し頻度またはより低い重みを有する外部オブジェクトは、コールドオブジェクトとして識別することができ、ホットオブジェクトプロファイラ121は、コールドオブジェクトとして識別されたオブジェクトの各々にホットネススコア(例えば、0の値)を割り当てることができる。
【0029】
図5Aは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による例示的な拡張オブジェクト構造510を示している。各オブジェクトは、特定のプログラムまたはアプリケーションのために設計されるかまたは他の方法で決定され得るようなオリジナルオブジェクト構造511を有し得る。2つのフィールド、すなわちオブジェクト割り振りアドレス512およびオブジェクトホットネス513を、各オブジェクトについてオリジナルオブジェクト構造511に追加することができる。オブジェクト割り振りアドレス512は、オブジェクトの割り振りのためのアドレス、すなわち、オブジェクトを割り振る(作成する)命令のためのアドレスを提供する。オブジェクトホットネス513は、例えば、上述したオブジェクトのホットネススコアなどのオブジェクトのホットネスを示す値を提供する。オブジェクトホットネス513は、オブジェクトの割り振り(作成)時に割り当てられる初期値を有し得る。異なるオブジェクトアロケータは、オブジェクトの割り振り時にオブジェクトホットネス513に異なる値を割り当てることができる。一部の実施形態では、デフォルト位置として、初期の割り振り時に、オブジェクトはコールドとみなされてもよく、オブジェクトホットネスのデフォルト値は、オブジェクトがホットであると識別されない限り、0に設定されてもよい。オブジェクトホットネス513は、ホットオブジェクトプロファイラ121、オブジェクト割り振りリダイレクタ122、およびエンハンスドガベージコレクタ123によってアクセスまたは修正され得る。
【0030】
図5Bは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態によるネイティブコード関数への例示的拡張520を示している。ネイティブコード関数521は、ネイティブコード(すなわち、特定のコンピューティングプラットフォームまたは環境のためのコード)で記述されたまたはコンパイルされた任意の関数を含んでもよく、JITコンパイラ112によってランタイムにコンパイルされた関数を含んでもよい。ネイティブコード関数の拡張セットを提供するために、2つの割り振り関数、hot_heap_allocator(size,hotness)(ラベル522)およびcold_heap_allocator(size,hotness)(ラベル523)を追加することができる。サイズパラメータは、そのオブジェクトに割り振られるメモリの量を表す。ホットネスパラメータは、割り振り時に(例えば、オブジェクトホットネス513を介して)オブジェクトに割り当てられ得る初期ホットネススコアを表す。関数hot_heap_allocator()は、ホットオブジェクトヒープ(例えば、ホットオブジェクトヒープ126)内のホットオブジェクトを割り振るために呼び出され得る。関数cold_heap_allocator()は、コールドオブジェクトヒープ(例えば、コールドオブジェクトヒープ127)内のコールドオブジェクトを割り振るために呼び出され得る。オブジェクト割り振りリダイレクタ122は、(上述のように識別されたホット外部オブジェクトなどの)ホット外部オブジェクト524の割り振りを割り振り関数hot_heap_allocator(size,hotness=2)にリダイレクトし、(上述のように識別されたホット内部オブジェクトなどの)ホット内部オブジェクト525の割り振りを割り振り関数hot_heap_allocator(size,hotness=1)にリダイレクトすることができる。ホットとして識別されない他のオブジェクト526に対する割り振りは、デフォルトのネイティブコードアロケータであり得るcold_heap_allocator(size,hotness=0)を対象としてもよい。
【0031】
図5Cは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態によるバイトコード関数への例示的拡張530を示している。バイトコード関数531は、実行中に仮想マシン(例えば、Java仮想マシン)のランタイム環境によって解釈される一連のマシン独立命令に書き込まれるか、またはコンパイルされる任意の関数を含み得る。2つの割り振り関数、すなわちnew_instance_hot()(ラベル532)およびnew_instance_cold()(ラベル533)を追加して、バイトコード関数の拡張セットを提供することができる。上述のネイティブコード関数の拡張と同様に、メモリサイズおよびオブジェクトホットネスのパラメータを拡張バイトコード関数の各々に含めることができる。関数new_instance_hot()は、ホットオブジェクトヒープ(例えば、ホットオブジェクトヒープ126)内のホットオブジェクトを割り振るために呼び出され得る。関数new_instance_cold()は、コールドオブジェクトヒープ(例えば、コールドオブジェクトヒープ127)内のコールドオブジェクトを割り振るために呼び出され得る。オブジェクト割り振りリダイレクタ122は、ホット外部オブジェクト534(ホットであると識別されたが、メソッドがホットメソッドではない外部オブジェクトなど)の割り振りを割り振り関数new_instance_hot()にリダイレクトすることができる。ホットとして識別されない他のオブジェクト535に対する割り振りは、デフォルトバイトコードアロケータであり得るnew_instance_cold()を対象としてもよい。
【0032】
図6は、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態によるオブジェクト割り振りリダイレクタ122によって実行される例示的な方法610を示すフローチャートである。方法610によるオブジェクト割り振りリダイレクションは、ホットオブジェクトプロファイラ121によって識別されたホットオブジェクトに対するオブジェクトの割り振りを処理することができる。コールドオブジェクト(またはホットオブジェクトとして識別されない任意のオブジェクト)に対するデフォルトの割り振りは、上述のように、cold_heap_allocator()(ネイティブコード呼び出しの場合)またはnew_instance_cold()(バイトコード呼び出しの場合)への呼び出しによって処理され得る。
【0033】
ブロック611では、割り振りアドレスが属するmethod_iが調べられる。
【0034】
ブロック612において、method_iがJITコンパイルを介してネイティブコードに既にコンパイルされているか否か(例えば、method_iがホットメソッドであるか否か)を判定するためのクエリが行われる。イエスの場合、プロセスはブロック613に進むことができ、ノーの場合、プロセスはブロック614に進むことができる。
【0035】
ブロック613において、ネイティブコード関数がJITコンパイルを介して実行される。cold_heap_allocator()への呼び出しは、オブジェクトをホットオブジェクトヒープ126に割り振るhot_heap_allocator()への呼び出しと置換されてもよい(すなわち、それにリダイレクトされてもよい)。
【0036】
ブロック614において、method_iがJITコンパイルを介してネイティブコードにコンパイルされる予定であるか否かが判定される(例えば、method_iがホットメソッドとして新たに識別される)。ノーの場合、プロセスはブロック615に進むことができ、イエスの場合、プロセスはブロック616に進むことができる。
【0037】
ブロック615において、仮想マシンのランタイム環境による解釈を介してバイトコード関数が実行される。new_instance_cold()への呼び出しは、オブジェクトをホットオブジェクトヒープ126に割り振るnew_instance_hot()への呼び出しと置換されてもよい(すなわち、それにリダイレクトされてもよい)。
【0038】
ブロック616において、バイトコード関数は、仮想マシンのランタイム環境による解釈を介して実行されるが、それぞれのメソッドは、実行のためにJITコンパイラ112によってネイティブコードにコンパイルされる。new_instance_cold()への呼び出しは、オブジェクトをホットオブジェクトヒープ126に割り振るhot_heap_allocator()へのネイティブコード呼び出しにコンパイルされ得る。
【0039】
図7A図7Cは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による例示的なオブジェクト移行を示している。オブジェクト移行は、オブジェクトがスキャンまたはレビューされ得るガベージコレクションプロセス中に、オブジェクトマイグレータ124(エンハンスドガベージコレクタ123の一部)によって実行され得る。コールドオブジェクトヒープからホットオブジェクトヒープへオブジェクトを移行させることは、オブジェクト昇格のプロセスとみなすことができる。オブジェクトをホットオブジェクトヒープからコールドオブジェクトヒープに移行させることは、オブジェクト降格のプロセスとみなすことができる。
【0040】
図7Aにおいて、オブジェクト移行710は、オブジェクトの世代指定(すなわち、ヤングオブジェクトまたはオールドオブジェクト)を考慮せずに、ホットオブジェクトヒープ211とコールドオブジェクトヒープ214との間でオブジェクトを移行させることを示している。ガベージコレクションプロセス中に、ホットオブジェクトとして識別されたオブジェクト(例えば、オブジェクトホットネスが0などの閾値を超える)がコールドオブジェクトヒープ214に常駐する場合、オブジェクトマイグレータ124は、そのオブジェクトをホットオブジェクトヒープ211に移動させる(すなわち、オブジェクト昇格)(ラベル711)。同様に、ガベージコレクションプロセス中に、コールドオブジェクトとして識別されたオブジェクト(例えば、オブジェクトホットネスが0などの閾値以下)がホットオブジェクトヒープ211に常駐する場合、オブジェクトマイグレータ124は、そのオブジェクトをコールドオブジェクトヒープ214に移動させる(すなわち、オブジェクト降格)(ラベル712)。
【0041】
図7Bにおいて、オブジェクト移行720は、コールドオブジェクトヒープ214からホットオブジェクトヒープ211にオブジェクトを昇格させることを示しており、ホットオブジェクトヒープ211は、ヤングオブジェクト212およびオールドオブジェクト213を有し得、コールドオブジェクトヒープ214は、ヤングオブジェクト215およびオールドオブジェクト216を有し得る。ガベージコレクションプロセス中に、コールドオブジェクトヒープ214に常駐するヤングオブジェクト215がホットオブジェクトとして識別された場合、オブジェクトマイグレータ124は、そのオブジェクトをホットオブジェクトヒープ211に移動させる。ホットオブジェクトがエージングされた場合、オブジェクトはホットオールドオブジェクト213として格納される(ラベル721)。ただし、ホットオブジェクトがエージングされていない場合、オブジェクトはホットヤングオブジェクト212として格納される(ラベル722)。一部の実施形態では、コールドオールドオブジェクト216がホットオブジェクトとして識別された場合、オブジェクトは、ガベージコレクションプロセス中にホットオールドオブジェクト213に昇格され得る(ラベル723)。
【0042】
図7Cにおいて、オブジェクト移行730は、オブジェクトをホットオブジェクトヒープ211からコールドオブジェクトヒープ214に降格することを示しており、ホットオブジェクトヒープ211は、ヤングオブジェクト212およびオールドオブジェクト213を有し得、コールドオブジェクトヒープ214は、ヤングオブジェクト215およびオールドオブジェクト216を有し得る。ガベージコレクションプロセス中に、ホットオブジェクトヒープ211に常駐するヤングオブジェクト212がコールドオブジェクトとして識別された場合、オブジェクトマイグレータ124は、そのオブジェクトをコールドオブジェクトヒープ214に移動させる。コールドオブジェクトがエージングされた場合、オブジェクトはコールドオールドオブジェクト216として格納される(ラベル731)。ただし、コールドオブジェクトがエージングされていない場合、オブジェクトはコールドヤングオブジェクト215として格納される(ラベル732)。また、ガベージコレクションプロセス中に、ホットオブジェクトヒープ211に常駐するオールドオブジェクト213がコールドオブジェクトとして識別された場合、オブジェクトマイグレータ124は、そのオブジェクトをオールドオブジェクト216としてコールドオブジェクトヒープ214に移動させる。
【0043】
一部の実施形態では、ホットオブジェクトヒープ211とコールドオブジェクトヒープ214との間でオブジェクトを移行させることは、第1のオブジェクトに関連付けられたホットネススコアが閾値より大きい場合、コールドオブジェクトヒープからホットオブジェクトヒープに第1のオブジェクトを移動させることを含んでもよく、第2のオブジェクトに関連付けられたホットネススコアが閾値以下である場合、ホットオブジェクトヒープからコールドオブジェクトヒープに第2のオブジェクトを移動させることを含んでもよい。一部の実施形態において、閾値は、第1階層メモリのサイズに基づいて決定されてもよい。例えば、より大きな第1階層メモリの場合、ホットオブジェクトヒープはより多くの数のホットオブジェクトを保持することができるため、ホットネス閾値をより低く設定することができ、その結果、ホットオブジェクトヒープ内により多くのホットオブジェクトがもたらされる。別の例として、より小さい第1階層メモリの場合、ホットオブジェクトヒープはより少ない数のホットオブジェクトのみを保持することができるので、ホットネス閾値をより高く設定することができ、その結果、ホットオブジェクトヒープ内により少ないホットオブジェクトがもたらされる。一部の実施形態において、閾値は、第1階層メモリおよび第2階層メモリの相対的な容量に基づいて決定されてもよい。一部の実施形態では、閾値は、頻繁に使用される特定のオブジェクトタイプをホットオブジェクトとしてキャプチャするなど、作業負荷特性に基づいて決定されてもよい。
【0044】
図8A図8Dは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による例示的なオブジェクトマイグレータの動作を示すフローチャートを提供する。オブジェクト移行は、ガベージコレクションプロセス中にオブジェクトマイグレータ124(エンハンスドガベージコレクタ123の一部)によって実行され得る。
【0045】
図8Aは、オブジェクト年齢に関係なくオブジェクトを昇格させることを含むオブジェクト移行の方法810を示すフローチャートである。ブロック812において、コールドオブジェクトヒープ(コールドオブジェクトヒープ214など)内のオブジェクトがスキャンされる。
【0046】
ブロック814において、スキャンされたオブジェクト(k)がホットオブジェクトであるか否かを判定するためのクエリが行われる。イエス(すなわち、オブジェクトが現在ホットである)場合、プロセスはブロック816に進むことができ、ノー(すなわち、オブジェクトがコールドのままである)場合、プロセスはブロック818に進むことができる。
【0047】
ブロック816で、ホットオブジェクト(k)がコールドオブジェクトヒープから移動され(すなわち昇格され)、ホットオブジェクトヒープ(ホットオブジェクトヒープ211など)に格納される。
【0048】
ブロック818において、エンハンスドガベージコレクタ123は、コールドオブジェクトヒープ内のオブジェクトの終わりに到達したか否かを判定することができる。ノーの場合、プロセスはブロック814に戻り、コールドオブジェクトヒープ内の次のオブジェクトを評価することができる。イエスの場合、プロセスは、図8Bを参照して以下で説明されるような手順を継続することができる。ヒープ内のオブジェクトをグループとしてスキャンし、次いで一度に1つのオブジェクトを評価することができ、またはヒープ内の各オブジェクトをスキャンし、一度に1つのオブジェクトを評価することができることが理解されよう。
【0049】
図8Bは、オブジェクト年齢に関係なくオブジェクトを降格させることを含むオブジェクト移行の方法820を示すフローチャートである。ブロック822において、ホットオブジェクトヒープ(ホットオブジェクトヒープ211など)内のオブジェクトがスキャンされる。
【0050】
ブロック824において、スキャンされたオブジェクト(k)がホットオブジェクトであるか否かを判定するためのクエリが行われる。ノー(すなわち、オブジェクトが現在コールド)の場合、プロセスはブロック826に進むことができ、イエス(すなわち、オブジェクトがホットのまま)の場合、プロセスはブロック828に進むことができる。
【0051】
ブロック826で、ホットオブジェクト(k)がホットオブジェクトヒープから移動され(すなわち降格され)、コールドオブジェクトヒープ(コールドオブジェクトヒープ214など)に格納される。
【0052】
ブロック828において、エンハンスドガベージコレクタ123は、ホットオブジェクトヒープ内のオブジェクトの終わりに到達したか否かを判定することができる。ノーの場合、プロセスはブロック824に戻り、ホットオブジェクトヒープ内の次のオブジェクトを評価することができる。イエスの場合、プロセスは終了することができる。ヒープ内のオブジェクトをグループとしてスキャンし、次いで一度に1つのオブジェクトを評価することができ、またはヒープ内の各オブジェクトをスキャンし、一度に1つのオブジェクトを評価することができることが理解されよう。方法810および方法820において概説されたプロセスは、ガベージコレクションプロセスの一部としてオブジェクトの昇格および降格のための単一のプロセスに組み合わされ得ることがさらに理解されよう。
【0053】
図8Cは、オブジェクト年齢を考慮したオブジェクト昇格を含むオブジェクト移行の方法830を示すフローチャートである。ブロック831において、コールドオブジェクトヒープ214内のオブジェクト(ヤングオブジェクト215および/またはオールドオブジェクト216を含み得る)がスキャンされる。
【0054】
ブロック832において、スキャンされたオブジェクト(k)がエージングされたか否かを判定するためのクエリが行われる。イエス(すなわち、オブジェクトが現在オールド)の場合、プロセスはブロック833に進むことができ、ノー(すなわち、オブジェクトがヤングのまま)の場合、プロセスはブロック834に進むことができる。一部の実施形態では、オブジェクトが既にオールドとしてマーキングされている場合、ブロック832~833におけるオブジェクト年齢に関する手順はスキップされ得る。一部の実施形態では、ブロック832~833におけるオブジェクト年齢に関する手順は、代わりに、オブジェクト年齢を監視することに関する別個のプロセスとして実行され得る。
【0055】
ブロック833において、オブジェクト(k)は、オールドオブジェクトとしてマーキング(またはフラグ付け)され得る。例えば、オブジェクト(k)のパラメータまたはフィールドは、ヤングオブジェクトとしての表示からオールドオブジェクトの表示に変更されてもよい。
【0056】
ブロック834において、スキャンされたオブジェクト(k)がホットオブジェクトであるか否かを判定するためのクエリが行われる。イエス(すなわち、オブジェクトが現在ホットである)場合、プロセスはブロック835に進むことができ、ノー(すなわち、オブジェクトがコールドのままである)場合、プロセスはブロック836に進むことができる。
【0057】
ブロック835で、ホットオブジェクト(k)がコールドオブジェクトヒープから移動され(すなわち昇格され)、ホットオブジェクトヒープ(ホットオブジェクトヒープ211など)に格納される。オブジェクト(k)がオールドオブジェクトとしてマーキングされた場合、それはホットオールドオブジェクト213のうちの1つになり、オブジェクト(k)がヤングオブジェクトとしてマーキングされた場合、それはホットヤングオブジェクト212のうちの1つになる。
【0058】
ブロック836において、エンハンスドガベージコレクタ123は、コールドオブジェクトヒープ内のオブジェクトの終わりに到達したか否かを判定することができる。ノーの場合、プロセスはブロック832に戻り、コールドオブジェクトヒープ内の次のオブジェクトを評価することができる。イエスの場合、プロセスは、図8Dを参照して以下で説明されるような手順を継続することができる。ヒープ内のオブジェクトをグループとしてスキャンし、次いで一度に1つのオブジェクトを評価することができ、またはヒープ内の各オブジェクトをスキャンし、一度に1つのオブジェクトを評価することができることが理解されよう。オブジェクト年齢およびオブジェクトホットネスを考慮する順序は逆であってもよいことがさらに理解されよう。一部の実施形態では、コールドオールドオブジェクト216がホットオブジェクトとして識別された場合、オブジェクトは、図8Aを参照して説明されたものと同様のプロセスを使用して、ホットオールドオブジェクト213に昇格され得る。
【0059】
図8Dは、オブジェクト年齢を考慮したオブジェクト降格を含むオブジェクト移行の方法840を示すフローチャートである。ブロック841において、ホットオブジェクトヒープ211内のオブジェクト(ヤングオブジェクト212および/またはオールドオブジェクト213を含み得る)がスキャンされる。
【0060】
ブロック842において、スキャンされたオブジェクト(k)がエージングされたか否かを判定するためのクエリが行われる。イエス(すなわち、オブジェクトが現在オールド)の場合、プロセスはブロック843に進むことができ、ノー(すなわち、オブジェクトがヤングのまま)の場合、プロセスはブロック844に進むことができる。一部の実施形態では、オブジェクトが既にオールドとしてマーキングされている場合、ブロック842~843におけるオブジェクト年齢に関する手順はスキップされ得る。一部の実施形態では、ブロック842~843におけるオブジェクト年齢に関する手順は、代わりに、オブジェクト年齢を監視することに関する別個のプロセスとして実行され得る。
【0061】
ブロック843において、オブジェクト(k)は、オールドオブジェクトとしてマーキング(またはフラグ付け)され得る。例えば、オブジェクト(k)のパラメータまたはフィールドは、ヤングオブジェクトとしての表示からオールドオブジェクトの表示に変更されてもよい。
【0062】
ブロック844において、スキャンされたオブジェクト(k)がホットオブジェクトであるか否かを判定するためのクエリが行われる。ノー(すなわち、オブジェクトが現在コールド)の場合、プロセスはブロック845に進むことができ、イエス(すなわち、オブジェクトがホットのまま)の場合、プロセスはブロック846に進むことができる。
【0063】
ブロック845で、コールドオブジェクト(k)がホットオブジェクトヒープから移動され(すなわち降格され)、コールドオブジェクトヒープ(コールドオブジェクトヒープ214など)に格納される。オブジェクト(k)がオールドオブジェクトとしてマーキングされた場合、それはコールドオールドオブジェクト216のうちの1つになり、オブジェクト(k)がヤングオブジェクトとしてマーキングされた場合、それはコールドヤングオブジェクト215のうちの1つになる。
【0064】
ブロック846において、エンハンスドガベージコレクタ123は、ホットオブジェクトヒープ内のオブジェクトの終わりに到達したか否かを判定することができる。ノーの場合、プロセスはブロック842に戻り、ホットオブジェクトヒープ内の次のオブジェクトを評価することができる。イエスの場合、プロセスは終了することができる。ヒープ内のオブジェクトをグループとしてスキャンし、次いで一度に1つのオブジェクトを評価することができ、またはヒープ内の各オブジェクトをスキャンし、一度に1つのオブジェクトを評価することができることが理解されよう。オブジェクト年齢およびオブジェクトホットネスを考慮する順序は逆であってもよいことがさらに理解されよう。方法830および方法840において概説されたプロセスは、ガベージコレクションプロセスの一部としてオブジェクトの昇格および降格のための単一のプロセスに組み合わされ得ることがさらに理解されよう。
【0065】
図9Aは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティング装置を動作させる方法910を示すフローチャートである。
【0066】
ブロック912において、装置は、ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることができる。
【0067】
ブロック914において、装置は、新たに作成されたオブジェクトを、新たに作成されたオブジェクトのオブジェクトタイプに関連付けられたホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることができる。
【0068】
ブロック916において、装置は、各オブジェクトに関連付けられたホットネススコアに基づいて、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させることができ、該オブジェクトの移行は、オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドにおいて動作する。
【0069】
図9Bは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による、ヒープオブジェクトを監視し、監視されたオブジェクトのホットネススコアを更新することに関する方法920を示すフローチャートである。方法920は、例えばホットオブジェクトプロファイラ121によって実行されてもよい。
【0070】
ブロック922において、装置は、ホットオブジェクトヒープ内のオブジェクトの呼び出し頻度およびコールドオブジェクトヒープ内のオブジェクトの呼び出し頻度を監視することができる。
【0071】
ブロック924において、装置は、少なくとも1つのオブジェクトのホットネススコアを、そのオブジェクトの監視された呼び出し頻度に基づいて修正することができる。一部の実施形態では、オブジェクトのホットネススコアは、ホットメソッドによって呼び出されたオブジェクトについて増加されてもよく(例えば、ホットネススコアを1だけ増加させる)、オブジェクトのホットネススコアは、ホットメソッドによって現在呼び出されていないオブジェクトについて減少されてもよい(例えば、ホットネススコアを1だけ減少させる)。一部の実施形態では、オブジェクトのホットネススコアは、ホットメソッドによって呼び出されたオブジェクトについてホット値にリセットされてもよく(例えば、ホットネスを値2にリセットする)、オブジェクトのホットネススコアは、ホットメソッドによって現在呼び出されていないオブジェクトについてコールド値にリセットされてもよい(例えば、ホットネスを値0にリセットする)。
【0072】
図9Cは、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による階層化オブジェクトメモリ配置を有する例示的なマネージドランタイムコンピューティング装置を動作させる際に複数のオブジェクトを移行させることに関する方法930を示すフローチャートである。方法930は、例えば、エンハンスドガベージコレクタ123(オブジェクトマイグレータ124を含む)によって実行されてもよい。
【0073】
ブロック932において、装置は、第1のオブジェクトに関連付けられたホットネススコアが閾値よりも大きい場合、第1のオブジェクトをコールドオブジェクトヒープからホットオブジェクトヒープに移動させることができる。
【0074】
ブロック934において、装置は、第2のオブジェクトに関連付けられたホットネススコアが閾値以下である場合、第2のオブジェクトをホットオブジェクトヒープからコールドオブジェクトヒープに移動させることができる。
【0075】
一部の実施形態において、閾値は、第1階層メモリおよび第2階層メモリの相対的な容量に基づいて決定されてもよい。一部の実施形態では、新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることは、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換することを含み得る。一部の実施形態では、装置はさらに、ホットメソッドによって作成された第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当て、第2の新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることができる。
【0076】
図10A図10Bはそれぞれ、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による階層化オブジェクトメモリ配置を有する例示的なエンハンスドマネージドランタイムコンピューティングシステム1010(図示のようにそれぞれ1010aおよび1010bとラベル付けされる)を示すブロック図を示している。システム1010は、一般に、コンピューティング機能(例えば、サーバ、クラウドインフラストラクチャコントローラ、データベースコントローラ、ノートブックコンピュータ、デスクトップコンピュータ、携帯情報端末/PDA、タブレットコンピュータ、コンバーチブルタブレット、スマートフォンなど)、撮像機能(例えば、カメラ、カムコーダ)、メディア再生機能(例えば、スマートテレビ/TV)、ウェアラブル機能(例えば、腕時計、アイウェア、帽子、履物、宝石)、車両機能(例えば、車、トラック、オートバイ)、ロボット機能(例えば、自律ロボット)など、またはそれらの任意の組み合わせを有する電子デバイス/プラットフォームの一部であってもよい。図示された例において、システム1010は、システムメモリ1022に結合され得る統合メモリコントローラ(IMC)1014を有するホストプロセッサ1012(例えば、中央処理装置/CPU)を含み得る。ホストプロセッサ1012は、例えばマイクロコントローラ、マイクロプロセッサ、RISCプロセッサ、ASICなどの任意のタイプの処理デバイスを、関連する処理モジュールまたは回路とともに含んでもよい。システムメモリ1022は、命令1040を格納するのに適した、RAM、ROM、PROM、EEPROM、ファームウェア、フラッシュメモリなどの任意の非一時的機械またはコンピュータ可読記憶媒体、例えばPLA、FPGA、CPLDなどの構成可能論理、例えばASIC、CMOSもしくはTTL技術などの回路技術を使用する固定機能ハードウェア論理、またはそれらの任意の組み合わせを含んでもよい。
【0077】
システム1010はまた、入力/出力(I/O)サブシステム1016を含み得る。I/Oサブシステム1016は、例えば、1または複数の入力/出力(I/O)デバイス1028、ネットワークコントローラ1024(例えば、有線および/または無線NIC)、およびストレージ1030と通信してもよい。ストレージ1030は、任意の適切な非一時的な機械可読メモリタイプまたはコンピュータ可読メモリタイプ(例えば、フラッシュメモリ、DRAM、SRAM(スタティックランダムアクセスメモリ)、ソリッドステートドライブ(SSD)、ハードディスクドライブ(HDD)、光ディスクなど)から構成され得る。ストレージ1030は、大容量ストレージを含み得る。一部の実施形態では、ホストプロセッサ1012および/またはI/Oサブシステム1016は、ネットワークコントローラ1024を介してストレージ1030(その全てまたは一部)と通信することができる。一部の実施形態では、システム1010はまた、グラフィックスプロセッサ1026を含み得る。
【0078】
システム1010は、第1のメモリ階層1032(メモリ階層1とラベル付けされる)および第2のメモリ階層1034(メモリ階層2とラベル付けされる)などの2つ以上のメモリ階層を含み得る。第1のメモリ階層1032は、第2のメモリ階層1034とは異なるメモリタイプから構成され得る。図10Aに示されるように、システム1010(1010aとしてラベル付けされる)は、システムメモリ1022の一部として第1のメモリ階層1032および第2のメモリ階層1034の両方を含み得る。図10Aに示す構成では、例えば、第1のメモリ階層1032は、埋め込みDRAMを含んでもよく、第2のメモリ階層1034は、従来のDRAMを含んでもよい。図10Bに示されるように、システム1010(1010bとしてラベル付けされる)は、システムメモリ1022の一部として第1のメモリ階層1032を含んでもよく、ストレージ1030の一部として第2のメモリ階層1034を含んでもよい。図10Bに示す構成では、例えば、第1のメモリ階層1032は高性能DRAMを含んでもよく、第2のメモリ階層1034はIntel(登録商標)Optane(商標)メモリを含んでもよい。他のメモリ階層の組み合わせも可能である。一部の実施形態では、第1のメモリ階層1032および第2のメモリ階層1034は、データベースとして編成され得る。
【0079】
ホストプロセッサ1012および/またはI/Oサブシステム1016は、システムメモリ1022および/またはストレージ1030から読み出されたプログラム命令1040を実行して、上述のプロセスの1または複数の態様を実行することができ、これには、図3図4を参照して説明されたホットオブジェクトプロファイリングのためのプロセス、図5A図5Cおよび図6を参照して説明されたオブジェクト割り振りリダイレクションのためのプロセス、図7A図7Cおよび図8A図8Dを参照して説明されたオブジェクト移行のためのプロセスが含まれる。ホストプロセッサ1012および/またはI/Oサブシステム1016は、システムメモリ1022および/またはストレージ1030から読み出されたプログラム命令1040を実行して、図9A図9Cを参照して上述したマネージドランタイムコンピューティング装置を動作させるためのプロセスの1または複数の態様を実行することができる。一部の実施形態では、グラフィックスプロセッサ1026は、システムメモリ1022および/またはストレージ1030から読み出されたプログラム命令1040を実行することができる。
【0080】
上述のプロセスを実行するためのコンピュータプログラムコードは、JAVA、JAVASCRIPT、PYTHON、SMALLTALK(登録商標)、C++などのオブジェクト指向プログラミング言語、および/または「C」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1または複数のプログラミング言語の任意の組み合わせで記述され、プログラム命令1040として実装され得る。さらに、プログラム命令1040は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、状態設定データ、集積回路の構成データ、電子回路および/またはハードウェアに固有の他の構造コンポーネント(例えば、ホストプロセッサ、中央処理装置/CPU、マイクロコントローラ、マイクロプロセッサなど)をパーソナライズする状態情報を含み得る。
【0081】
ホストプロセッサ1012およびI/Oサブシステム1016は、実線で囲まれて示されるシステムオンチップ(SoC)1020として半導体ダイ上に一緒に実装され得る。したがって、SoC1020は、マネージドランタイムコンピューティング装置として動作し得る。一部の実施形態では、SoC1020はまた、システムメモリ1022、ネットワークコントローラ1024、および/またはグラフィックスプロセッサ1026(点線で囲まれて示される)のうち1または複数を含み得る。
【0082】
I/Oデバイス1028は、タッチスクリーン、キーボード、マウス、カーソル制御デバイス、タッチスクリーン、マイクロフォン、デジタルカメラ、ビデオレコーダ、カムコーダ、バイオメトリックスキャナおよび/またはセンサなどの入力デバイスのうち1または複数を含むことができ、入力デバイスは、情報を入力し、システム1010および/または他のデバイスと対話するために使用され得る。I/Oデバイス1028はまた、ディスプレイ(例えば、タッチスクリーン、液晶ディスプレイ/LCD、発光ダイオード/LEDディスプレイ、プラズマパネル等)、スピーカ、および/または他の視覚出力デバイスもしくは音声出力デバイス等の出力デバイスのうち1または複数を含み得る。入力デバイスおよび/または出力デバイスは、例えば、ユーザインターフェースを提供するために使用されてもよい。
【0083】
図11は、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による階層化オブジェクトメモリ配置を有するランタイムコンピューティング環境を管理するための例示的な半導体装置1110を示すブロック図を示している。半導体装置1110は、例えば、チップ、ダイ、または他の半導体パッケージとして実装されてもよい。半導体装置1110は、例えば、シリコン、サファイア、ガリウムヒ素などからなる1または複数の基板1111を含んでもよい。半導体装置1110はまた、例えば、基板1111に結合されたトランジスタアレイおよび他の集積回路(IC)構成要素)からなる論理1112を含んでもよい。論理1112は、図10を参照して上述したシステムオンチップ(SoC)1020を実装することができる。論理1112は、図3図4を参照して説明したホットオブジェクトプロファイリングのためのプロセス、図5A図5Cおよび図6を参照して説明したオブジェクト割り振りリダイレクションのためのプロセス、図7A図7Cおよび図8A図8Dを参照して説明したオブジェクト移行のためのプロセスを含む、上述したプロセスの1または複数の態様を実装することができる。論理1112は、図9A図9Cを参照して上述したマネージドランタイムコンピューティング装置を動作させるためのプロセスの1または複数の態様を実装することができる。
【0084】
半導体装置1110は、任意の適切な半導体製造プロセスまたは技術を使用して構築することができる。論理1112は、構成可能論理または固定機能ハードウェア論理において少なくとも部分的に実装され得る。例えば、論理1112は、基板1111内に位置決めされた(例えば、埋め込まれた)トランジスタチャネル領域を含んでもよい。したがって、論理1112と基板1111との間の界面は、階段接合でなくてもよい。論理1112はまた、基板1111の初期ウェハ上に成長されたエピタキシャル層を含むとみなすことができる。
【0085】
図12は、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態による例示的なプロセッサコア1200を示すブロック図である。プロセッサコア1200は、マイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、またはコードを実行する他のデバイスなど、任意のタイプのプロセッサのコアであってもよい。図12には1つのプロセッサコア1200のみが示されているが、処理要素は、代替的に、図12に示されるプロセッサコア1200のうちの2つ以上を含んでもよい。プロセッサコア1200は、シングルスレッドコアであってもよく、または少なくとも1つの実施形態では、プロセッサコア1200は、コアごとに2つ以上のハードウェアスレッドコンテキスト(または「論理プロセッサ」)を含み得るという点でマルチスレッドコアであってもよい。
【0086】
図12はまた、プロセッサコア1200に結合されたメモリ1270を示している。メモリ1270は、当業者に既知であるかまたは別様で利用可能であるような(メモリ階層の種々の層を含む)多種多様なメモリのいずれかであり得る。メモリ1270は、プロセッサコア1200によって実行される1または複数のコード1213命令を含み得る。コード1213は、図3図4を参照して説明したホットオブジェクトプロファイリングのためのプロセス、図5A図5Cおよび図6を参照して説明したオブジェクト割り振りリダイレクションのためのプロセス、図7A図7Cおよび図8A図8Dを参照して説明したオブジェクト移行のためのプロセスを含む、上述したプロセスの1または複数の態様を実装することができる。コード1213は、図9A図9Cを参照して上述したマネージドランタイムコンピューティング装置を動作させるためのプロセスの1または複数の態様を実装することができる。プロセッサコア1200は、コード1213によって示される命令のプログラムシーケンスに従う。各命令は、フロントエンド部分1210に入り、1または複数のデコーダ1220によって処理され得る。デコーダ1220は、その出力として、所定のフォーマットの固定幅マイクロ動作などのマイクロ動作を生成することができ、または元のコード命令を反映する他の命令、マイクロ命令、もしくは制御信号を生成することができる。図示されたフロントエンド部分1210はまた、レジスタリネーミング論理1225およびスケジューリング論理1230を含んでおり、これらは概してリソースを割り振り、実行のために変換命令に対応する動作をキューに入れる。
【0087】
プロセッサコア1200は、一連の実行ユニット1255-1~1255-Nを有する実行論理1250を含むように示されている。一部の実施形態は、特定の機能または機能のセットに専用の複数の実行ユニットを含み得る。他の実施形態は、1つのみの実行ユニット、または特定の機能を実行することができる1つの実行ユニットを含み得る。図示の実行論理1250は、コード命令によって指定された動作を実行する。
【0088】
コード命令によって指定された動作の実行の完了後、バックエンド論理1260はコード1213の命令をリタイアする。一実施形態では、プロセッサコア1200は、アウトオブオーダ実行を可能にするが、命令のインオーダリタイアメントを必要とする。リタイアメント論理1265は、当業者に既知の種々の形態(例えば、リオーダバッファなど)を取り得る。このようにして、プロセッサコア1200は、コード1213の実行中に、少なくとも、デコーダによって生成される出力、レジスタリネーミング論理1225によって利用されるハードウェアレジスタおよびテーブル、ならびに実行論理1250によって変更される任意のレジスタ(図示せず)に関して変換される。
【0089】
図12には示されていないが、処理要素は、プロセッサコア1200を有するチップ上に他の要素を含み得る。例えば、処理要素は、プロセッサコア1200とともにメモリ制御論理を含んでもよい。処理要素は、I/O制御論理を含んでもよく、かつ/またはメモリ制御論理と統合されたI/O制御論理を含んでもよい。処理要素はまた、1または複数のキャッシュを含み得る。
【0090】
図13は、図面および関連する説明を含むがこれらに限定されない上述の構成要素および特徴を参照して、1または複数の実施形態によるマルチプロセッサベースのコンピューティングシステム1300の一例を示すブロック図である。マルチプロセッサシステム1300は、第1の処理要素1370および第2の処理要素1380を含む。2つの処理要素1370および1380が示されているが、システム1300の実施形態は、かかる処理要素を1つだけ含んでもよいことを理解されたい。
【0091】
システム1300は、ポイントツーポイント相互接続システムとして示されており、第1の処理要素1370および第2の処理要素1380は、ポイントツーポイント相互接続1350を介して結合されている。図13に示される相互接続のいずれかまたは全ては、ポイントツーポイント相互接続ではなくマルチドロップバスとして実装されてもよいことを理解されたい。
【0092】
図13に示されるように、処理要素1370および1380の各々は、第1および第2のプロセッサコア(すなわち、プロセッサコア1374aおよび1374bならびにプロセッサコア1384aおよび1384b)を含むマルチコアプロセッサであり得る。かかるコア1374a、1374b、1384a、1384bは、図12に関連して上述したものと同様の方法で命令コードを実行するように構成することができる。
【0093】
各処理要素1370、1380は、少なくとも1つの共有キャッシュ1896a、1896bを含み得る。共有キャッシュ1896a、1896bは、それぞれコア1374a、1374bおよび1384a、1384bなど、プロセッサの1または複数の構成要素によって利用されるデータ(例えば、命令)を格納することができる。例えば、共有キャッシュ1896a、1896bは、プロセッサの構成要素によるより高速なアクセスのために、メモリ1332、1334に格納されたデータをローカルにキャッシュしてもよい。1または複数の実施形態では、共有キャッシュ1896a、1896bは、レベル2(L2)、レベル3(L3)、レベル4(L4)、もしくは他のレベルのキャッシュなどの1または複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、および/またはそれらの組み合わせを含み得る。
【0094】
2つの処理要素1370、1380のみを用いて示されているが、実施形態の範囲はそのように限定されないことを理解されたい。他の実施形態では、1または複数の追加の処理要素が、所与のプロセッサ内に存在し得る。代替として、処理要素1370、1380のうち1または複数は、アクセラレータまたはフィールドプログラマブルゲートアレイ等のプロセッサ以外の要素であってもよい。例えば、追加の処理要素は、第1のプロセッサ1370と同じ追加のプロセッサ、第1のプロセッサ1370と異種または非対称である追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他の処理要素を含んでもよい。アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性などを含むメリットのメトリックのスペクトルに関して、処理要素1370と処理要素1380との間には種々の違いがあり得る。これらの違いは、処理要素1370、1380間の非対称性および異質性として効果的に現れ得る。少なくとも1つの実施形態では、種々の処理要素1370、1380は、同じダイパッケージ内に存在し得る。
【0095】
第1の処理要素1370は、メモリコントローラ論理(MC)1372と、ポイントツーポイント(P-P)インターフェース1376および1378とをさらに含み得る。同様に、第2の処理要素1380は、MC1382ならびにP-Pインターフェース1386および1388を含み得る。図13に示すように、MC1372および1382は、プロセッサをそれぞれのメモリ、すなわちメモリ1332およびメモリ1334に結合し、これらはそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。MC1372および1382は、処理要素1370、1380に統合されるように図示されているが、代替実施形態では、MC論理は、処理要素1370、1380に統合されるのではなく、その外部の個別論理であり得る。
【0096】
第1の処理要素1370および第2の処理要素1380は、それぞれP-P相互接続1376および1386を介してI/Oサブシステム1390に結合され得る。図13に示すように、I/Oサブシステム1390は、P-Pインターフェース1394および1398を含む。さらに、I/Oサブシステム1390は、I/Oサブシステム1390を高性能グラフィックスエンジン1338と結合するためのインターフェース1392を含む。一実施形態では、バス1349を使用して、グラフィックスエンジン1338をI/Oサブシステム1390に結合することができる。あるいは、ポイントツーポイント相互接続がこれらの構成要素を結合してもよい。
【0097】
次に、I/Oサブシステム1390は、インターフェース1396を介して第1のバス1316に結合され得る。一実施形態では、第1のバス1316は、ペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバスもしくは別の第3世代I/O相互接続バスなどのバスであり得るが、実施形態の範囲はそのように限定されない。
【0098】
図13に示されるように、種々のI/Oデバイス1314(例えば、バイオメトリックスキャナ、スピーカ、カメラ、センサ)は、第1のバス1316を第2のバス1320に結合し得るバスブリッジ1318とともに、第1のバス1316に結合され得る。一実施形態では、第2のバス1320は、ローピンカウント(LPC)バスであり得る。一実施形態では、例えば、キーボード/マウス1312、通信デバイス1326、およびコード1330を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのデータストレージユニット1319を含む種々のデバイスが、第2のバス1320に結合され得る。図示したコード1330は、図3図4を参照して説明したホットオブジェクトプロファイリングのためのプロセス、図5A図5Cおよび図6を参照して説明したオブジェクト割り振りリダイレクションのためのプロセス、図7A図7Cおよび図8A図8Dを参照して説明したオブジェクト移行のためのプロセスを含む、上述したプロセスの1または複数の態様を実装することができる。コード1330は、図9A図9Cを参照して上述したマネージドランタイムコンピューティング装置を動作させるためのプロセスの1または複数の態様を実装することができる。図示したコード1330は、既に説明したコード1213(図12)と同様であってもよい。さらに、オーディオI/O1324が第2のバス1320に結合されてもよく、バッテリ1310がコンピューティングシステム1300に電力を供給してもよい。
【0099】
他の実施形態が企図されることに留意されたい。例えば、図13のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは別のかかる通信トポロジを実装してもよい。また、図13の要素は、代替として、図13に示されるよりも多いか、または少ない集積チップを使用して区分されてもよい。
【0100】
階層化オブジェクトメモリ配置のためにランタイムコンピュータ装置を管理するための、上述のシステムおよび方法の各々、ならびにその実施形態(実装形態を含む)の各々は、少なくとも、ホットオブジェクトを識別することと、第1のメモリ階層内のホットオブジェクトヒープにホットオブジェクトを割り振ることと、第2のメモリ階層内のコールドオブジェクトヒープにコールドオブジェクトを割り振ることと、オブジェクトホットネススコアに基づいてホットオブジェクトヒープとコールドオブジェクトヒープとの間でオブジェクトを移行させることとを含むという点で、性能が向上していると考えられる。オブジェクトのホットネスに基づいてメモリ階層間でオブジェクトを配分することにより、ハイブリッドメモリアーキテクチャの性能および/またはコストを最適化または向上させる能力が促進される。例えば、頻繁にアクセスされる(またはアクセスされる可能性が高い)オブジェクトは、それほど頻繁にアクセスされないオブジェクトと比較して性能により大きな影響を与えるため、ホットオブジェクトをより高性能のメモリ階層に割り振ることで、全体的な性能の改善が促進される。同様に、コールドオブジェクトをより低いコストの(しかしより低い性能の)メモリ階層に割り振ることで、全体的な性能に対する影響がより小さくなるが、これは、頻繁にアクセスされないオブジェクトの性能差が、全体的な性能における有意な差をもたらす可能性が低いためである。それでも、コールドオブジェクトをより低いコストのメモリ階層に割り振ることは、それらのコールドオブジェクトをよりコストの高いメモリ階層に配置することよりもコスト効率が高くなる。全体として、本明細書で説明される階層化オブジェクトメモリ配置技術は、メモリ階層内の低性能メモリの使用によって引き起こされる性能の劣化を最小限に抑えながら、メモリコストを削減することができる。実際、向上した性能は、アプリケーションの応答性および/またはスムーズさの向上、ならびにユーザエクスペリエンスの改善につながり得る。
【0101】
追加の注記および実施例
実施例1は、ランタイムコンピューティング環境を管理するためのエンハンスドコンピューティングシステムであって、プロセッサと、プロセッサに結合されたメモリと、を備え、メモリが、プロセッサによって実行されると、コンピューティングシステムに、ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、新たに作成されたオブジェクトを、新たに作成されたオブジェクトのオブジェクトタイプに関連付けられたホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、各オブジェクトに関連付けられたホットネススコアに基づいて、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、該オブジェクトの移行が、オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させることと、を行わせる一連の命令を有する、拡張コンピューティングシステムを含む。
【0102】
実施例2は、命令が、実行されると、コンピューティングシステムに、ホットオブジェクトヒープ内のオブジェクトの呼び出し頻度およびコールドオブジェクトヒープ内のオブジェクトの呼び出し頻度を監視することと、少なくとも1つのオブジェクトのホットネススコアを、ホットオブジェクトヒープ内およびコールドオブジェクトヒープ内のオブジェクトの監視された呼び出し頻度に基づいて修正することと、をさらに行わせる、実施例1に記載のコンピューティングシステムを含む。
【0103】
実施例3は、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、命令が、実行されると、コンピューティングシステムに、第1のオブジェクトに関連付けられたホットネススコアが閾値より大きい場合、コールドオブジェクトヒープからホットオブジェクトヒープに第1のオブジェクトを移動させることと、第2のオブジェクトに関連付けられたホットネススコアが閾値以下である場合、ホットオブジェクトヒープからコールドオブジェクトヒープに第2のオブジェクトを移動させることと、を行わせる、実施例2に記載のコンピューティングシステムを含む。
【0104】
実施例4は、閾値が、第1階層メモリおよび第2階層メモリの相対的な容量に基づいて決定される、実施例3に記載のコンピューティングシステムを含む。
【0105】
実施例5は、新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、命令が、実行されると、コンピューティングシステムに、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換させる、実施例1に記載のコンピューティングシステムを含む。
【0106】
実施例6は、命令が、実行されると、コンピューティングシステムに、第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、第2の新たに作成されたオブジェクトが、ホットメソッドによって作成される、割り当てることと、第2の新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることと、をさらに行わせる、実施例1~5のいずれか一実施例に記載のコンピューティングシステムを含む。
【0107】
実施例7は、ランタイムコンピューティング環境を管理するための半導体装置であって、1または複数の基板と、1または複数の基板に結合された論理と、を備え、論理が、構成可能論理または固定機能ハードウェア論理のうち1または複数において少なくとも部分的に実装され、論理が、1または複数の基板に結合されて、ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを有するオブジェクトにホットネススコアを割り当てることと、新たに作成されたオブジェクトを、新たに作成されたオブジェクトのオブジェクトタイプに関連付けられたホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、各オブジェクトに関連付けられたホットネススコアに基づいて、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、該オブジェクトの移行が、オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させることと、を行う、半導体装置を含む。
【0108】
実施例8は、1または複数の基板に結合された論理が、ホットオブジェクトヒープ内のオブジェクトの呼び出し頻度およびコールドオブジェクトヒープ内のオブジェクトの呼び出し頻度を監視することと、少なくとも1つのオブジェクトのホットネススコアを、該オブジェクトの監視された呼び出し頻度に基づいて修正することと、をさらに行う、実施例7に記載の半導体装置を含む。
【0109】
実施例9は、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、1または複数の基板に結合された論理が、第1のオブジェクトに関連付けられたホットネススコアが閾値より大きい場合、コールドオブジェクトヒープからホットオブジェクトヒープに第1のオブジェクトを移動させることと、第2のオブジェクトに関連付けられたホットネススコアが閾値以下である場合、ホットオブジェクトヒープからコールドオブジェクトヒープに第2のオブジェクトを移動させることと、を行う、実施例8に記載の半導体装置を含む。
【0110】
実施例10は、閾値が、第1階層メモリおよび第2階層メモリの相対的な容量に基づいて決定される、実施例9に記載の半導体装置を含む。
【0111】
実施例11は、新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、1または複数の基板に結合された論理が、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換する、実施例7に記載の半導体装置を含む。
【0112】
実施例12は、1または複数の基板に結合された論理が、第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、第2の新たに作成されたオブジェクトが、ホットメソッドによって作成されている、割り当てることと、第2の新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることと、をさらに行う、実施例7~11のいずれか一実施例に記載の半導体装置を含む。
【0113】
実施例13は、ランタイムコンピューティング環境を管理するための一連の命令を備える少なくとも1つの非一時的コンピュータ可読記憶媒体であって、一連の命令が、コンピューティングシステムによって実行されると、コンピューティングシステムに、ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、新たに作成されたオブジェクトを、新たに作成されたオブジェクトのオブジェクトタイプに関連付けられたホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、各オブジェクトに関連付けられたホットネススコアに基づいて、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、該オブジェクトの移行が、オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させることと、を行わせる、少なくとも1つの非一時的コンピュータ可読記憶媒体を含む。
【0114】
実施例14は、命令が、実行されると、コンピューティングシステムに、ホットオブジェクトヒープ内のオブジェクトの呼び出し頻度およびコールドオブジェクトヒープ内のオブジェクトの呼び出し頻度を監視することと、少なくとも1つのオブジェクトのホットネススコアを、該オブジェクトの監視された呼び出し頻度に基づいて修正することと、をさらに行わせる、実施例13に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体を含む。
【0115】
実施例15は、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、命令が、実行されると、コンピューティングシステムに、第1のオブジェクトに関連付けられたホットネススコアが閾値より大きい場合、コールドオブジェクトヒープからホットオブジェクトヒープに第1のオブジェクトを移動させることと、第2のオブジェクトに関連付けられたホットネススコアが閾値以下である場合、ホットオブジェクトヒープからコールドオブジェクトヒープに第2のオブジェクトを移動させることと、を行わせる、実施例14に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体を含む。
【0116】
実施例16は、閾値が、第1階層メモリおよび第2階層メモリの相対的な容量に基づいて決定される、実施例15に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体を含む。
【0117】
実施例17は、新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、命令が、実行されると、コンピューティングシステムに、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換させる、実施例13に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体を含む。
【0118】
実施例18は、命令が、実行されると、コンピューティングシステムに、第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、第2の新たに作成されたオブジェクトが、ホットメソッドによって作成されている、ことと、第2の新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることと、をさらに行わせる、実施例13~17のいずれか一実施例に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体を含む。
【0119】
実施例19は、ランタイムコンピューティング環境を管理するためのコンピューティング装置を動作させる方法であって、ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、新たに作成されたオブジェクトを、新たに作成されたオブジェクトのオブジェクトタイプに関連付けられたホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、各オブジェクトに関連付けられたホットネススコアに基づいて、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、該オブジェクトの移行が、オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させることと、を含む、方法を含む。
【0120】
実施例20は、ホットオブジェクトヒープ内のオブジェクトの呼び出し頻度およびコールドオブジェクトヒープ内のオブジェクトの呼び出し頻度を監視することと、少なくとも1つのオブジェクトのホットネススコアを、該オブジェクトの監視された呼び出し頻度に基づいて修正することと、をさらに含む、実施例19に記載の方法を含む。
【0121】
実施例21は、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させることが、第1のオブジェクトに関連付けられたホットネススコアが閾値より大きい場合、コールドオブジェクトヒープからホットオブジェクトヒープに第1のオブジェクトを移動させることと、第2のオブジェクトに関連付けられたホットネススコアが閾値以下である場合、ホットオブジェクトヒープからコールドオブジェクトヒープに第2のオブジェクトを移動させることと、を含む、実施例20に記載の方法を含む。
【0122】
実施例22は、閾値が、第1階層メモリおよび第2階層メモリの相対的な容量に基づいて決定される、実施例21に記載の方法を含む。
【0123】
実施例23は、第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、第2の新たに作成されたオブジェクトが、ホットメソッドによって作成されている、割り当てることと、第2の新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることと、をさらに含む、実施例19~22のいずれか一実施例に記載の方法を含む。
【0124】
実施例24は、ランタイムコンピューティング環境を管理するための装置であって、ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てるための手段と、新たに作成されたオブジェクトを、新たに作成されたオブジェクトのオブジェクトタイプに関連付けられたホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振るための手段と、各オブジェクトに関連付けられたホットネススコアに基づいて、ホットオブジェクトヒープとコールドオブジェクトヒープとの間で複数のオブジェクトを移行させるための手段であって、該オブジェクトの移行が、オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させるための手段と、を備える、装置を含む。
【0125】
実施例25は、ヒープオブジェクトを監視し、監視されたオブジェクトのホットネススコアを更新するための手段をさらに備える、実施例24に記載の装置を含む。
【0126】
実施例26は、新たに作成されたオブジェクトをホットオブジェクトヒープに割り振ることが、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換することを含む、実施例19に記載の方法を含む。
【0127】
したがって、本明細書で説明される技術は、ホットオブジェクトを識別し、第1のメモリ階層内のホットオブジェクトヒープにホットオブジェクトを割り振り、第2のメモリ階層内のコールドオブジェクトヒープにコールドオブジェクトを割り振り、オブジェクトホットネススコアに基づいてホットオブジェクトヒープとコールドオブジェクトヒープとの間でオブジェクトを移行させることによって、階層化オブジェクトメモリ配置を実装することで、マネージドランタイムコンピュータ環境の性能を改善する。オブジェクトのホットネスに基づいてメモリ階層間でオブジェクトを配分することにより、ハイブリッドメモリアーキテクチャの性能および/またはコストを最適化または向上させる能力が促進される。例えば、頻繁にアクセスされる(またはアクセスされる可能性が高い)オブジェクトは、それほど頻繁にアクセスされないオブジェクトと比較して性能により大きな影響を与えるため、ホットオブジェクトをより高性能のメモリ階層に割り振ることで、全体的な性能の改善が促進される。同様に、コールドオブジェクトをより低いコストの(しかしより低い性能の)メモリ階層に割り振ることで、全体的な性能に対する影響がより小さくなるが、これは、頻繁にアクセスされないオブジェクトの性能差が、全体的な性能における有意な差をもたらす可能性が低いためである。それでも、コールドオブジェクトをより低いコストのメモリ階層に割り振ることは、それらのコールドオブジェクトをよりコストの高いメモリ階層に配置することよりもコスト効率が高くなる。全体として、本明細書で説明される階層化オブジェクトメモリ配置技術は、メモリ階層内の低性能メモリの使用によって引き起こされる性能の劣化を最小限に抑えながら、メモリコストを削減することができる。実際、向上した性能は、アプリケーションの応答性および/またはスムーズさの向上、ならびにユーザエクスペリエンスの改善につながり得る。本明細書で説明される技術は、サーバ、クラウドコンピューティング、ブラウザ、および/またはJITもしくはAOT(事前)コンパイル/処理を使用する環境を含む、任意の数のマネージドランタイム環境において適用可能であり得る。
【0128】
実施形態は、全てのタイプの半導体集積回路(「IC」)チップとともに使用するために適用可能である。これらのICチップの例として、プロセッサ、コントローラ、チップセットコンポーネント、プログラマブル論理アレイ(PLA)、メモリチップ、ネットワークチップ、システムオンチップ(SoC)、SSD/NANDコントローラASICなどが挙げられるが、これらに限定されない。さらに、図面の一部において、信号導線は線で表されている。一部は、より多くの構成信号経路を示すために異なっていてもよく、構成信号経路の数を示すために番号ラベルを有してもよく、かつ/または主要な情報フロー方向を示すために1または複数の端部に矢印を有してもよい。しかしながら、これは、限定的に解釈されるべきではない。むしろ、かかる追加された詳細は、回路のより容易な理解を促進するために、1または複数の例示的な実施形態に関連して使用され得る。任意の表された信号線は、追加情報を有するか否かにかかわらず、実際には、複数の方向に進行し得る1または複数の信号を含んでもよく、任意の好適なタイプの信号方式、例えば、差動対で実装されるデジタルまたはアナログ線、光ファイバ線、および/またはシングルエンド線で実装されてもよい。
【0129】
例示的なサイズ/モデル/値/範囲が与えられているが、実施形態はこれに限定されない。製造技術(例えば、フォトリソグラフィ)が時間とともに成熟するにつれて、より小さいサイズのデバイスが製造され得ることが予想される。加えて、ICチップおよび他の構成要素への周知の電力/接地接続は、例示および説明を簡単にするために、かつ実施形態の特定の態様を不明瞭にしないように、図内に示されても示されなくてもよい。さらに、構成は、実施形態を不明瞭にすることを回避するために、また、かかるブロック図構成の実装形態に関する詳細が、実施形態が実装されるプラットフォームに大きく依存するという事実を考慮して、ブロック図の形態で示され得る。すなわち、かかる詳細は、十分に当業者の範囲内であるべきである。例示的な実施形態を説明するために特定の詳細(例えば、回路)が記載される場合、実施形態は、これらの特定の詳細なしで、またはこれらの特定の詳細の変形を伴って実践され得ることが当業者には明らかであるはずである。したがって、説明は、限定ではなく例示とみなされるべきである。
【0130】
「結合される」という用語は、本明細書では、対象の構成要素間の直接的または間接的な任意のタイプの関係を指すために使用することができ、電気的、機械的、流体的、光学的、電磁的、電気機械的、または他の接続に適用することができる。加えて、用語「第1」、「第2」などは、本明細書では、説明を容易にするためにのみ使用され得、別段の指示がない限り、特定の時間的または経時的な意味を持たない。
【0131】
本出願および特許請求の範囲で使用される場合、用語「のうち1または複数」によって結合された項目のリストは、列挙された用語の任意の組み合わせを意味し得る。例えば、語句「A、BまたはCのうち1または複数」は、A、B、Cか、AおよびBか、AおよびCか、BおよびCか、またはA、BおよびCを意味してもよい。
【0132】
当業者は、前述の説明から、実施形態の広範な技術が種々の形態で実装され得ることを理解するであろう。したがって、実施形態をその特定の例に関連して説明してきたが、実施形態の真の範囲はそのように限定されるべきではない。なぜなら、図面、明細書、および以下の特許請求の範囲を検討すれば、当業者には他の修正形態が明らかになるからである。
[他の考え得る項目]
(項目1)
ランタイムコンピューティング環境を管理するためのエンハンスドコンピューティングシステムであって、
プロセッサと、
前記プロセッサに結合されたメモリと、
を備え、
前記メモリが、前記プロセッサによって実行されると、前記エンハンスドコンピューティングシステムに、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、複数のオブジェクトを移行させることと、
を行わせる一連の命令を含む、拡張コンピューティングシステム。
(項目2)
前記命令が、実行されると、前記コンピューティングシステムに、
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視することと、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正することと、
をさらに行わせる、項目1に記載のコンピューティングシステム。
(項目3)
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、前記命令が、実行されると、前記コンピューティングシステムに、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させることと、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させることと、
を行わせる、項目2に記載のコンピューティングシステム。
(項目4)
前記閾値が、前記第1階層メモリおよび前記第2階層メモリの相対的な容量に基づいて決定される、項目3に記載のコンピューティングシステム。
(項目5)
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、前記命令が、実行されると、前記コンピューティングシステムに、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換させる、項目1に記載のコンピューティングシステム。
(項目6)
前記命令が、実行されると、前記コンピューティングシステムに、
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成される、割り当てることと、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振ることと、
をさらに行わせる、項目1から5のいずれか一項に記載のコンピューティングシステム。
(項目7)
ランタイムコンピューティング環境を管理するための半導体装置であって、
1または複数の基板と、
前記1または複数の基板に結合された論理と、
を備え、
前記論理が、構成可能論理または固定機能ハードウェア論理のうち1または複数において少なくとも部分的に実装され、前記論理が、前記1または複数の基板に結合されて、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、移行させることと、
を行う、半導体装置。
(項目8)
前記1または複数の基板に結合された前記論理が、
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視することと、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正することと、
をさらに行う、項目7に記載の半導体装置。
(項目9)
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、前記1または複数の基板に結合された前記論理が、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させることと、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させることと、
を行う、項目8に記載の半導体装置。
(項目10)
前記閾値が、前記第1階層メモリおよび前記第2階層メモリの相対的な容量に基づいて決定される、項目9に記載の半導体装置。
(項目11)
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、前記1または複数の基板に結合された前記論理が、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換する、項目7に記載の半導体装置。
(項目12)
前記1または複数の基板に結合された前記論理が、
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成される、割り当てることと、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振ることと、
をさらに行う、項目7から11のいずれか一項に記載の半導体装置。
(項目13)
ランタイムコンピューティング環境を管理するための一連の命令を備える少なくとも1つの非一時的コンピュータ可読記憶媒体であって、前記一連の命令が、コンピューティングシステムによって実行されると、前記コンピューティングシステムに、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、移行させることと、
を行わせる、少なくとも1つの非一時的コンピュータ可読記憶媒体。
(項目14)
前記命令が、実行されると、前記コンピューティングシステムに、
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視することと、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正することと、
をさらに行わせる、項目13に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
(項目15)
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるために、前記命令が、実行されると、前記コンピューティングシステムに、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させることと、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させることと、
を行わせる、項目14に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
(項目16)
前記閾値が、前記第1階層メモリおよび前記第2階層メモリの相対的な容量に基づいて決定される、項目15に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
(項目17)
新たに作成されたオブジェクトをホットオブジェクトヒープに割り振るために、前記命令が、実行されると、前記コンピューティングシステムに、コールドオブジェクトアロケータ関数をホットオブジェクトアロケータ関数で置換させる、項目13に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
(項目18)
前記命令が、実行されると、前記コンピューティングシステムに、
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成されている、割り当てることと、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振ることと、
をさらに行わせる、項目13から17のいずれか一項に記載の少なくとも1つの非一時的コンピュータ可読記憶媒体。
(項目19)
ランタイムコンピューティング環境を管理するためのコンピューティング装置を動作させる方法であって、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てることと、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振ることと、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることであって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、移行させることと、
を含む、方法。
(項目20)
前記ホットオブジェクトヒープ内のオブジェクトの前記呼び出し頻度および前記コールドオブジェクトヒープ内のオブジェクトの前記呼び出し頻度を監視することと、
少なくとも1つのオブジェクトの前記ホットネススコアを、前記オブジェクトの前記監視された呼び出し頻度に基づいて修正することと、
をさらに含む、項目19に記載の方法。
(項目21)
前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させることが、
第1のオブジェクトに関連付けられた前記ホットネススコアが閾値より大きい場合、前記コールドオブジェクトヒープから前記ホットオブジェクトヒープに前記第1のオブジェクトを移動させることと、
第2のオブジェクトに関連付けられた前記ホットネススコアが前記閾値以下である場合、前記ホットオブジェクトヒープから前記コールドオブジェクトヒープに前記第2のオブジェクトを移動させることと、
を含む、項目20に記載の方法。
(項目22)
前記閾値が、前記第1階層メモリおよび前記第2階層メモリの相対的な容量に基づいて決定される、項目21に記載の方法。
(項目23)
第2の新たに作成されたオブジェクトに所定のホットネススコアを割り当てることであって、前記第2の新たに作成されたオブジェクトが、前記ホットメソッドによって作成されている、割り当てることと、
前記第2の新たに作成されたオブジェクトを前記ホットオブジェクトヒープに割り振ることと、
をさらに含む、項目19から22のいずれか一項に記載の方法。
(項目24)
ランタイムコンピューティング環境を管理するための装置であって、
ホットメソッドによって参照されるオブジェクトの呼び出しカウントに基づいて、オブジェクトタイプを含むオブジェクトにホットネススコアを割り当てるための手段と、
新たに作成されたオブジェクトを、前記新たに作成されたオブジェクトの前記オブジェクトタイプに関連付けられた前記ホットネススコアに基づいて、ホットオブジェクトを第1のメモリ階層に格納するように割り当てられたホットオブジェクトヒープ、またはコールドオブジェクトを第2のメモリ階層に格納するように割り当てられたコールドオブジェクトヒープのうちの1つに割り振るための手段と、
各オブジェクトに関連付けられたホットネススコアに基づいて、前記ホットオブジェクトヒープと前記コールドオブジェクトヒープとの間で複数のオブジェクトを移行させるための手段であって、前記オブジェクトの移行が、前記オブジェクトの割り振りのための実行スレッドとは独立した実行スレッドで動作する、手段と、
を備える、装置。
(項目25)
ヒープオブジェクトを監視し、監視されたオブジェクトのホットネススコアを更新するための手段をさらに備える、項目24に記載の装置。
図1A
図1B
図2A
図2B
図3
図4
図5A
図5B
図5C
図6
図7A
図7B
図7C
図8A
図8B
図8C
図8D
図9A
図9B
図9C
図10A
図10B
図11
図12
図13