(57)【要約】【課題】同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための手法を提供する。【解決手段】１つの実施形態において、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーが識別される。ターゲット位置へのソース・コピーのコピーは、１次アクセス・スレッドによって開始される。このコピーを開始することは、ターゲット位置にあるターゲット・オブジェクトのために、コピーが進行中であることを示すように設定された指標を含む一時ターゲット・オブジェクト・ヘッダを作成することを含む。コピーが発生しているとき、データ・オブジェクトを使用しようとしている他の任意のアクセス・スレッドの実行は、コピーが進行中であることを指標が示している間、保留される。コピーが完了すると、ターゲット・オブジェクト・ヘッダは、ソース・オブジェクト・ヘッダのコピーで置き換えられ、指標をリセットする。【選択図】図２
2021509509.tif 000002
【特許請求の範囲】
【請求項１】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための方法であって、
前記ガベージ・コレクション動作の一部としてコピーされることになる前記データ・オブジェクトのソース・コピーを識別することと、
１次アクセス・スレッドによって、ターゲット位置への前記ソース・コピーのコピーを開始することであって、前記ターゲット位置にあるターゲット・オブジェクトのために、前記コピーが進行中であることを示すように設定された指標を含むターゲット・オブジェクト・ヘッダを作成することを含む、前記開始することと、
前記コピーが進行中であることを前記指標が示している間、前記データ・オブジェクトを使用しようとしている２次アクセス・スレッドの実行を保留することと、
前記コピーの完了に応答して、前記ソース・コピーのソース・オブジェクト・ヘッダのコピーで前記ターゲット・オブジェクト・ヘッダを置き換えることと
を行う、コンピュータ実行処理を含む、方法。
【請求項２】
前記ソース・コピーの前記識別に応答してアクセス・スレッドによって、サバイバー空間内に前記データ・オブジェクトのための空間を割り当てることと、
前記指標を有する前記ターゲット・オブジェクト・ヘッダを、割り当てられた前記空間に格納することと、
アトミック操作で、転送ビットと、前記転送ビットの設定に応答して前記ターゲット位置としての前記割り当てられた空間の位置とを、前記ソース・オブジェクト・ヘッダに格納することと、
前記アトミック操作での格納が成功した結果として、前記１次アクセス・スレッドとして前記アクセス・スレッドを指定することと、
前記転送ビットが前記ソース・オブジェクト・ヘッダに設定されていることを前記２次アクセス・スレッドが判定したことに応答して、前記ターゲット位置に前記２次アクセス・スレッドを転送することと
をさらに含む、請求項１に記載の方法。
【請求項３】
前記指標が、前記ソース・オブジェクト・ヘッダ内の前記転送ビットの位置に対応する位置を有する前記ターゲット・オブジェクト・ヘッダ内のコピー・ビットであり、前記設定することが、前記コピー・ビットを設定することをさらに含む、請求項１に記載の方法。
【請求項４】
前記１次アクセス・スレッドと前記実行が保留されている前記２次アクセス・スレッドの両方を含む複数の関与スレッド間で前記コピーを同期することをさらに含み、前記同期することが、
前記１次アクセス・スレッドによって、前記ターゲット・オブジェクト・ヘッダ内の未コピー・データ値を前記データ・オブジェクトのトータル・サイズに初期化することと、
前記複数の関与スレッドのいずれかの２次アクセス・スレッドがコピーし始めるのに応答して、前記ターゲット・オブジェクト・ヘッダ内のコピー・スレッド・データ値を増やすことと、
いずれかの関与スレッドが前記データ・オブジェクトのセクションの前記コピーをスタートさせるのに応答して、前記データの前記セクションのサイズだけ前記未コピー値を減らすことと、
前記未コピー値が０に達したという、いずれかの２次アクセス・スレッドによる判定に応答して、前記コピー・スレッド・データ値を減らすことと、
を含み、
前記ターゲット・オブジェクト・ヘッダの前記置き換えが、前記コピー・スレッド・データ値が初期値まで減らされたという判定に応答して、前記１次アクセス・スレッドによって行われる、
請求項１に記載の方法。
【請求項５】
前記ターゲット・オブジェクト・ヘッダの前記置き換えが、１回のメモリ更新で行われ、前記指標をリセットすること、およびクラス情報を復元することを含む、請求項１に記載の方法。
【請求項６】
前記１次アクセス・スレッドと前記２次アクセス・スレッドとのそれぞれが、ガベージ・コレクション・スレッドまたはアプリケーション・スレッドのうちの１つである、請求項１に記載の方法。
【請求項７】
前記識別することが、メモリ内のライブ・オブジェクトのスキャンを行うガベージ・コレクション・スレッド、または、通常の実行中に前記ライブ・オブジェクトに遭遇するアプリケーション・スレッド、のうちの少なくとも１つによって、前記ソース・コピーを参照するオブジェクト参照を前記メモリ内のライブ・オブジェクトから読み取ることをさらに含む、請求項１に記載の方法。
【請求項８】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのシステムであって、
命令を含むメモリ媒体と、
前記メモリ媒体に連結されたバスと、
前記命令を実行すると、
前記ガベージ・コレクション動作の一部としてコピーされることになる前記データ・オブジェクトのソース・コピーを識別すること、
１次アクセス・スレッドによって、ターゲット位置への前記ソース・コピーのコピーを開始することであって、前記ターゲット位置にあるターゲット・オブジェクトのために、前記コピーが進行中であることを示すように設定された指標を含むターゲット・オブジェクト・ヘッダを作成することを含む、前記開始すること、
前記コピーが進行中であることを前記指標が示している間、前記データ・オブジェクトを使用しようとしている２次アクセス・スレッドの実行を保留すること、および
前記コピーの完了に応答して、前記ソース・コピーのソース・オブジェクト・ヘッダのコピーで前記ターゲット・オブジェクト・ヘッダを置き換えること
を前記システムに行わせる、前記バスに連結されたプロセッサと
を備える、システム。
【請求項９】
前記命令が、
前記ソース・コピーの前記識別に応答してアクセス・スレッドによって、サバイバー空間内に前記データ・オブジェクトのための空間を割り当てることと、
前記指標を有する前記ターゲット・オブジェクト・ヘッダを、割り当てられた前記空間に格納することと、
アトミック操作で、転送ビットと、前記転送ビットの設定に応答して前記ターゲット位置としての前記割り当てられた空間の位置とを、前記ソース・オブジェクト・ヘッダに格納することと、
前記アトミック操作での格納が成功した結果として、前記１次アクセス・スレッドとして前記アクセス・スレッドを指定することと、
前記転送ビットが前記ソース・オブジェクト・ヘッダに設定されていることを前記２次アクセス・スレッドが判定したことに応答して、前記ターゲット位置に前記２次アクセス・スレッドを転送することと
を前記システムにさらに行わせる、請求項８に記載のシステム。
【請求項１０】
前記指標が、前記ソース・オブジェクト・ヘッダ内の前記転送ビットの位置に対応する位置を有する前記ターゲット・オブジェクト・ヘッダ内のコピー・ビットであり、前記設定することが、前記コピー・ビットを設定することをさらに含む、請求項８に記載のシステム。
【請求項１１】
前記命令が、前記１次アクセス・スレッドと前記実行が保留されている前記２次アクセス・スレッドの両方を含む複数の関与スレッド間で前記コピーを同期することを前記システムにさらに行わせ、前記同期することが、
前記１次アクセス・スレッドによって、前記ターゲット・オブジェクト・ヘッダ内の未コピー・データ値を前記データ・オブジェクトのトータル・サイズに初期化することと、
前記複数の関与スレッドのいずれかの２次アクセス・スレッドがコピーし始めるのに応答して、前記ターゲット・オブジェクト・ヘッダ内のコピー・スレッド・データ値を増やすことと、
いずれかの関与スレッドが前記データ・オブジェクトのセクションの前記コピーをスタートさせるのに応答して、前記データの前記セクションのサイズだけ前記未コピー値を減らすことと、
前記未コピー値が０に達したという、いずれかの２次アクセス・スレッドによる判定に応答して、前記コピー・スレッド・データ値を減らすことと
を含み、
前記ターゲット・オブジェクト・ヘッダの前記置き換えが、前記コピー・スレッド・データ値が初期値まで減らされたという判定に応答して、前記１次アクセス・スレッドによって行われる、
請求項８に記載のシステム。
【請求項１２】
前記ターゲット・オブジェクト・ヘッダを置き換えることを前記システムに行わせる前記命令が、１回のメモリ更新で前記ターゲット・オブジェクト・ヘッダを置き換え、前記指標をリセットすること、およびクラス情報を復元することを含む、請求項８に記載のシステム。
【請求項１３】
前記１次アクセス・スレッドと前記２次アクセス・スレッドのそれぞれが、ガベージ・コレクション・スレッドまたはアプリケーション・スレッドのうちの１つである、請求項８に記載のシステム。
【請求項１４】
識別するための前記命令が、メモリ内のライブ・オブジェクトのスキャンを行うガベージ・コレクション・スレッド、または、通常の実行中に前記ライブ・オブジェクトに遭遇するアプリケーション・スレッド、のうちの少なくとも１つによって、前記ソース・コピーを参照するオブジェクト参照を前記メモリ内のライブ・オブジェクトから読み取ることをさらに含む、請求項８に記載のシステム。
【請求項１５】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのコンピュータ・プログラム製品であって、コンピュータ可読ストレージ媒体を備え、
前記ガベージ・コレクション動作の一部としてコピーされることになる前記データ・オブジェクトのソース・コピーを識別することと、
１次アクセス・スレッドによって、ターゲット位置への前記ソース・コピーのコピーを開始することであって、前前記ターゲット位置にあるターゲット・オブジェクトのために、記コピーが進行中であることを示すように設定された指標を含むターゲット・オブジェクト・ヘッダを作成することを含む、前記開始することと、
前記コピーが進行中であることを前記指標が示している間、前記データ・オブジェクトを使用しようとしている２次アクセス・スレッドの実行を保留することと、
前記コピーの完了に応答して、前記ソース・コピーのソース・オブジェクト・ヘッダのコピーで前記ターゲット・オブジェクト・ヘッダを置き換えることと
を少なくとも１つのコンピュータ・デバイスに行わせるプログラム命令が、前記コンピュータ可読ストレージ媒体に格納された、
コンピュータ・プログラム製品。
【請求項１６】
前記命令が、
前記ソース・コピーの前記識別に応答してアクセス・スレッドによって、サバイバー空間内に前記データ・オブジェクトのための空間を割り当てることと、
前記指標を有する前記ターゲット・オブジェクト・ヘッダを、割り当てられた前記空間に格納することと、
アトミック操作で、転送ビットと、前記転送ビットの設定に応答して前記ターゲット位置としての前記割り当てられた空間の位置とを、前記ソース・オブジェクト・ヘッダに格納することと、
前記アトミック操作での格納が成功した結果として、前記１次アクセス・スレッドとして前記アクセス・スレッドを指定することと、
前記転送ビットが前記ソース・オブジェクト・ヘッダに設定されていることを前記２次アクセス・スレッドが判定したことに応答して、前記ターゲット位置に前記２次アクセス・スレッドを転送することと
を前記少なくとも１つのコンピュータ・デバイスにさらに行わせる、請求項１５に記載のコンピュータ・プログラム製品。
【請求項１７】
前記指標が、前記ソース・オブジェクト・ヘッダ内の前記転送ビットの位置に対応する位置を有する前記ターゲット・オブジェクト・ヘッダ内のコピー・ビットであり、前記設定することが、前記コピー・ビットを設定することをさらに含む、請求項１６に記載のコンピュータ・プログラム製品。
【請求項１８】
前記命令が、前記１次アクセス・スレッドと前記実行が保留されている前記２次アクセス・スレッドの両方を含む複数の関与スレッド間で前記コピーを同期することを前記少なくとも１つのコンピュータ・デバイスにさらに行わせ、
前記１次アクセス・スレッドによって、前記ターゲット・オブジェクト・ヘッダ内の未コピー・データ値を前記データ・オブジェクトのトータル・サイズに初期化することと、
前記複数の関与スレッドのいずれかの２次アクセス・スレッドがコピーし始めるのに応答して、前記ターゲット・オブジェクト・ヘッダ内のコピー・スレッド・データ値を増やすことと、
いずれかの関与スレッドが前記データ・オブジェクトのセクションの前記コピーをスタートさせるのに応答して、前記データの前記セクションのサイズだけ前記未コピー値を減らすことと、
前記未コピー値が０に達したという、いずれかの２次アクセス・スレッドによる判定に応答して、前記コピー・スレッド・データ値を減らすことと
を含み、
前記ターゲット・オブジェクト・ヘッダの前記置き換えが、前記コピー・スレッド・データ値が初期値まで減らされたという判定に応答して、前記１次アクセス・スレッドによって行われる、
請求項１５に記載のコンピュータ・プログラム製品。
【請求項１９】
前記ターゲット・オブジェクト・ヘッダを置き換えることを前記システムに行わせる前記命令が、１回のメモリ更新で前記ターゲット・オブジェクト・ヘッダを置き換え、前記指標をリセットすること、およびクラス情報を復元することを含む、請求項１５に記載のコンピュータ・プログラム製品。
【請求項２０】
識別するための前記命令が、メモリ内のライブ・オブジェクトのスキャンを行うガベージ・コレクション・スレッド、または、通常の実行中に前記ライブ・オブジェクトに遭遇するアプリケーション・スレッド、のうちの少なくとも１つによって、前記ソース・コピーを参照するオブジェクト参照を前記メモリ内のライブ・オブジェクトから読み取ることをさらに含む、請求項１５に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
一般に、本発明の実施形態は、コンピュータ・メモリ管理に関する。詳細には、本発明の実施形態は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための手法に関する。
【背景技術】
【０００２】
現在のコンピュータ処理環境において、コンピュータ・システム・メモリの効率的な管理は、物理的であっても仮想的であっても、ますます重要である。メモリの内容は、コンピュータ・システム上で実行されているアプリケーション・スレッドによって新しいデータ・オブジェクトが作成され、使用され、廃棄されるにつれて、絶えず変化することが多い。しかし、アプリケーション・スレッドによって使用されるオブジェクトは、使用された後、完全に廃棄されないこともあり、メモリは、二度と使用されないオブジェクトのために確保されたままになる。そのうち、このことにより、メモリは、ますます多くの使用されていないデータ・オブジェクトで満たされることになり、新しいデータ・オブジェクトが利用できるメモリ空間が少なくなり、アプリケーション・スレッド処理の効率を低下させる。
【０００３】
この問題を解決するために、ほとんどのコンピュータ・システムは、ガベージ・コレクション（ＧＣ：garbage collection）として知られる動作を用いている。ＧＣ動作は、メモリまたはメモリのセクションを分析し、使用されていないデータ・オブジェクトを除去する。ＧＣは、これを行うために、いくつかの異なる戦略のうちの１つを使用することができる。例えば、マークおよびスイープと名付けられた１つの戦略において、ＧＣが行われることになるメモリのエリア内のアクティブ・データ・オブジェクトは、アクティブとして「マーク」され、マークされずに残っているいずれかのデータ・オブジェクトは、メモリから削除される（スイープされる）。
【０００４】
ＧＣを行うための代替戦略は、コピー・コレクタＧＣと呼ばれる。コピー・コレクタ型ＧＣでは、ＧＣが行われることになるメモリのエリアから全てのライブ・オブジェクトを退避させる。いくつかの実装形態において、退避エリア内でライブ・オブジェクトが識別された時、データ・オブジェクトは、サバイバー空間（survivor space）と呼ばれる新しい位置にコピーされる。このコピーは、いくつかの方式のうちの１つで行われることが可能である。ストップ・ザ・ワールド・コピーの場合、ＧＣ動作が始まった後にデータ・オブジェクトにアクセスすることになる第１のスレッドは、サバイバー空間内にデータ・オブジェクトのための空間を割り当て、コピーが完了するまで他の全てのアプリケーション・スレッドが待っている間にデータ・オブジェクトのコピーを行う。代替として、同時コピーＧＣの実装形態では、ＧＣ動作が始まった後にデータ・オブジェクトにアクセスしようとするあらゆるＧＣまたはアプリケーション・スレッドは、独自の予め割り当てられた空間内にデータ・オブジェクトをコピーするために、サバイバー空間内にデータ・オブジェクトのための空間を割り当てようとする。いずれにせよ、データ・オブジェクトがコピーされた後、データ・オブジェクトにアクセスするためにアプリケーション・スレッドによって使用されるアドレスは、サバイバー空間内の新しい位置を指すように更新される。退避後のエリアは、サイクルの終わりにはライブ・オブジェクトがなくなり、その後、全体として再使用することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化する。
【課題を解決するための手段】
【０００６】
本発明によれば、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための手法が提供される。１つの実施形態において、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーが識別される。ターゲット位置へのソース・コピーのコピーは、１次アクセス・スレッドによって開始される。コピーをこのように開始することは、コピーが進行中であることを示すように設定された指標を含む、ターゲット位置にあるターゲット・オブジェクトのための一時ターゲット・オブジェクト・ヘッダの作成を含む。コピーが発生しているとき、データ・オブジェクトを使用しようとしている他の任意のアクセス・スレッドの実行は、コピーが進行中であることを指標が示している間、保留される。コピーが完了すると、ターゲット・オブジェクト・ヘッダは、ソース・オブジェクト・ヘッダのコピーで置き換えられ、これにより、指標はリセットされ、アクセス・スレッドは実行を再開することができる。
【０００７】
本発明の１つの態様は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための方法を含む。方法は、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーを識別することを含む。方法は、１次アクセス・スレッドによって、ターゲット位置へのソース・コピーのコピーを開始することであって、コピーが進行中であることを示すように設定された指標を含む、ターゲット位置にあるターゲット・オブジェクトのためのターゲット・オブジェクト・ヘッダを作成することを含む、開始することをさらに含む。方法は、コピーが進行中であることを指標が示している間、データ・オブジェクトを使用しようとする２次アクセス・スレッドの実行を保留することをさらに含む。方法は、コピーの完了に応答して、ソース・コピーのソース・オブジェクト・ヘッダのコピーでターゲット・オブジェクト・ヘッダを置き換えることをさらに含む。
【０００８】
方法は、任意選択として、ソース・コピーの識別に応答してアクセス・スレッドによって、サバイバー空間内にデータ・オブジェクトのための空間を割り当てることをさらに含むことができる。この方法は、指標を有するターゲット・オブジェクト・ヘッダを、割り当てられた空間に格納することをさらに含む。この方法は、アトミック操作で、転送ビットと、転送ビットの設定に応答してターゲット位置としての割り当てられた空間の位置とを、ソース・オブジェクト・ヘッダに格納することをさらに含む。この方法は、アトミック操作での格納が成功した結果として、１次アクセス・スレッドとしてアクセス・スレッドを指定することをさらに含む。この方法は、転送ビットがソース・オブジェクト・ヘッダに設定されていることを２次アクセス・スレッドが判定したことに応答して、ターゲット位置に２次アクセス・スレッドを転送することをさらに含む。この方法は、データ・オブジェクトが転送されていること、およびデータ・オブジェクトが転送されている位置を、他のアクセス・スレッドに示すことを含むがこれらに限定されない、いくつかの利点をもたらす。
【０００９】
方法は、任意選択として、指標が、ソース・オブジェクト・ヘッダ内の転送ビットの位置に対応する位置を有するターゲット・オブジェクト・ヘッダ内のコピー・ビットであり、設定することが、コピー・ビットを設定することをさらに含む、という実施形態をさらに含むことができる。この方法は、単一のビット指標が標準位置に格納されること、などであるがこれらに限定されない、いくつかの利点をもたらす。
【００１０】
方法は、任意選択として、１次アクセス・スレッドと実行が保留されている２次アクセス・スレッドの両方を含む複数の関与スレッド間でコピーを同期することをさらに含むことができる。この方法は、１次アクセス・スレッドによって、ターゲット・オブジェクト・ヘッダ内の未コピー・データ値をデータ・オブジェクトのトータル・サイズに初期化することをさらに含む。この方法は、複数の関与スレッドのいずれかの２次アクセス・スレッドがコピーし始めるのに応答して、ターゲット・オブジェクト・ヘッダ内のコピー・スレッド・データ値を増やす（インクリメントする）ことをさらに含む。この方法は、いずれかの関与スレッドがデータ・オブジェクトのセクションのコピーをスタートさせるのに応答して、データのセクションのサイズだけ未コピー値を減らす（デクリメントする）ことをさらに含む。この方法は、未コピー値が０に達したという、いずれかの２次アクセス・スレッドによる判定に応答して、コピー・スレッド・データ値を減らす（デクリメントする）ことをさらに含み、ターゲット・オブジェクト・ヘッダの置き換えは、コピー・スレッド・データ値が初期値まで減らされたという判定に応答して、１次アクセス・スレッドによって行われる。この方法は、同期式コピーが複数のアクセス・スレッドによって行われ、保留時間を低減すること、などであるがこれらに限定されない、いくつかの利点をもたらす。
【００１１】
方法は、任意選択として、ターゲット・オブジェクト・ヘッダの置き換えが、１回のメモリ更新で行われ、指標をリセットすること、およびクラス情報を復元することを含む、という実施形態をさらに含むことができる。この方法は、１次アクセス・スレッドが、１回の動作を行って、データ・オブジェクトへのアクセスを復元することができること、などであるがこれらに限定されない、いくつかの利点をもたらす。
【００１２】
方法は、任意選択として、１次アクセス・スレッドと２次アクセス・スレッドとのそれぞれが、ガベージ・コレクション・スレッドまたはアプリケーション・スレッドのうちの１つである、という実施形態をさらに含むことができる。この方法は、アプリケーション・スレッドまたはガベージ・コレクション・スレッドがコピーを行うことができること、などであるがこれらに限定されない、いくつかの利点をもたらす。
【００１３】
方法は、任意選択として、識別することが、メモリ内のライブ・オブジェクトのスキャンを行うガベージ・コレクション・スレッド、または、通常の実行中にライブ・オブジェクトに遭遇するアプリケーション・スレッド、のうちの少なくとも１つによって、ソース・コピーを参照するオブジェクト参照をメモリ内のライブ・オブジェクトから読み取ることをさらに含む、という実施形態をさらに含むことができる。この方法は、コピーのためのデータ・オブジェクトを識別すること、などであるがこれらに限定されない、いくつかの利点をもたらす。
【００１４】
本発明の別の態様は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのシステムであって、命令を含むメモリ媒体と、メモリ媒体に連結されたバスと、命令を実行すると、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーを識別すること、１次アクセス・スレッドによって、ターゲット位置へのソース・コピーのコピーを開始することであって、コピーが進行中であることを示すように設定された指標を含む、ターゲット位置にあるターゲット・オブジェクトのためのターゲット・オブジェクト・ヘッダを作成することを含む、開始すること、コピーが進行中であることを指標が示している間、データ・オブジェクトを使用しようとする２次アクセス・スレッドの実行を保留すること、およびコピーの完了に応答して、ソース・コピーのソース・オブジェクト・ヘッダのコピーでターゲット・オブジェクト・ヘッダを置き換えること、をシステムに行わせる、バスに連結されたプロセッサと、を備えるシステムを提供する。
【００１５】
本発明のさらに別の態様は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのコンピュータ・プログラム製品であって、コンピュータ可読ストレージ媒体を備え、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーを識別することと、１次アクセス・スレッドによって、ターゲット位置へのソース・コピーのコピーを開始することであって、コピーが進行中であることを示すように設定された指標を含む、ターゲット位置にあるターゲット・オブジェクトのためのターゲット・オブジェクト・ヘッダを作成することを含む、開始することと、コピーが進行中であることを指標が示している間、データ・オブジェクトを使用しようとする２次アクセス・スレッドの実行を保留することと、コピーの完了に応答して、ソース・コピーのソース・オブジェクト・ヘッダのコピーでターゲット・オブジェクト・ヘッダを置き換えることと、を少なくとも１つのコンピュータ・デバイスに行わせるプログラム命令が、コンピュータ可読ストレージ媒体に格納された、コンピュータ・プログラム製品を提供する。
【００１６】
本発明のさらに別の態様は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのシステムを配置するための方法であって、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーを識別することと、１次アクセス・スレッドによって、ターゲット位置へのソース・コピーのコピーを開始することであって、コピーが進行中であることを示すように設定された指標を含む、ターゲット位置にあるターゲット・オブジェクトのためのターゲット・オブジェクト・ヘッダを作成することを含む、開始することと、コピーが進行中であることを指標が示している間、データ・オブジェクトを使用しようとする２次アクセス・スレッドの実行を保留することと、コピーの完了に応答して、ソース・コピーのソース・オブジェクト・ヘッダのコピーでターゲット・オブジェクト・ヘッダを置き換えることと、を行うように動作する少なくとも１つのコンピュータ・デバイスを備えるコンピュータ・インフラストラクチャを提供することを含む方法を提供する。
【００１７】
本発明のこれらおよび他の特徴は、添付の図面を併用して、本発明の様々な態様の以下の詳細な説明から、より容易に理解されよう。
【図面の簡単な説明】
【００１８】
【図１】本発明の１つの実施形態によるコンピューティング環境を描写する図である。
【図２】本発明の１つの実施形態によるシステム図である。
【図３】本発明の１つの実施形態による実例のデータ・オブジェクト・ヘッダを描写する図である。
【図４】本発明の１つの実施形態による実例の更新後のソース・コピー・ヘッダを描写する図である。
【図５】本発明の１つの実施形態による実例のターゲット・ヘッダを描写する図である。
【図６】本発明の１つの実施形態による実例のターゲット・ヘッダを描写する図である。
【図７】本発明の１つの実施形態による実例の処理の流れ図である。
【図８】本発明の１つの実施形態による実例のターゲット・データ・オブジェクトを描写する図である。
【図９】本発明の１つの実施形態による実例の方法の流れ図である。
【発明を実施するための形態】
【００１９】
図面は、必ずしも拡大縮小していない。図面は概略図にすぎず、本発明の特定のパラメータを描くことを意図するものではない。図面は、本発明の典型的な実施形態だけを描写することを意図するものであり、したがって、本発明の範囲を限定するものとみなされるべきではない。図面において、同じ番号は、同じ要素を表す。
【００２０】
実施形態が示された添付の図面を参照しながら、例証的な実施形態が、本明細書においてより完全にこれから説明される。しかし本開示は、多くの異なる形で具体化されることが可能であり、本明細書において示された実施形態に限定されるものと解釈されるべきではない。むしろ、これらの実施形態は、本開示が完全かつ完璧であり、本開示の範囲を当業者に完全に伝えるように提供される。説明では、よく知られた特徴および技法の詳細は、本実施形態を必要以上にあいまいにしないように省略されることがある。
【００２１】
本明細書において使用される専門用語は、特定の実施形態だけを説明するためのものであり、本開示を限定することを意図するものではない。本明細書において使用されるように、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、別途文脈がはっきり示さない限り、複数形も同様に含むことを意図するものである。さらに、用語「ａ」、「ａｎ」、等の使用は量の限定を表さず、むしろ、参照項目のうちの少なくとも１つの存在を表す。用語「セット（set）」は、少なくとも１つの量を意味することを意図するものである。用語「備える（comprises）」もしくは「備える（comprising）」またはその両方、あるいは「含む（includes）」もしくは「含む（including）」、またはその両方は、本明細書において使用されるとき、述べられた特徴、領域、整数、ステップ、動作、要素、または構成要素、あるいはその組合せの存在を述べるが、１つまたは複数の他の特徴、領域、整数、ステップ、動作、要素、構成要素、またはこれらのグループ、あるいはその組合せの存在または追加を排除しないということがさらに理解されよう。
【００２２】
本発明の実施形態は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための手法を提供する。１つの実施形態において、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピーが識別される。ターゲット位置へのソース・コピーのコピーは、１次アクセス・スレッドによって開始される。コピーをこのように開始することは、ターゲット位置にあるターゲット・オブジェクトのために、コピーが進行中であることを示すように設定された指標を含む一時ターゲット・オブジェクト・ヘッダを作成することを含む。コピーが発生しているとき、データ・オブジェクトを使用しようとしている他の任意のアクセス・スレッドの実行は、コピーが進行中であることを指標が示している限り保留される。コピーが完了すると、ターゲット・オブジェクト・ヘッダは、ソース・オブジェクト・ヘッダのコピーで置き換えられ、これにより、指標はリセットされ、アクセス・スレッドは実行を再開することができる。
【００２３】
これから図１を参照すると、コンピューティング環境１０の例の概略図が示されている。コンピューティング環境１０は、適切なコンピューティング環境の１つの例にすぎず、本明細書において説明される本発明の実施形態の使用または機能の範囲について、何らかの限定を示すことを意図するものではない。いずれにしても、コンピューティング環境１０は、上記に示された機能のいずれかを実装すること、または実行すること、あるいはその両方ができる。
【００２４】
コンピューティング環境１０にはコンピュータ・システム／サーバ１２があり、これは、非常に多くの他の汎用または専用のコンピューティング・システム環境または構成で動作可能である。コンピュータ・システム／サーバ１２による使用に適している可能性のある、よく知られたコンピューティング・システム、環境、または構成、あるいはその組合せの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルド・デバイスまたはラップトップ・デバイス、マルチ・プロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能家庭用電化製品、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および、上記のシステムまたはデバイスのいずれかを含む分散クラウド・コンピューティング環境、ならびに同様のものを含むがこれらに限定されない。
【００２５】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行されるプログラム・モジュールなど、コンピュータ・システム実行可能命令の一般的な背景で説明されることが可能である。一般に、プログラム・モジュールは、特定のタスクを行うか、特定の抽象データ型を実行するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造、などを含むことができる。コンピュータ・システム／サーバ１２は、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが行われる分散クラウド・コンピューティング環境において実行されることが可能である。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルとリモート両方のコンピュータ・システム・ストレージ媒体の中にあることが可能である。
【００２６】
図１に示されるように、コンピューティング環境１０におけるコンピュータ・システム／サーバ１２は、汎用コンピューティング・デバイスの形で示されている。コンピュータ・システム／サーバ１２の構成要素は、１つまたは複数のプロセッサまたは処理ユニット１６、システム・メモリ２８、および、システム・メモリ２８を含む様々なシステム構成要素をプロセッサ１６に連結するバス１８を含むことができるがこれらに限定されない。
【００２７】
バス１８は、メモリ・バスまたはメモリ・コントローラ、周辺機器バス、アクセラレイテッド・グラフィックス・ポート、および、様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バス、を含むバス構造のいくつかのタイプのいずれかの１つまたは複数に相当する。例として、また限定ではなく、このようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ（ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）バス、エンハンストＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バスを含む。
【００２８】
コンピュータ・システム／サーバ１２は、典型的には、様々なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム／サーバ１２によってアクセス可能な任意の利用可能媒体であることが可能であり、揮発性媒体と不揮発性媒体の両方、取外し可能媒体と取外し不能媒体の両方を含む。
【００２９】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ）３０またはキャッシュ・メモリ３２あるいはその両方などの揮発性メモリの形のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ１２は、他の取外し可能／取外し不能な、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含むことができる。ほんの一例として、ストレージ・システム３４は、（図示されていないが、典型的には「ハード・ドライブ」と呼ばれる）取外し不能な不揮発性磁気媒体に対して読書きを行うために提供されることが可能である。図示されていないが、取外し可能な不揮発性磁気ディスク（例えば「フロッピー（Ｒ）・ディスク」）に対して読書きを行うための磁気ディスク・ドライブ、および、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体などの取外し可能な不揮発性光ディスクに対して読書きを行うための光ディスク・ドライブが提供されることが可能である。このような事例において、それぞれは、１つまたは複数のデータ媒体インターフェースによってバス１８に接続されることが可能である。下記においてさらに描写され、説明されるように、メモリ２８は、本発明の実施形態の機能を実行するように構成されたプログラム・モジュールのセット（例えば、少なくとも１つ）を備える少なくとも１つのプログラム製品を含むことができる。
【００３０】
本発明の実施形態は、コンピュータ可読信号媒体として実装されることが可能であり、（例えば、ベースバンドの中で、または搬送波の一部として）コンピュータ可読プログラム・コードが含まれる伝搬データ信号を含むことができる。このような伝搬信号は、電磁気信号、光信号、またはこれらの任意の適切な組合せを含むがこれらに限定されない様々な形のいずれかであることが可能である。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、命令実行システム、装置、もしくはデバイスによって、またはこれらと接続して使用するためにプログラムを通信、伝搬、または輸送することができるいずれかのコンピュータ可読媒体であることが可能である。
【００３１】
コンピュータ可読媒体に含まれるプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、無線周波数（ＲＦ）、等、または前述の任意の適切な組合せを含むがこれらに限定されない任意のふさわしい媒体を使用して伝送されることが可能である。
【００３２】
プログラム／ユーティリティ４０は、プログラム・モジュール４２のセット（少なくとも１つ）を備え、例として、また限定ではなく、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ２８に格納されることが可能である。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはこれらのいくつかの組合せのそれぞれは、ネットワーキング環境の実装形態を含むことができる。プログラム・モジュール４２は、一般に、本明細書において説明されるような本発明の実施形態の機能または方法あるいはその両方を実行する。
【００３３】
コンピュータ・システム／サーバ１２は、例えばキーボード、ポインティング・デバイス、ディスプレイ２４、等の１つもしくは複数の外部デバイス１４、利用者がコンピュータ・システム／サーバ１２と対話できるようにする１つもしくは複数のデバイス、または、コンピュータ・システム／サーバ１２が１つもしくは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス（例えば、ネットワーク・カード、モデム、等）、あるいはその組合せと通信することもできる。このような通信は、Ｉ／Ｏインターフェース２２を介して発生することが可能である。さらに、コンピュータ・システム／サーバ１２は、ローカル・エリア・ネットワーク（ＬＡＮ）、一般的な広域ネットワーク（ＷＡＮ）、またはパブリック・ネットワーク（例えばインターネット）、あるいはその組合せなどの１つまたは複数のネットワークと、ネットワーク・アダプタ２０を介して通信することができる。描写されたように、ネットワーク・アダプタ２０は、コンピュータ・システム／サーバ１２の他の構成要素と、バス１８を介して通信する。図示されていないが、他のハードウェア構成要素またはソフトウェア構成要素あるいはその両方が、コンピュータ・システム／サーバ１２と共に使用されることが可能であるということが理解されよう。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システム、等を含むがこれらに限定されない。
【００３４】
これから図２を参照すると、本発明の１つの実施形態による、本明細書において論じられる機能を説明するシステム図が示されている。本明細書において説明される教示は、シングル・コンピュータ・デバイス、クライアント／サーバ環境、ネットワーク・コンピューティング環境（例えば、クラウド・コンピューティング環境５０）、または同様のもの、あるいはその組合せを含むがこれらに限定されないコンピューティング環境７０のいずれかのタイプにおいて実行されることが可能であるということがわかる。スタンド・アロンのコンピュータ・システム／サーバ１２が、例証のためだけに図２に示されている。本明細書において説明される教示が、ネットワーク化されたコンピューティング環境において実行される場合、各クライアントは、ＧＣコピー最適化エンジン（以下、「システム７２」）を備える必要はない。むしろ、システム７２は、最適化されたＧＣを提供するためにクライアントと（例えばワイヤレスで）通信するサーバまたはサーバ対応デバイスにロードされることが可能である。いずれにしても、描写されたように、システム７２は、コンピュータ・システム／サーバ１２内に示されている。一般に、システム７２は、図１のコンピュータ・システム１２上のプログラム／ユーティリティ４０として実行されることが可能であり、本明細書において説明される機能を有効にすることができる。システム７２は、ネットワーク化されたコンピューティング環境においてＩＴリソースに関するコマンドを受信、処理、または実行、あるいはその組合せを行うシステムのいずれかのタイプに組み込まれること、または、このシステムと共に動作することが可能であるということがさらにわかる。このような他のシステムは、簡潔さのために図２には示されていない。
【００３５】
これらに従って、システム７２は、汎用コンピュータに類似の複数の機能を実行することができる。具体的には、他の機能の中でも、システム７２は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化することができる。これを行うために、システム７２は、ソース・コピー識別器７４、コピー開始器７６、スレッド実行保留器７７、およびヘッダ置換器７８を備えることができる。
【００３６】
システム７２のソース・コピー識別器７４は、コンピュータ・システム／サーバ１２によって実行されると、ガベージ・コレクション（ＧＣ）動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピー８８Ｎを識別するように構成される。上述のように、ＧＣ動作は、アクティブなデータ・オブジェクト８８Ａ〜８８Ｎを識別し、コンピュータ・システム８２のメモリ８４から使用されていないデータ・オブジェクトを除去する。この点について、本発明の教示は、ＧＣが行われるいずれかの環境において実行されることが可能である。１つの実施形態において、ＧＣ動作は、管理されたランタイム環境（例えば、Ｊａｖａ（Ｒ）、Ｐｙｔｈｏｎ（Ｒ）、Ｒｕｂｙ（Ｒ）、Ｃ＃（Ｒ）、Ｓｗｉｆｔ（Ｒ）、または同様のもの、あるいはその組合せ）において行われることが可能である（米国または他の場所あるいはその両方において、Ｊａｖａ（Ｒ）は、Sun Microsystemsの商標であり、Ｐｙｔｈｏｎは、Python USA,Inc.の商標であり、Ｃ＃は、Microsoft, Inc.の商標であり、Ｓｗｉｆｔは、Apple Inc.の商標である）。このような実施形態において、メモリ８４は、管理されたランタイム環境にデータ・オブジェクト８８Ａ〜８８Ｎを格納するために使用されるヒープであることが可能である。
【００３７】
いずれにせよ、図示のように、メモリ８４は、いくつかのメモリ区画８６Ａ〜８６Ｎに分割される。定期的に、特定のメモリ区画８６Ａ〜８６Ｎに対してＧＣが行われるべきであることが判定されることが可能である。例として、メモリ区画８６Ｂに対してＧＣが行われることになるということが判定されることを仮定する。コピー・コレクタ型ＧＣ環境において、ソース・コピー識別器７４は、データ・オブジェクト８８Ｎが、メモリ区画８６Ｂ（例えば、退避／ソース・エリア）内のアクティブ・オブジェクトであり、したがって、サバイバー空間８６Ｎにコピーされなければならないということを識別する。１つの実施形態において、メモリ８２（例えばヒープ）内の退避／ソース・エリア８６Ｂ内にあるデータ・オブジェクト８８Ａ〜８８Ｎを、オブジェクト・アドレス・フィールドの値が指す場合に、メモリ８２内の任意のライブ・データ・オブジェクト８８Ａ〜８８Ｎ（例えば、データ・オブジェクト８８Ａ〜８８Ｎ）からアクセス・スレッド９２がオブジェクト・アドレス・フィールドを読むときに、データ・オブジェクト８８Ｎが識別される。この識別は、（例えば、ＧＣ動作の一部として）メモリ８２内のライブ・オブジェクトのスキャン（再帰的であり得る）を行う専用のＧＣスレッド９６Ａ〜９６Ｎのどれかによって行われることが可能である。識別は、同様にまたは代替として、通常の実行の過程の中でライブ・オブジェクトに遭遇する通常のアプリケーション・スレッド９４Ａ〜９４Ｎによって行われることが可能である。いずれにせよ、識別されると、サバイバー空間８８Ｎへのデータ・オブジェクト８８Ｎのコピーを始めることができる。
【００３８】
本明細書において説明される本発明の発明者は、同時コピーＧＣ動作時のデータ・オブジェクト８８Ｎのコピーのための現在の解決策に一定の欠陥を発見した。例えば、ストップ・ザ・ワールド・スタイルＧＣにおいて、コピーが完了した後まで、ターゲット・データ・オブジェクト８８Ｎ’を使用するアクセス・スレッド９２に関する問題はない（ターゲット・データ・オブジェクト８８Ｎ’は、場合によっては別のＧＣスレッド９６ＮまたはＣＰＵによって最後にスキャンされるが、スキャン待ち行列に対してプッシュされることはなく、コピーが完了する前にスキャンが利用可能にはならない）。しかし、ＧＣ動作中にデータ・オブジェクト８８Ａ〜８８Ｎにアクセスしようとしているストップ・ザ・ワールド・スタイルＧＣにおけるアプリケーション・スレッド９４Ａ〜９４Ｎは、ＧＣ動作がコピーを終えるのを待つ間に必要な時間より長くなり得る時間、保留される可能性がある。対照的に、同時ＧＣ動作においては、アプリケーション・スレッド９４Ａ〜９４Ｎは、アクティブＧＣスレッド９６Ａ〜９６Ｎと共に動く。したがって、データ・オブジェクト８８Ｎにアクセスしようとしているアクセス・スレッド９２が、ターゲット・データ・オブジェクト８８Ｎ’への転送ポインタをすぐに追いかけることができ、ターゲット・データ・オブジェクト８８Ｎ’がまだコピーされている途中に、ターゲット・データ・オブジェクト８８Ｎ’の内容にアクセスしようとすることができる。
【００３９】
同時ＧＣ動作時のこの問題に対する現在の１つの解決策において、ＧＣを受けているメモリ区画８６Ｂ内のデータ・オブジェクト８８Ｎにアクセスしようとする各アクセス・スレッド９２（アプリケーション・スレッド９４Ａ〜９４Ｎであっても、ＧＣスレッド９６Ａ〜９６Ｎであっても）は、データ・オブジェクト８８Ｎをコピーするために競争することになる。すなわち、各アクセス・スレッド９２は、サバイバー空間８６Ｎ内に自身のための独自の空間を割り当て、この予め割り当てられた空間にデータ・オブジェクト８８Ｎをコピーし始めることになる。次に、このコピーが完了した後、各アクセス・スレッド９２は、データ・オブジェクト８８Ｎのこのコピーをアトミック操作で新しいターゲット・データ・オブジェクト８８Ｎ’として指定しようとすることになる。しかし、この現在の解決策は、最終的に１つしかターゲット・データ・オブジェクト８８Ｎ’にならないいくつかの重複コピーが作成される恐れがある。これは、いくつかの非効率をもたらす。例えば、ターゲット・データ・オブジェクト８８Ｎ’として最終的に使用されなかったデータ・オブジェクト８８Ｎのコピーを作ったいずれかの「負けた（losing）」アクセス・スレッド９２によって使われるＣＰＵ時間、および、負けたアクセス・スレッド９２によってサバイバー空間８６Ｎ内に割り当てられたいずれかの空間（例えばヒープ空間）は、無駄になる。さらに、負けたアクセス・スレッド９２のＣＰＵキャッシュは、コピーの結果として、役に立たないデータで最後には汚される可能性がある。
【００４０】
これらの欠陥は、コピーされているデータ・オブジェクト８８Ｎが比較的大きいものであれば、さらにいっそう目立つようになる。例えば、データ・オブジェクト８８ＮがＣＰＵキャッシュには大きすぎる場合、いずれかの負けたアクセス・スレッド９２のコピー動作は、共有データ・バスを占有する恐れがあり、他のスレッドのための通信を減速させる恐れがある。さらに、データ・オブジェクト８８Ｎのサイズ（例えばＭＢ）、および（例えば、ヒープ内の複数の他のオブジェクトによって参照される）需要が増加するにつれて、重複を作成する確率は、著しく増加することになる。このような大きいオブジェクトのコピーがこのように増加すると、システム性能に対して非常に目立つ負の副次的影響が生じる恐れがある。このことは、複数の大きいコピーを生成するために使用される無駄な空間について特に当てはまる可能性がある。なぜなら、１つの低速スレッド／ＣＰＵがオブジェクトを実際に全くコピーできない恐れがあり（より高速な複数のスレッドによるこのオブジェクトの複数コピーによってサバイバー空間８６Ｎが全体的に消費されているために）、全ＧＣサイクルが中止されなければならないからである。このようにサイクルが中止されると、かなり損失の大きい回復動作が必要となる恐れがあり、非常に長い遅延を引き起こし得、同時ＧＣ動作から生じるいかなる利益も完全になくなる。
【００４１】
本発明の特徴は、同時コピーＧＣ動作時のデータ・オブジェクトのコピーを最適化することによって、可能性のあるものの中の、これらの欠陥のいくつかまたは全てを改善する。これらの特徴は、複数コピーのコピー作成をなくすと同時に、同時コピーＧＣの利点を保つ。これは、ＧＣ動作が行われることが可能な効率を向上させる。いくつかの実施形態において、これらの特徴によって、本発明は、複数のアクセス・スレッド９２を並行に利用して同期式コピー動作を行えるようになり、ＧＣ動作中のコンピュータ動作効率をさらに向上させる。
【００４２】
これから図３〜図４を参照すると、本発明の実施形態によるソース・コピー・ヘッダ１００の例が示されている。図３に示されているように、データ・オブジェクト・ヘッダ１１０は、ＧＣ動作の一部としてコピーするための、まだ識別されたことがない、メモリ８４内のデータ・オブジェクト８８Ａ〜８８Ｎ（図２）のための実例の当初の未修正ヘッダを表す。この点について、データ・オブジェクト・ヘッダ１１０の転送ビット１１２は０に設定され、コピーされていないことを示している。さらに、データ・オブジェクト・ヘッダ１１０内のクラス情報ポインタ１１４は、データ・オブジェクト８８Ａ〜８８Ｎ（図２）についてのクラス情報を指すように設定される。
【００４３】
コピーの候補としてソース・コピー８８Ｎが識別されると、現在の非同時ＧＣの解決策と同様に、ソース・コピー８８Ｎにアクセスしようとしているアクセス・アプリケーション９２は、転送するために（サバイバー空間８６Ｎ内にターゲット・データ・オブジェクト８８Ｎ’のための空間を割り当てるために）「競争」し、アトミック操作でオブジェクト・ヘッダ１００を更新することになる。そうすることになる最初のアクセス・スレッドは、しばしば、「勝った（winning）」スレッドと呼ばれ、本明細書では１次アクセス・スレッド（以下、９２Ａ）と呼ばれる。いずれにせよ、図４は、１次アクセス・スレッド９２Ａによるソース・コピー８８Ｎのヘッダのアトミック更新から生じる更新後のオブジェクト・ヘッダ１２０を示す。図示のように、転送ビット１１２は１に更新され、データ・オブジェクト８８Ｎが新しいターゲット位置に転送されていることを示し、この新しいターゲット位置のアドレスが、クラス情報への以前のポインタの代わりに、クラス位置アドレス１１４に格納された。図示のように、ソース・コピー８８Ｎは、オブジェクトが遠隔地に転送されていることを表すのに１つのビットを必要とするだけある。この実装形態において、転送アドレスは、オブジェクトのクラス／タイプ・ポインタ・スロットと共有される。オブジェクトの整列（それぞれ４バイト〜１６バイト）およびクラス／タイプ情報（同じスロットを占有する場合）が原因で、転送アドレスの下位２ビット〜４ビットが使用されないので、転送ビットは、典型的には、このアドレス・ワードの一部でもある。また、実施される整列が原因で、いくつかの下位ビットは、使用される必要がない可能性がある。
【００４４】
図２をさらに参照すると、システム７２のコピー開始器７６は、コンピュータ・システム／サーバ１２によって実行されると、１次アクセス・スレッド９２Ａによって、識別されたデータのソース・コピー８８Ｎの、ターゲット位置へのコピーを開始するように構成される。具体的には、１次アクセス・スレッド９２Ａとして指定されるための競争の一部として、スレッドは、コピー処理を開始することができる。この開始を実行するために、１次アクセス・スレッド９２Ａは、一時ターゲット・オブジェクト・ヘッダを最初に作成し、ターゲット・データ・オブジェクト８８Ｎ’がコピーされているターゲット位置にターゲット・オブジェクト・ヘッダをコピーする。このヘッダは、コピーが進行中であることを示すように設定された指標を含む。１つの実施形態において、指標は、ターゲット・オブジェクト・ヘッダ内にあり、ソース・オブジェクト・ヘッダ１２０内で転送ビットが占有する位置と同じ位置をターゲット・オブジェクト・ヘッダ内で占有するビットである。この点について、本発明は、ターゲット位置フィールド内（または当初のオブジェクト内のどこか）に、いずれかの追加ビットを必要としない。むしろ、ソース・データ・オブジェクト８８Ｎの（２重の）形は、決して変更されず、コピーＧＣの解決策における、いずれかのソース・データ・オブジェクト８８Ｎのソース・オブジェクト・ヘッダ１２０が変更されるはずの同じ手法で変更されるだけである。「まだコピー中である」という新しい状態は、ターゲット・オブジェクト・ヘッダ内の使用されていないフラグによって保持される。転送ビット１１２は、ターゲット・データ・オブジェクト８８Ｎ’内で通常使用されない（オブジェクトは、１つのＧＣサイクル内で再帰的に転送されない）ので、この、まさに同じビットは、他の場所で使用されるように、新しい中間状態を表すために使用されることが可能である。
【００４５】
これから図５を参照すると、本発明の１つの実施形態による一時ターゲット・オブジェクト・ヘッダ２００の例が示されている。図示のように、ターゲット・オブジェクト・ヘッダ２００は、コピー・ビット２１２が「１」に設定された状態で作成され、コピーが進行中であることを示している。さらに、１つの実施形態において、ターゲット・オブジェクト・ヘッダ２００の他の部分（例えば、クラス情報ポインタ／ターゲット位置アドレス１１４に対応する部分）は、説明されるように、コピーを容易にするために使用されることも可能である。
【００４６】
図４および図５と共に図２を再び参照すると、システム７２のスレッド実行保留器７７は、コンピュータ・システム／サーバ１２によって実行されると、コピーが進行中であることを指標が示している限り、データ・オブジェクトを使用しようとする２次アクセス・スレッドの実行を保留するように構成される。具体的には、コピー指標を有しているターゲット・オブジェクト・ヘッダ２００がアクセス・スレッド９２によって作成され、アクセス・スレッド９２が１次アクセス・スレッド９２Ａとして指定されると、１次アクセス・スレッド９２Ａは、ソース・データ・コピー８８Ｎのデータをターゲット・データ・オブジェクト８８Ｎ’にコピーする処理を行うことができる。この間に、ソース・データ・コピー８８Ｎにアクセスしようとする、１次アクセス・スレッド９２Ａではないいずれかのアクセス・スレッド９２（以下、２次アクセス・スレッド９２Ｎ）は、ソース・オブジェクト・ヘッダ１００内の転送ビット１１２をチェックすることによって、ソース・オブジェクト８８Ｎが転送されたかどうかをチェックすることになる。ソース・オブジェクト・ヘッダ１００に転送ビット１１２が設定されているという判定に応答して、２次アクセス・スレッド９２Ｎは、（例えば、クラス情報位置１１４に格納されたターゲット位置アドレスを介して）ターゲット位置に転送されることになる。ターゲット位置に到着すると、２次アクセス・スレッド９２Ｎは、ターゲット・オブジェクト・ヘッダ２００内のコピー・ビット２１２が設定されているかどうかをチェックすることになる。コピー・ビット２１２が設定されている場合、２次アクセス・スレッド９２Ｎは、コピー・ビット２１２を再びチェックする前にしばらくの間、保留されることになる（例えば、待つことになる）。このようにして、いかなるアクセス・スレッド９２も、指標（例えば、コピー・ビット２１２）によって示されるように、コピーが進行中である間、ターゲット・データ・オブジェクト８８Ｎ’、またはターゲット・オブジェクト・アドレス、あるいはその両方にアクセスするのを禁止される。コピーされているオブジェクトの大部分は比較的小さいので、多くの場合、待つことは、極めて短い間、活発にスピンすることを伴うことになり、素早く利用可能になる。しかし、ターゲット・データ・オブジェクト８８Ｎ’が、所定時間の後、依然として利用できない場合、アクセス・スレッド９２は、ＣＰＵを譲って、やがてスリープすること、および定期的にスリープを解除することを行いながら、さらに何回かのスピンに依存することができる。
【００４７】
１つの実施形態において、スレッド実行保留器７７は、負けた（例えば、２次）アクセス・スレッド９２Ｎを使用して、複数の（関与）アクセス・スレッド９２の間でソース・コピー８８Ｎのコピーが同期されるコピー動作を行うことができる。これは、コピー予定のデータ・オブジェクトが所定のサイズより大きいという判定に基づくことが可能である。いずれにせよ、このような動作において、「勝った」１次アクセス・スレッド９２Ａといずれかの「負けた」２次アクセス・スレッド９２Ｎの両方が、コピー動作に含まれることが可能である。関与することが許容される２次アクセス・スレッド９２Ｎの数は、データ・オブジェクト８８Ｎのサイズ、利用可能なバス空間の量、または同様のもの、あるいはその組合せのような要因に基づいて制限されることが可能である。いずれにせよ、これを行うために、同期式コピーを容易にするために使用される追加情報は、ターゲット・オブジェクト・ヘッダ２００の他の部分（例えば、クラス情報ポインタ／ターゲット位置アドレス１１４に対応する部分）に格納されることが可能である。
【００４８】
これから図６を参照すると、本発明の１つの実施形態による、複数のアクセス・スレッド９２（図２）を利用する同期式コピーに適合された一時ターゲット・オブジェクト・ヘッダ３００が示されている。前述のように、ターゲット・オブジェクト・ヘッダ３００は、設定されたコピー・ビット３１２の形で指標を保持している。さらに、図示のように、まだコピーされていないターゲット・データ・オブジェクト８８Ｎ’のサイズを保持する未コピー・データ値フィールド３１４も設定される。同様に、同期式コピーに関与しているアクセス・スレッド９２の数を保持する関与スレッド・フィールド３１６も設定されている。
【００４９】
これから図７を参照すると、本発明の１つの実施形態による、複数の関与スレッドを使用する同期式コピーを示す処理の流れ図４００が示されている。フローは、４０２において、データ・オブジェクト８８Ｎにアクセスしようとするいずれかのアクセス・スレッド９２が、ターゲット・データ・オブジェクト８８Ｎ’（図２）に空間を割り当てようとする上述の処理で始まる。図２および図６をさらに参照すると、ターゲット・オブジェクト・ヘッダ２５０の作成は、４０４において、コピー予定のデータ・オブジェクト８８Ｎのトータル・サイズに未コピー・データ値フィールド３１４を設定すること、コピー・スレッド値フィールド３１６を０に設定すること、および、コピー・ビットを１に設定することによって、ターゲット・オブジェクト・ヘッダ２５０を初期化することを含む。４０６において、アクセス・スレッド９２は、前述のような転送を勝ち取り、１次アクセス・スレッド９２Ａになろうとする。
【００５０】
４０８において、スレッドが転送を勝ち取るのに成功し、１次アクセス・スレッド９２Ａになると、サバイバー空間へのソース・コピー８８Ｎのコピーは固定長セクションにおいて最後から最初に進み、１次アクセス・スレッド９２Ａは、４１０において、任意の整列していないデータ（例えば、長さが完全なセクションを成していないソース・コピー８８Ｎの最後にあるデータ）のコピーを行う。コピー中、１次アクセス・スレッド９２Ａがコピー動作を完了するたびに、未コピー・データ値フィールド３１４は、４１２において、未コピー・データ値が０より大きい（例えば、まだコピーされていないデータがもっとある）ことを確かめるためにチェックされる。４１４において、コピーされずに残っているデータがまだある場合、１次アクセス・スレッド９２Ａは、コピー予定のセクションを選択し、アトミック操作でこれに勝とうとする。４１６において、セクションに成功裏に勝たなかった場合、フロー処理は４１２に戻る。そうでなければ、１次アクセス・スレッド９２Ａは、データがコピーされているセクションのサイズだけ未コピー値を減らし、４１８において、勝ったセクションをコピーする。これは、未コピー・データ値が０になる（例えば、まだコピーされていないデータがこれ以上ない）まで続き、この時、１次アクセス・スレッド９２Ａは、４３０において、他の全てのスレッドがこれらのコピーを完了するまで（例えば、コピー・スレッド・データ値が０になるまで）、４３２において待つ。
【００５１】
負けた／２次アクセス・スレッド９２Ｎである（例えば、４０６において転送を勝ち取ることに、４０８において成功しなかった、または、１次アクセス・スレッド９２Ａが決定された後、ソース・コピー８８Ｎにアクセスしようとする）いずれかのアクセス・スレッド９２について、このスレッドは、１次アクセス・スレッド９２Ａによって設定された転送アドレスを使用して４１９において転送され、４２０において、２次アクセス・スレッド９２Ｎは、指標をチェックして（例えば、コピー・ビット３１２が設定されているかどうか）、コピーが進行中であるかどうかを判定する。進行中の場合、１次アクセス・スレッド９２Ａと同様に、２次アクセス・スレッド９２Ｎは、４２２において未コピー・データ値フィールド３１４をチェックして、未コピー・データ値が０より大きい（例えば、まだコピーされていないデータがもっとある）ことを確かめる。４２４において、コピーされずに残っているデータがまだある場合、２次アクセス・スレッドは、コピー予定のセクションを選択し、アトミック操作でこれに勝とうとし、データがコピーされているセクションのサイズだけ未コピー値も減らし、これが、２次スレッド９２Ｎによってコピーされているデータの第１のセクションである場合、コピー・スレッド値フィールド３１６内のコピー・スレッド・データ値を増やす（インクリメントする）。２次スレッド９２Ｎは、次に、４２８において勝ったセクションをコピーし、この後、処理は４２０に復帰する。４２６においてセクションに成功裏に勝たなかった場合、処理は４２０に戻る。これは、未コピー・データ値が０になる（例えば、まだコピーされていないデータがこれ以上ない）まで続き、この時、４２３において、２次アクセス・スレッドは、アトミック操作でコピー・スレッド値フィールド３１６内のコピー・スレッド・データ値を１だけ減らし（デクリメントし）、コピーが完了したこと（例えば、コピー・ビット２１２が０であるかどうか）を指標が示すまで待ち、この時、フローは４４０に進む。
【００５２】
これから図８を参照すると、本発明の１つの実施形態による、複数のアクセス・スレッド（図２）によるコピー中のターゲット・データ・オブジェクト５００の例が示されている。図２をさらに参照すると、図示のように、同期式コピーを行うアクセス・スレッド９２は、１次アクセス・スレッドＷ、ならびに２次アクセス・スレッドＴ１およびＴ２を含む。したがって、（１次アクセス・スレッドＷに加えて）２つの２次アクセス・スレッド９２Ｎがコピーに関与しているという事実を反映するために、コピー・スレッド・データ値＝２である。図示のように、ターゲット・データ・オブジェクト８８Ｎ’の最後にある非整列セクション５２０は、１次アクセス・スレッドＷによってコピーされている。他のセクション５２２はコピーの様々な段階にあり、３つのセクションが既にコピーされ、３つのセクションが現時点でコピー中であり、２つのセクションがまだコピーされていない。したがって、未コピー・データ値は、まだコピーされていない２つのセクションのサイズに等しい。さらに、オブジェクト・ヘッダ５２４の最終バージョンも、説明されるように、まだコピーされていない。
【００５３】
図３および図５と共に再び図２を参照すると、システム７２のスレッド実行保留器７８は、コンピュータ・システム／サーバ１２によって実行されると、コピーの完了に応答して、ソース・コピーの当初のソース・オブジェクト・ヘッダ１１０のコピーでターゲット・オブジェクト・ヘッダ３００を置き換えるように構成される。具体的には、図７をさらに参照すると、全てのアクセス・スレッド９２がコピーを完了すると、未コピー・データ値とコピー・スレッド・データ値の両方が０であることによって示されるように、１次アクセス・スレッド９２Ａは、４３４におけるように、予めコピーされたデータ・オブジェクト８８Ｎのものにターゲット・オブジェクト・ヘッダ３００を復元することによってコピーを完了し、指標もリセットする（例えば、コピー・ビット２１２を０にリセットする）。１つの実施形態において、ターゲット・オブジェクト・ヘッダの置き換えは、１回のメモリ更新で行われ、この中で、指標がリセットされると共にクラス情報が復元され、オブジェクトの年齢、ハッシュ・ビット等であるがこれらに限定されないターゲット・ヘッダ内にある可能性のある他の任意のフィールドも復元される。指標をこのようにリセットすることによって、ターゲット・データ・オブジェクト８８Ｎ’が使用のために利用できることを全てのアクセス・スレッド９２に示し、２次アクセス・スレッド９２Ｎの保留を終了する。次に、データ・オブジェクトにアクセスするためにアプリケーション・スレッド９６Ａ〜９６Ｎによって使用されるアドレスは、ターゲット位置を指すためにリセットされることが可能である。
【００５４】
これから図２と共に図９を参照すると、本発明の１つの実施形態による方法の流れ図６００が示されている。６１０において、システム７２のソース・コピー識別器７４は、コンピュータ・システム／サーバ１２によって実行されると、ガベージ・コレクション動作の一部としてコピーされることになるデータ・オブジェクトのソース・コピー８８Ｎを識別する。６２０において、システム７２のコピー開始器７６は、コンピュータ・システム／サーバ１２によって実行されると、ターゲット位置へのソース・コピー８８Ｎのコピーを開始する。開始することは、ターゲット位置にあるターゲット・オブジェクトのために、指標を含むターゲット・オブジェクト・ヘッダを１次アクセス・スレッド９２Ａが作成することを含む。この指標は、コピーが進行中であることを示すように設定される。６３０において、システム７２のスレッド実行保留器７７は、コンピュータ・システム／サーバ１２によって実行されると、コピー処理において保留スレッドを任意選択として使用している間、コピーが進行中であることを指標が示している限り、データ・オブジェクトを使用しようとしている２次アクセス・スレッド９２Ｎの実行を保留する。６４０において、システム７２のヘッダ置換器７８は、コンピュータ・システム／サーバ１２によって実行されると、コピーの完了に応答して、ソース・コピーのソース・オブジェクト・ヘッダのコピーでターゲット・オブジェクト・ヘッダを置き換える。この復元が、コピーされたデータ・オブジェクトへのアクセスを復元する。
【００５５】
図９の流れ図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示している。この点に関して、流れ図における各ブロックは、指定の論理機能を実行するための１つまたは複数の実行可能命令を含むコードのモジュール、セグメント、または一部を表すことができる。いくつかの代替実装形態において、ブロックに記された機能は、図に描写された順序とは異なる順序で発生することが可能であるということにも留意されたい。例えば、連続して示された２つのブロックは、実際には、実質的に並行に実行されることが可能である。流れ図の各ブロックは、指定の機能もしくは行為を行う専用ハードウェア・ベースのシステム、または、専用ハードウェアとコンピュータ命令の組合せによって実行されることが可能であるということにも留意されたい。
【００５６】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための手法として本明細書において示され、説明されているが、本発明は、様々な代替実施形態をさらに提供するということがわかる。例えば、１つの実施形態において、本発明は、サブスクリプション・ベース、広告ベース、および／または料金ベースで本発明の処理を行う方法を提供する。すなわち、ソリューション・インテグレータなどのサービス・プロバイダは、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための機能を提供しようとすることができる。この場合、サービス・プロバイダは、１人または複数の利用者のために、本発明の処理を行うコンピュータ・システム１２（図１）などのコンピュータ・インフラストラクチャの作成、保守、サポート、等を行うことができる。見返りとして、サービス・プロバイダは、サブスクリプションもしくは料金もしくはその両方の同意に基づいて利用者から支払いを受けることができ、または、サービス・プロバイダは、１つもしくは複数のサード・パーティへの広告内容の販売から支払いを受けることができ、あるいはその両方ができる。
【００５７】
別の実施形態において、本発明は、同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのコンピュータ実行方法を提供する。この場合、コンピュータ・システム１２（図１）などのコンピュータ・インフラストラクチャが提供されることが可能であり、本発明の処理を行うための１つまたは複数のシステムの取得（例えば、作成、購入、使用、修正、等）が行われ、コンピュータ・インフラストラクチャに配置されることが可能である。この点について、システムの配置は、（１）コンピュータ可読媒体からコンピュータ・システム１２（図１）などのコンピューティング・デバイスにプログラム・コードをインストールすること、（２）１つまたは複数のコンピューティング・デバイスをコンピュータ・インフラストラクチャに追加すること、ならびに、（３）コンピュータ・インフラストラクチャの１つまたは複数の既存のシステムの組込みまたは修正あるいはその両方を行い、コンピュータ・インフラストラクチャが本発明の処理を実行できるようにすること、の１つまたは複数を含むことができる。
【００５８】
本明細書において説明された機能的構成要素のうちのいくつかは、これらの実装形態の独立性をより具体的に強調するために、システムまたはユニットとしてラベル付けされてきた。例えば、システムまたはユニットは、カスタムＶＬＳＩ回路もしくはゲート・アレイ、論理チップなどの市販の半導体、トランジスタ、または他のディスクリート・コンポーネントを備えるハードウェア回路として実装されることが可能である。システムまたはユニットは、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ・ロジック、プログラマブル・ロジック・デバイス、または同様のものなどのプログラマブル・ハードウェア・デバイスにおいて実装されることも可能である。システムまたはユニットは、様々なタイプのプロセッサによる実行のためのソフトウェアにおいて実装されることも可能である。システムもしくはユニットまたは実行可能コードの構成要素は、例えば、オブジェクト、手順、または機能として、例えば、編成されることが可能なコンピュータ命令の１つまたは複数の物理ブロックまたは論理ブロックを備えることができる。それでも、識別されたシステムまたはユニットの実行可能ファイルは相互に物理的に配置される必要はないが、相互に論理的に結合されると、システムまたはユニットを備え、システムまたはユニットのために決められた目的を達成する、異なる位置に格納された完全に異なる命令を含むことができる。
【００５９】
さらに、実行可能コードのシステムまたはユニットは、単一の命令、または多くの命令であることが可能であり、ことによると、いくつかの異なるコード・セグメントにわたって、異なるプログラム間に、およびいくつかのメモリ・デバイスをまたいで、分散されることが可能である。同様に、動作データは、本明細書においてモジュール内で識別され、示されることが可能であり、任意の適切な形式で含まれ、任意の適切なタイプのデータ構造内で編成されることが可能である。動作データは、単一のデータ・セットとして収集されることが可能であり、または、異なるストレージ・デバイスおよび完全に異なるメモリ・デバイスを含む異なる場所にわたって分散されることが可能である。
【００６０】
さらに、システム／ユニットは、ソフトウェアと１つまたは複数のハードウェア・デバイスとの組合せとして実装されることも可能である。例えば、システム７２は、メモリ媒体（例えば、メモリ・ストレージ・デバイス）に格納されたソフトウェア実行可能コードの組合せで具体化されることが可能である。さらなる例において、システムまたはユニットは、動作データのセットに対して動作するプロセッサの組合せであることが可能である。
【００６１】
上述のように、実施形態のうちのいくつかは、ハードウェアにおいて具体化されることが可能である。ハードウェアは、ハードウェア要素として言及されることがある。一般に、ハードウェア要素は、一定の動作を行うように配列された任意のハードウェア構造を指すことができる。１つの実施形態において、例えば、ハードウェア要素は、基板上に製造された任意のアナログまたはデジタルの電気的または電子的要素を含むことができる。製造は、例えば、相補型金属酸化膜半導体（ＣＭＯＳ）、バイポーラ、およびバイポーラＣＭＯＳ（ＢｉＣＭＯＳ）技法などのシリコン・ベースの集積回路（ＩＣ）技法を使用して行われることが可能である。ハードウェア要素の例は、プロセッサ、マイクロプロセッサ、回路、回路素子（例えば、トランジスタ、抵抗器、キャパシタ、インダクタ、など）、集積回路、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル・ロジック・デバイス（ＰＬＤ）、デジタル・シグナル・プロセッサ（ＤＳＰ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップ・セット、などを含むことができる。しかし、実施形態は、このコンテキストに限定されない。
【００６２】
同様に上述されたように、いくつかの実施形態は、ソフトウェアにおいて具体化されることが可能である。ソフトウェアは、ソフトウェア要素として言及されることがある。一般に、ソフトウェア要素は、一定の動作を行うように配列された任意のソフトウェア構造を指すことができる。１つの実施形態において、例えば、ソフトウェア要素は、プロセッサなどのハードウェア要素による実行に適合されたプログラム命令またはデータあるいはその両方を含むことができる。プログラム命令は、実行されると、動作の対応セットをプロセッサに実行させることができる所定の構文で配列された単語、値、または記号を含むコマンドの編成されたリストを含むことができる。
【００６３】
本発明は、コンピュータ・プログラム製品であることも可能である。コンピュータ・プログラム製品は、本発明の態様をプロセッサに行わせるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体（または複数の媒体）を含むことができる。
【００６４】
本発明は、統合の任意の可能な技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであることが可能である。コンピュータ・プログラム製品は、本発明の態様をプロセッサに行わせるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体（または複数の媒体）を含むことができる。
【００６５】
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のための命令を保持し、格納することができる有形デバイスであることが可能である。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せであることが可能であるがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の完全に網羅されていないリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、命令が記録されたパンチ・カードまたは溝内隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。コンピュータ可読ストレージ媒体は、本明細書において使用されるように、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通じて伝送される電気信号など、それ自体が一過性の信号であると解釈されるべきではない。
【００６６】
本明細書において説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から個々のコンピューティング・デバイス／処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せといったネットワークを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロードされることが可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えることができる。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、個々のコンピューティング・デバイス／処理デバイス内のコンピュータ可読ストレージ媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【００６７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ（ＩＳＡ）命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋、もしくは同様のものなどのオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語、もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む１つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コード、であることが可能である。コンピュータ可読プログラム命令は、スタンド・アロンのソフトウェア・パッケージとして、全面的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で実行することができ、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくは広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されることが可能であり、または、接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われることが可能である。いくつかの実施形態において、例えば、プログラマブル・ロジック回路機器、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路機器は、本発明の態様を行うために、コンピュータ可読プログラム命令の状態情報を利用して電子回路機器を個別化することによって、コンピュータ可読プログラム命令を実行することができる。
【００６８】
本発明の態様は、本発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら本明細書において説明されている。流れ図またはブロック図あるいはその両方の各ブロック、ならびに流れ図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行されることが可能であるということが理解されよう。
【００６９】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサによって実行する命令が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実行するための手段を作り出すべく、機械を生み出すために、汎用コンピュータ、専用コンピュータ、または他のプログラム可能処理装置のプロセッサに提供されることが可能である。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為の態様を実行する命令を含む製品を備えるべく、特定の手法で機能するようにコンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに指図できるコンピュータ可読ストレージ媒体に格納されることも可能である。
【００７０】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定された機能／行為を実行するべく、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを行って、コンピュータ実行処理を生み出すために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされることも可能である。
【００７１】
図中の流れ図およびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図の中の各ブロックは、指定の論理機能を実行するための１つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または一部を表すことができる。いくつかの代替実装形態において、ブロックに記された機能は、図に記された順序とは異なる順序で発生することが可能である。例えば、連続して示された２つのブロックは、実際には、実質的に並行に実行されることが可能であり、または、ブロックは、時には、含まれる機能に応じて、逆の順序で実行されることが可能である。ブロック図または流れ図あるいはその両方の各ブロック、およびブロック図または流れ図あるいはその両方におけるブロックの組合せは、指定の機能もしくは行為を行う、または、専用ハードウェアとコンピュータ命令の組合せを行う、専用ハードウェア・ベースのシステムによって実行されることが可能であるということにも留意されたい。
【００７２】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための手法が提供されたということが明らかである。本発明は、例示的実施形態と共に、特に示され、説明されてきたが、変形形態および変更形態が当業者には想起されるであろうということが理解されよう。したがって、添付の特許請求の範囲は、本発明の範囲に含まれる全てのこのような修正および変更を含むことを意図するものであるということが理解されよう。
【図１】
2021509509.tif 000003
【図２】
2021509509.tif 000004
【図３】
2021509509.tif 000005
【図４】
2021509509.tif 000006
【図５】
2021509509.tif 000007
【図６】
2021509509.tif 000008
【図７】
2021509509.tif 000009
【図８】
2021509509.tif 000010
【図９】
2021509509.tif 000011
【手続補正書】
【提出日】令和3年1月22日(2021.1.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するための方法であって、
プロセッサが、
前記ガベージ・コレクション動作の一部としてコピーされることになる前記データ・オブジェクトのソース・コピーを識別することと、
１次アクセス・スレッドによって、ターゲット位置への前記ソース・コピーのコピーを開始することであって、前記ターゲット位置にあるターゲット・オブジェクトのために、前記コピーが進行中であることを示すように設定された指標を含むターゲット・オブジェクト・ヘッダを作成することを含む、前記開始することと、
前記コピーが進行中であることを前記指標が示している間、前記データ・オブジェクトを使用しようとしている２次アクセス・スレッドの実行を保留することと、
前記コピーの完了に応答して、前記ソース・コピーのソース・オブジェクト・ヘッダのコピーで前記ターゲット・オブジェクト・ヘッダを置き換えることと
を実行する、方法。
【請求項２】
前記プロセッサが、
前記ソース・コピーの前記識別に応答してアクセス・スレッドによって、サバイバー空間内に前記データ・オブジェクトのための空間を割り当てることと、
前記指標を有する前記ターゲット・オブジェクト・ヘッダを、割り当てられた前記空間に格納することと、
アトミック操作で、転送ビットと、前記転送ビットの設定に応答して前記ターゲット位置としての前記割り当てられた空間の位置とを、前記ソース・オブジェクト・ヘッダに格納することと、
前記アトミック操作での格納が成功した結果として、前記１次アクセス・スレッドとして前記アクセス・スレッドを指定することと、
前記転送ビットが前記ソース・オブジェクト・ヘッダに設定されていることを前記２次アクセス・スレッドが判定したことに応答して、前記ターゲット位置に前記２次アクセス・スレッドを転送することと
をさらに実行する、請求項１に記載の方法。
【請求項３】
前記指標が、前記ソース・オブジェクト・ヘッダ内の前記転送ビットの位置に対応する位置を有する前記ターゲット・オブジェクト・ヘッダ内のコピー・ビットであり、前記指標を設定することが、前記コピー・ビットを設定することをさらに含む、請求項２に記載の方法。
【請求項４】
前記プロセッサが、前記１次アクセス・スレッドと前記実行が保留されている前記２次アクセス・スレッドの両方を含む複数の関与スレッド間で前記コピーを同期することをさらに実行し、前記同期することが、
前記１次アクセス・スレッドによって、前記ターゲット・オブジェクト・ヘッダ内の未コピー・データ値を前記データ・オブジェクトのトータル・サイズに初期化することと、
前記複数の関与スレッドのいずれかの前記２次アクセス・スレッドがコピーし始めるのに応答して、前記ターゲット・オブジェクト・ヘッダ内のコピー・スレッド・データ値を増やすことと、
前記複数の関与スレッドのうちのいずれかが前記データ・オブジェクトのセクションの前記コピーをスタートさせるのに応答して、前記データ・オブジェクトの前記セクションのサイズだけ前記未コピー・データ値を減らすことと、
前記未コピー・データ値が０に達したという、いずれかの前記２次アクセス・スレッドによる判定に応答して、前記コピー・スレッド・データ値を減らすことと、
を含み、
前記ターゲット・オブジェクト・ヘッダの前記置き換えが、前記コピー・スレッド・データ値が初期値まで減らされたという判定に応答して、前記１次アクセス・スレッドによって行われる、
請求項１から請求項３のいずれか一項に記載の方法。
【請求項５】
前記ターゲット・オブジェクト・ヘッダの前記置き換えが、１回のメモリ更新で行われ、前記指標をリセットすること、およびクラス情報を復元することを含む、請求項１から請求項４のいずれか一項に記載の方法。
【請求項６】
前記１次アクセス・スレッドと前記２次アクセス・スレッドとのそれぞれが、ガベージ・コレクション・スレッドまたはアプリケーション・スレッドのうちの１つである、請求項１から請求項５のいずれか一項に記載の方法。
【請求項７】
前記識別することが、メモリ内のライブ・オブジェクトのスキャンを行うガベージ・コレクション・スレッド、または、通常の実行中に前記ライブ・オブジェクトに遭遇するアプリケーション・スレッド、のうちの少なくとも１つによって、前記ソース・コピーを参照するオブジェクト参照を前記メモリ内の前記ライブ・オブジェクトから読み取ることをさらに含む、請求項１から請求項５のいずれか一項に記載の方法。
【請求項８】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのシステムであって、
命令を含むメモリ媒体と、
前記メモリ媒体に連結されたバスと、
前記バスに連結されたプロセッサと、
を備え、
前記命令は、請求項１から請求項７のいずれか一項に記載の方法における各ステップをプロセッサに実行させる、システム。
【請求項９】
同時コピー・ガベージ・コレクション動作時のデータ・オブジェクトのコピーを最適化するためのコンピュータ・プログラムであって、プロセッサに、請求項１から請求項７のいずれか一項に記載の方法における各ステップを実行させる、コンピュータ・プログラム。
【請求項１０】
請求項１から請求項７のいずれか一項に記載の方法における各ステップをプロセッサに実行させるためのコンピュータ・プログラムを格納した、コンピュータ可読ストレージ媒体。
【国際調査報告】
2021509509.tif 000012
2021509509.tif 000013