(57)【要約】  オブジェクトに到達するためにたどる参照の数を削減することで計算機の性能向上を図る。オブジェクト管理装置は、オブジェクトを記憶可能なメモリと、プロセッサとを有する。プロセッサは、前段のオブジェクトと、前段のオブジェクトから参照可能な１以上の後段のオブジェクトとをメモリに記憶させ、前段のオブジェクトへの参照情報を含み、前段のオブジェクトを参照可能にする参照機能を提供する前段のプロキシオブジェクトと、後段のオブジェクトへの参照情報を含み、後段のオブジェクトに対する参照機能を提供する後段のプロキシオブジェクトとを生成してメモリに記憶させ、前段のプロキシオブジェクトに、前記後段のプロキシオブジェクトへの参照情報を格納させる。
2013046360.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクトを記憶可能なメモリと、
前記メモリに接続されたプロセッサと
を有し、
前記プロセッサは、
前段のオブジェクトと、前記前段のオブジェクトから参照可能な１以上の後段のオブジェクトとを前記メモリに記憶させ、
前記前段のオブジェクトへの参照情報を含み、前記前段のオブジェクトを参照可能にする参照機能を提供する前段のプロキシオブジェクトと、前記後段のオブジェクトへの参照情報を含み、前記後段のオブジェクトに対する参照機能を提供する後段のプロキシオブジェクトとを生成して前記メモリに記憶させ、
前記前段のプロキシオブジェクトに、前記後段のプロキシオブジェクトへの参照情報を格納させる
オブジェクト管理装置。
【請求項２】
前記前段のオブジェクトは、参照可能な前記後段のオブジェクトへの参照情報を格納しており、
前記プロセッサは、前記前段のオブジェクトから前記後段のオブジェクトへの参照情報を取得して、前記後段のオブジェクトを特定し、特定した前記後段のオブジェクトを参照可能にする参照機能を提供する前記後段のプロキシオブジェクトを特定し、特定した前記後段のプロキシオブジェクトへの参照情報を前記前段のプロキシオブジェクトに格納させる
請求項１に記載のオブジェクト管理装置。
【請求項３】
前記プロセッサは、前記前段のオブジェクトを取得する要求が発生した場合に、前記前段のオブジェクトから前記後段のオブジェクトへの参照情報を取得して、前記後段のオブジェクトを特定し、特定した前記後段のオブジェクトを参照可能にする参照機能を提供する前記後段のプロキシオブジェクトを特定し、特定した前記後段のプロキシオブジェクトへの参照情報を前記前段のプロキシオブジェクトに格納させる
請求項２に記載のオブジェクト管理装置。
【請求項４】
前記プロセッサは、前記前段のオブジェクトを参照する指示が発生した場合に、前記前段のオブジェクトの識別情報に基づいて、前記前段のオブジェクトを参照可能にする機能を提供する前記前段のプロキシオブジェクトを特定し、前記前段のプロキシオブジェクトを取得する
請求項１に記載のオブジェクト管理装置。
【請求項５】
前記プロセッサは、
或るオブジェクトを起点として所定の目標オブジェクトを操作する指示が発生した場合に、起点となる前記或るオブジェクトから前記目標オブジェクトへのオブジェクトの参照経路に基づいて、起点となる前記或るオブジェクトを参照可能にする参照機能を提供するプロキシオブジェクトから前記目標オブジェクトを参照可能にする参照機能を提供する目標プロキシオブジェクトへのプロキシオブジェクトの参照経路を特定し、前記プロキシオブジェクトの参照経路に基づいて、前記目標プロキシオブジェクトを用いて、前記目標オブジェクトへの操作を実行する
請求項４に記載のオブジェクト管理装置。
【請求項６】
前記プロキシオブジェクトは、前記プロセッサに、前記プロキシオブジェクトが提供する参照機能により参照可能なオブジェクトのデータが更新される際に、前記オブジェクトを前記メモリに複製させ、複製された前記オブジェクトに対してデータの更新をさせ、
前記プロセッサは、複製前の前記オブジェクトを参照可能な前段のオブジェクトの参照情報を、複製後の前記オブジェクトの参照情報に変更する
請求項５に記載のオブジェクト管理装置。
【請求項７】
前記プロセッサは、
或るオブジェクトと、前記或るオブジェクトを起点として参照可能な１以上のオブジェクトとを含むオブジェクト群におけるオブジェクト間の参照構造を取得し、
前記オブジェクト群の各オブジェクトの参照機能を提供するプロキシオブジェクト群であって、各プロキシオブジェクト間の参照構造が前記オブジェクト間の参照構造に対応する参照構造である代表プロキシオブジェクト群を前記メモリに生成する
請求項１に記載のオブジェクト管理装置。
【請求項８】
前記プロセッサは、
前記オブジェクト群の各オブジェクトの参照機能を提供するプロキシオブジェクト群であって、各プロキシオブジェクト間の参照構造が前記オブジェクト間の参照構造に対応する参照構造である代表プロキシオブジェクト群が前記メモリに存在するか否かを判定し、
前記代表プロキシオブジェクト群が前記メモリに存在しない場合に、前記代表プロキシオブジェクト群を前記メモリに生成する
請求項７に記載のオブジェクト管理装置。
【請求項９】
前記プロセッサは、
或るオブジェクトを取得する要求が発生した場合に、前記或るオブジェクトの参照機能を提供するプロキシオブジェクトと、そのプロキシオブジェクトから参照可能なプロキシオブジェクトとを含む代表プロキシオブジェクト群を特定して、前記メモリに複製し、
複製した前記代表プロキシオブジェクト群の各プロキシオブジェクトに対して、前記或るオブジェクトから参照可能なオブジェクトであって、前記プロキシオブジェクトによる参照機能により参照可能なオブジェクトへの参照情報を設定する
請求項８に記載のオブジェクト管理装置。
【請求項１０】
前記プロセッサは、
或るオブジェクトを取得する要求が発生した場合に、前記或るオブジェクトの参照機能を提供するプロキシオブジェクトと、そのプロキシオブジェクトから参照可能なプロキシオブジェクトとを含む代表プロキシオブジェクト群を特定して、特定した前記代表プロキシオブジェクト群の各プロキシオブジェクトに対して、前記或るオブジェクトから参照可能なオブジェクトであって、前記プロキシオブジェクトによる参照機能により参照可能なオブジェクトへの参照情報を設定し、
その後、前記メモリにおける特定した前記代表プロキシオブジェクト群の数が所定の閾値以上となるように、前記代表プロキシオブジェク群を複製する
請求項７に記載のオブジェクト管理装置。
【請求項１１】
前記プロセッサは、
或るオブジェクトを取得する要求が発生した場合に、前記オブジェクト及び前記オブジェクトから参照可能なオブジェクトを含むオブジェクト群の各オブジェクトを参照可能にする機能を提供するプロキシオブジェクト群を取得し、
前記オブジェクト群の中の或るオブジェクトを操作する指示が発生した場合に、前記操作対象のオブジェクトを参照可能にする機能を提供するプロキシオブジェクトを特定し、前記プロキシオブジェクトに対して、前記操作対象のオブジェクトへの参照情報を設定し、前記参照情報を用いて、前記操作対象のオブジェクトへの操作を実行する
請求項１に記載のオブジェクト管理装置。
【請求項１２】
前記プロセッサは、
或るオブジェクトを操作する要求が発生した場合に、既に取得しているプロキシオブジェクトから、前記或るオブジェクトを参照可能にする機能を提供するプロキシオブジェクトへのプロキシオブジェクトの参照経路を特定し、
前記参照経路に基づいて、必要なプロキシオブジェクトを生成するとともに、前記或るオブジェクトを参照可能にする機能を提供する前記プロキシオブジェクトに対して、前記或るオブジェクトへの参照情報を設定し、前記参照情報を用いて、前記或るオブジェクトへの操作を実行する
請求項１に記載のオブジェクト管理装置。
【請求項１３】
前記メモリの前記オブジェクトには、複数のオブジェクトを要素とするコレクションオブジェクトが含まれ、
前記プロセッサは、
前記コレクションオブジェクトを参照可能にする機能を提供するプロキシオブジェクトを生成するとともに、前記プロキシオブジェクトに前記コレクションオブジェクトの参照情報と、前記コレクションオブジェクトの要素の複数のオブジェクトの参照情報とを格納し、
前記コレクションオブジェクトの要素のオブジェクトを操作する要求が発生した場合に、前記コレクションオブジェクトの要素のオブジェクトを参照可能にする機能を提供するプロキシオブジェクトを生成させるとともに、前記プロキシオブジェクトに前記操作対象の前記オブジェクトの参照情報を格納し、前記プロキシオブジェクトの前記参照情報を用いて、前記操作対象の前記オブジェクトへの操作を実行し、
また、前記コレクションオブジェクトの要素のオブジェクトを変更する要求が発生した場合に、前記コレクションオブジェクトを参照可能にする機能を提供するプロキシオブジェクトが保持する前記コレクションオブジェクトの要素の複数のオブジェクトの参照情報を変更する
請求項１に記載のオブジェクト管理装置。
【請求項１４】
オブジェクトを記憶可能なメモリと、プロセッサとを有するオブジェクト管理装置によるオブジェクト管理方法であって、
前記プロセッサが、
前段のオブジェクトと、前記前段のオブジェクトから参照可能な１以上の後段のオブジェクトとを前記メモリに記憶させ、
前記前段のオブジェクトへの参照情報を含み、前記前段のオブジェクトを参照可能にする参照機能を提供する前段のプロキシオブジェクトと、前記後段のオブジェクトへの参照情報を含み、前記後段のオブジェクトに対する参照機能を提供する後段のプロキシオブジェクトとを生成して前記メモリに記憶させ、
前記前段のプロキシオブジェクトに、前記後段のプロキシオブジェクトへの参照情報を格納させる
オブジェクト管理方法。
【請求項１５】
オブジェクトへの間接参照を実現するプロキシオブジェクトのデータ構造であって、
前段オブジェクトへの参照を持つ領域と、
前記前段オブジェクトが参照する後段オブジェクトを参照する後段プロキシオブジェクトへの参照を持つ領域と
を有するデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
間接的なデータアクセスを実現するオブジェクトを管理するオブジェクト管理装置、およびオブジェクト管理方法に関する。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）などのオブジェクト指向言語において作成したプログラムで扱うデータを永続化するためには、オブジェクトとして生成したデータを、データベース（ＤＢ）で保持できる形式に変換した後に、データベースに書き込む。一方、プログラムからデータベースに保持されたデータへアクセスする場合は、データベースから読み込んだデータをオブジェクトに変換する処理が必要になる。このデータベースからのｒｅａｄ処理とデータ変換処理とは、プログラムがデータベースに保持されるデータをオブジェクトとして扱うために必要な処理であり、これらの処理速度が遅ければプログラムの実行速度が低下する。【０００３】
データベースからのデータのｒｅａｄ性能を向上させるため、データベースで保持するデータを、プログラムが、データベースの格納されている外部記憶装置等より高速にアクセスできるメモリにキャッシュとして保持するキャッシュ技術が存在する。また、データ変換処理による性能低下を防ぐために、プログラムが扱うデータ形式と、キャッシュとして保持するデータ形式とを一致させて保持するオブジェクトキャッシュ技術も存在する。オブジェクトキャッシュ技術を利用することで、データ変換処理を省くことができる。なお、オブジェクトキャッシュとデータベースに保持するデータとのデータ形式を一致させるため、データを書き換える場合には、オブジェクトキャッシュとデータベースに保持するデータとの両方を書き換える必要がある。【０００４】
マルチスレッドプログラムにおいては、データの一貫性を保証するためにキャッシュされた１オブジェクトの内部情報に対して複数のスレッドがアクセスすることを考慮する必要がある。例えば、スレッドＡはオブジェクトの内部情報が保持する数値Ｃをｗｒｉｔｅし（書き換え）、スレッドＢは数値Ｃをｒｅａｄ（読み出し)した結果、数値Ｃが０以外であれば、数値Ｃを１減らすためｗｒｉｔｅする場合を考える。【０００５】
この場合、数値Ｃが１であれば、スレッドＢがｒｅａｄにより数値Ｃを１と取得し、ｗｒｉｔｅを実行し、数値Ｃを０とする。しかし、スレッドＢによるｒｅａｄとｗｒｉｔｅとの間に、スレッドＡが数値Ｃを０とするｗｒｉｔｅを実行してしまうと、スレッドＢは数値Ｃが０であるにもかかわらず、ｗｒｉｔｅを実行し、数値Ｃを−１にしてしまい、数値Ｃが期待される０とは異なる結果となってしまう。このようにマルチスレッドプログラムでは、オブジェクトの内部情報に対して直接ｗｒｉｔｅするとオブジェクトの内部情報であるデータの一貫性が保てない。【０００６】
一貫性を保つためには、例えば各スレッドからキャッシュされたオブジェクトの内部情報をｒｅａｄ／ｗｒｉｔｅする前に一度、各スレッドのみがアクセスできるローカル領域にオブジェクトをコピーする方式がある。この方式では、コピー先である各スレッドのローカル環境でオブジェクトの内部情報をｒｅａｄ／ｗｒｉｔｅする。そして、ローカル環境でのｗｒｉｔｅ処理を実施した後にｗｒｉｔｅ内容が確定すれば、コピー元のキャッシュされたオブジェクトが他から変更されないようにロックし、ロックしたオブジェクトを、ｗｒｉｔｅにより変更したオブジェクトへ変更する。このようにオブジェクトの内部情報をｒｅａｄ／ｗｒｉｔｅする前に一度、各スレッドのローカル領域にオブジェクトをコピーすることで、各スレッドはコピー実施時点のオブジェクトに対して常に処理を実行でき、一貫性を保つことができる。【０００７】
一方、ｒｅａｄの場合はオブジェクトの内部情報に変更が発生しないためコピーしなくともデータの一貫性を保つことができる。これを実現するため、オブジェクトの内部情報にプロキシオブジェクトを介してｒｅａｄ／ｗｒｉｔｅするようにし、ｗｒｉｔｅが発生した場合のみオブジェクトのコピーを実施するＣｏｐｙ  ｏｎ  Ｗｒｉｔｅ方式がある。このＣｏｐｙ  ｏｎ  Ｗｒｉｔｅ方式により、ｒｅａｄ時にオブジェクトのコピー処理を待つ必要がないためｒｅａｄを実行する速度が上昇する。【０００８】
ここで、プロキシオブジェクトとは、ｒｅａｄ／ｗｒｉｔｅ対象とするオブジェクトへの参照と、そのオブジェクトの内部情報（データ）をｒｅａｄ／ｗｒｉｔｅするためのインターフェースと、ｗｒｉｔｅを検知して参照先のオブジェクトをスレッドのローカル領域にコピーする機能とを持つオブジェクトである。【０００９】
このプロキシオブジェクトを各スレッドがそのローカル領域に保持して、キャッシュにて複数のスレッドからアクセスされるオブジェクトに、プロキシオブジェクトを介してアクセス（間接参照）し、Ｃｏｐｙ  ｏｎ  Ｗｒｉｔｅを実現する。【００１０】
永続対象のオブジェクトが参照関係により複数連結し、多段の参照関係を保持する場合のプロキシオブジェクト生成の技術が、例えば、特許文献１に記載されている。特許文献１に記載された技術では、オブジェクトＡ、オブジェクトＢがオブジェクトＡからオブジェクトＢへの参照Ｃで連結される場合に、プロキシオブジェクトＰＡ、プロキシオブジェクトＰＢを生成し、それぞれオブジェクトＡ、オブジェクトＢへの間接参照を実現する。そして、参照ＣをオブジェクトＡからプロキシオブジェクトＰＢへの参照に変更する。これらプロキシオブジェクト生成とオブジェクト間の参照変更操作を実施することで、多段の参照関係を持つオブジェクト群のうちどのオブジェクトへの書き換え操作が発生しても、対応するプロキシオブジェクトで書き換えを検知し、Ｃｏｐｙ  ｏｎ  Ｗｒｉｔｅを実現する。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００９−１５７８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
特許文献１に記載された技術では、多段の参照関係を保持するオブジェクト群に対して、プロキシオブジェクトとオブジェクトの参照を交互にたどることで任意のオブジェクトにアクセスする必要がある。そのため、任意のオブジェクトにアクセスする場合には、プロキシオブジェクトがない場合に比べて参照をたどる回数が２倍になり、アクセス速度が低下する。【００１３】
プロキシオブジェクトは、プロキシオブジェクトが参照するオブジェクトへの参照情報を保持している。そのため、プロキシオブジェクトを利用したデータ処理を実現するためにプロキシオブジェクトをメモリ上に保持すると、通常オブジェクトに加えてプロキシオブジェクトがメモリを消費することとなる。特許文献１に記載された技術では、１つのオブジェクトに対して１つのプロキシオブジェクトを生成している。そのため、オブジェクト数に比例してプロキシオブジェクトによるメモリ消費が発生し、メモリにキャッシュできるオブジェクト数が低下する。【００１４】
そこで、プロキシオブジェクトを用い、多段の参照関係を保持するオブジェクト群における任意のオブジェクトに到達するためにたどる参照の数を削減することで計算機の性能向上を図ることのできる技術を提供する。
【課題を解決するための手段】
【００１５】
本発明の一観点に係るオブジェクト管理装置は、オブジェクトを記憶可能なメモリと、プロセッサとを有する。プロセッサは、前段のオブジェクトと、前段のオブジェクトから参照可能な１以上の後段のオブジェクトとをメモリに記憶させ、前段のオブジェクトへの参照情報を含み、前段のオブジェクトを参照可能にする参照機能を提供する前段のプロキシオブジェクトと、後段のオブジェクトへの参照情報を含み、後段のオブジェクトに対する参照機能を提供する後段のプロキシオブジェクトとを生成してメモリに記憶させ、前段のプロキシオブジェクトに、前記後段のプロキシオブジェクトへの参照情報を格納させる。
【発明の効果】
【００１６】
本発明によれば、参照関係を持つオブジェクト群の任意のオブジェクトへプロキシオブジェクトを介してアクセスする際にたどる参照の数を低減できる。上記した以外の課題、構成および効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１７】
【図１】図１は、実施例１に係る計算機の構成図の一例である。
【図２】図２は、実施例１に係るオブジェクト管理表の一例である。
【図３】図３は、実施例１に係るプロキシオブジェクトのデータ構造の一例を示す図である。
【図４】図４は、実施例１に係るオブジェクト登録処理のフローチャートである。
【図５】図５は、実施例１に係るオブジェクトインデックス表の一例である。
【図６】図６は、実施例１に係るプロキシオブジェクト生成・設定処理のフローチャートである。
【図７】図７は、実施例１に係るオブジェクト取得処理のフローチャートである。
【図８】図８は、実施例１に係るオブジェクトのデータ操作処理のフローチャートである。
【図９】図９は、実施例１に係るオブジェクトの再登録処理のフローチャートである。
【図１０】図１０は、実施例２に係る計算機の構成図の一例である。
【図１１】図１１は、実施例２に係るオブジェクト登録処理のフローチャートである。
【図１２】図１２は、実施例２に係る代表プロキシオブジェクト提供処理のフローチャートである。
【図１３】図１３は、実施例４に係る遅延プロキシオブジェクト参照設定処理前のオブジェクト状態を説明する図である。
【図１４】図１４は、実施例４に係るオブジェクト取得処理のフローチャートである。
【図１５】図１５は、実施例４に係るオブジェクト操作処理のフローチャートである。
【図１６】図１６は、実施例４に係る遅延プロキシオブジェクト参照設定処理後のオブジェクト状態を説明する図である。
【図１７】図１７は、実施例４に係る遅延プロキシオブジェクト生成処理前のオブジェクト状態を説明する図である。
【図１８】図１８は、実施例５に係る遅延プロキシオブジェクト生成処理のフローチャートである。
【図１９】図１９は、実施例５に係る遅延プロキシオブジェクト生成処理後のオブジェクト状態を説明する図である。
【図２０】図２０は、実施例６に係るコレクションへの間接参照を代表するプロキシオブジェクトを説明する図である。
【図２１】図２１は、実施例６に係るコレクション要素への間接参照処理のフローチャートである。
【図２２】図２２は、実施例２に係るオブジェクトへの間接参照を実現するプロキシオブジェクトのデータ構成の一例を説明する図である。
【図２３】図２３は、実施例２に係る代表プロキシオブジェクトを複製して利用する例を説明する図である。
【図２４】図２４は、実施例１に係るプロキシオブジェクトを生成するプログラムコードの一例を説明する図である。
【図２５】図２５は、実施例１に係るプロキシオブジェクトからオブジェクトへの参照を生成するプログラムコードの一例を説明する図である。
【図２６】図２６は、実施例１に係るプログラムコード管理表の一例である。
【図２７】図２７は、実施例１に係るプロキシオブジェクトプログラムコード生成処理のフローチャートである。
【発明を実施するための形態】
【００１８】
以下、複数の実施例について、図面を参照して説明する。なお、以下に説明する実施例は特許請求の範囲にかかる発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１９】
なお、以下の説明では、「ｘｘｘ表」の表現にて各種情報を説明することがあるが、各種情報は、表以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ｘｘｘ表」を「ｘｘｘ情報」と呼ぶことができる。
【００２０】
以下の説明では、プログラムに対応する「ｘｘ部」、「ｘｘオブジェクト」を主語として処理を説明する場合があるが、ｘｘ部、ｘｘオブジェクトは、計算機に含まれるプロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信装置等を用いながら行うため、処理の主語がプロセッサとされてもよい。ｘｘ部、ｘｘオブジェクトを主語として説明された処理は、プロセッサが行う処理としても良い。また、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【実施例１】
【００２１】
実施例１では、参照関係を持つオブジェクト群のうち、任意のオブジェクトへプロキシオブジェクトを介して間接参照する際にたどる参照の数を低減することのできるプロキシオブジェクトのデータ構造と、オブジェクト管理装置の例を説明する。【００２２】
図１は、実施例１に係る計算機の構成図である。【００２３】
オブジェクト管理装置の一例である計算機１０１は、メモリ１１１と、ＣＰＵ１１２と、通信装置１１３と、ハードディスクなどの記憶装置１１４とを備える。計算機１０１は、一般的なコンピュータを用いて実現することができる。計算機１０１には、入力装置１１５と、表示装置１１６とが接続可能となっている。入力装置１１５は、キーボードやマウスなどの計算機１０１に指示を入力するための装置であり、プログラム起動などの指示の入力を受け付ける。表示装置１１６は、ディスプレイなどであり、計算機１０１による処理の実行状況や実行結果などを表示する。【００２４】
通信装置１１３は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などを介して、他の装置と各種データやコマンドを交換する。記憶装置１１４は、計算機１０１が処理を実行するための各種プログラム１２１やデータ１２２を保存する。メモリ１１１は、計算機１０１が処理を実行する各種プログラム１２１および一時的なデータ１２２を保持する。ＣＰＵ１１２は、メモリ１１１に格納される各種プログラムを実行する。具体的には、ＣＰＵ１１２は、記憶装置１１４に格納されたプログラム１２１とデータ１２２とをメモリ１１１に読み出して実行する。【００２５】
プログラム１２１は、ユーザプログラム実行部１３１、オブジェクト管理部１３２、オブジェクト保持部１３３、オブジェクト構造解析部１３４、プロキシオブジェクト生成部１３５、プロキシオブジェクト保持部１３６、プロキシオブジェクト参照設定部１３７を含む。【００２６】
ユーザプログラム実行部１３１は、プロキシオブジェクトを生成するプログラムコード、プロキシオブジェクトからオブジェクトへの参照を生成するプログラムコードを含む。【００２７】
図２４は、実施例１に係るプロキシオブジェクトを生成するプログラムコードの一例を説明する図である。図２５は、実施例１に係るプロキシオブジェクトからオブジェクトへの参照を生成するプログラムコードの一例を説明する図である。【００２８】
ユーザプログラム実行部１３１は、プロキシオブジェクトを定義するプログラムコード（プロキシオブジェクトプログラムコード）２５０１、オブジェクトを定義するプログラムコード（オブジェクトプログラムコード）２５０２等のプログラムコードを含む。【００２９】
図２４に示すプログラムコードの場合には、ユーザプログラム実行部１３１は、オブジェクトプログラムコード２５０２の定義に基づいて、ｄａｔａ＿１（データ１）にデータ（ここでは、例えば、１００）を与えることでオブジェクト２５０４を生成し、メモリ１１１に保持させる。この時、ユーザプログラム実行部１３１は、オブジェクト２５０４に、その定義であるオブジェクトプログラムコード２５０２を一意に識別する情報（オブジェクトプログラムコードのＩＤやアドレス）も保持させる。この情報によると、オブジェクト２５０４から生成に使用したオブジェクトプログラムコード２５０２を特定することができる。【００３０】
プロキシオブジェクト生成部１３５は、プロキシオブジェクトプログラムコード２５０１の定義に基づいて、プロキシオブジェクト２５０３を生成し、メモリ１１１に保持させる。この時、プロキシオブジェクト生成部１３５は、プロキシオブジェクト２５０３に、その定義であるプロキシオブジェクトプログラムコード２５０１を一意に識別する情報（プロキシオブジェクトプログラムコードのＩＤやアドレス）も保持させる。この情報によると、プロキシオブジェクト２５０３から生成に利用したプロキシオブジェクトプログラムコード２５０２を特定することができる。【００３１】
プロキシオブジェクト参照設定部１３７は、図２５の点線で囲まれたｓｅｔ記述部２５０５を呼び出し、オブジェクト２５０４へのアドレス（参照情報）をプロキシオブジェクト２５０３に入力する。この入力操作により、図２５の矢印２５０６で示されるように、プロキシオブジェクト２５０３からオブジェクト２５０４をたどることができる参照が設定される。【００３２】
オブジェクト２５０４を参照するプロキシオブジェクト２５０３を定義するプロキシオブジェクトプログラムコード２５０１には、オブジェクト２５０４のアドレスを保持する必要がある。プロキシオブジェクトプログラムコード２５０１は、オブジェクトプログラムコード２５０２を作成したプログラム作成者が作成して、ユーザプログラム実行部１３１に含ませてもよい。また、ＣＰＵ１１２が記憶装置１１４のプログラム１２１をメモリ１１１に読み込んだ際に、プロキシオブジェクト生成部１３５が、オブジェクトプログラムコード２５０２に基づいて、プロキシオブジェクトプログラムコード２５０１を生成してもよい。【００３３】
図２７は、実施例１に係るプロキシオブジェクトプログラムコード生成処理のフローチャートである。【００３４】
このプロキシオブジェクトプログラムコード生成処理は、例えば、ユーザプログラム実行部１３１でオブジェクトに対する処理が実行される前に、実行される。例えば、Ｊａｖａの場合には、オブジェクトを生成する場合には、そのテンプレートとなるクラスを読み込み、クラスからそのインスタンスとなるオブジェクトを生成するが、プロキシオブジェクトプログラムコード生成処理は、クラスを読み込んでから、オブジェクトを生成する前に実行される。【００３５】
まず、プロキシオブジェクト生成部１３５が、オブジェクトを定義するオブジェクトプログラムコード２５０２を読み込む（ステップ２８０１）。次に、プロキシオブジェクト生成部１３５が、オブジェクトプログラムコード２５０２に記述されるｄａｔａ＿１を操作するデータＩ／Ｆであるｒｅａｄとｗｒｉｔｅを呼び出すデータＩ／Ｆと、オブジェクトプログラムコード２５０２を実体化したオブジェクトのアドレス（参照情報）とを有するデータ構造を含むプロキシオブジェクトプログラムコード２５０１を生成する（ステップ２８０２）。そして、プロキシオブジェクト生成部１３５が、生成したプロキシオブジェクトプログラムコードに任意のプロキシオブジェクトＩＤを付与する（ステップ２８０３）。次に、プロキシオブジェクトＩＤ、プロキシオブジェクトプログラムコード名、オブジェクトプログラムコード名をメモリ１１１のプログラムコード管理表２６００（図２６参照）の同一行に書き込む（ステップ２８０４）。【００３６】
なお、プロキシオブジェクトによる間接参照を用いて、Ｃｏｐｙ  ｏｎ
Ｗｒｉｔｅを実現する場合には、ステップ２８０２において、参照先オブジェクトのコピー処理を追記する。具体的には、例えば、ｃｏｐｙＯｆで示される参照先オブジェクトのコピー処理をプロキシオブジェクトプログラムコード２５０１のｗｒｉｔｅ処理の先頭に追記する。このコピー処理により、ｗｒｉｔｅ時にオブジェクトのコピーを実施するＣｏｐｙ  ｏｎ  ｗｒｉｔｅを実現することができる。【００３７】
上記プロキシオブジェクトプログラムコード生成処理により、オブジェクトコード名とプロキシオブジェクトプログラムコード名とをプロキシオブジェクトＩＤにより結びつけたプログラムコード管理表２６００を生成することができる。【００３８】
図２６は、実施例１に係るプログラムコード管理表の一例である。【００３９】
プログラムコード管理表２６００は、プロキシオブジェクトＩＤ２６０１と、プロキシオブジェクトプログラムコード２６０２と、オブジェクトプログラムコード２６０３と対応付けて格納する。プロキシオブジェクトＩＤ２６０１は、プロキシオブジェクトを一意に識別するための識別情報である。プロキシオブジェクトプログラムコード２６０２は、対応するプロキシオブジェクトを作成するためのプロキシオブジェクトプログラムコードの名称である。オブジェクトプログラムコード２６０３は、対応するプロキシオブジェクトにより参照されるオブジェクトを作成するためのオブジェクトプログラムコードの名称である。【００４０】
図１の説明に戻り、ユーザプログラム実行部１３１は、計算機１０１を利用するユーザが作成したユーザプログラムである。ユーザプログラム実行部１３１において、特定オブジェクトの永続化が命令された場合には、オブジェクト管理部１３２は、オブジェクト保持部１３３に特定オブジェクトと、特定オブジェクトから直接的または間接的に参照できるオブジェクトの全てをオブジェクト群として登録する。【００４１】
オブジェクト構造解析部１３４は、オブジェクト保持部１３３に登録されたオブジェクト群と、それらオブジェクト群のそれぞれのオブジェクトの参照先を解析することで、オブジェクト管理表２００（図２参照）を生成する。例えば、オブジェクト構造解析部１３４は、オブジェクトに対応付けられているオブジェクトプログラムコードを特定し、プログラムコード管理表２６００からオブジェクトプログラムコードに対応するプロキシオブジェクトＩＤを特定し、オブジェクト管理表２００に登録する。【００４２】
図２は、実施例１に係るオブジェクト管理表の一例である。【００４３】
オブジェクト管理表２００は、オブジェクトＩＤ２０１と、参照先ＩＤ２０２と、プロキシオブジェクトＩＤ２０３とを対応付けて記憶する。オブジェクトＩＤ２０１は、登録されたオブジェクトを一意に識別するＩＤである。参照先ＩＤ２０２は、対応するオブジェクトの参照先となるオブジェクト（後段のオブジェクト）を一意に識別するオブジェクトＩＤである。なお、対応するオブジェクトに参照先が存在しなければ、参照先ＩＤは格納されない。プロキシオブジェクトＩＤ２０３は、対応するオブジェクトに対する間接参照を実現するためのプロキシオブジェクトプログラムコードを一意に識別するＩＤである。プロキシオブジェクトＩＤ２０３は、プログラムコード管理表２６００に登録されたものと対応する。【００４４】
プロキシオブジェクト生成部１３５は、オブジェクト管理表２００を用いて、オブジェクト保持部１３６に登録されたオブジェクトへの間接参照と、他のプロキシオブジェクトへの直接参照を実現するデータ構造を保持するプロキシオブジェクトの集合（プロキシオブジェクト群）を生成し、プロキシオブジェクト保持部１３６に登録する。【００４５】
図３は、実施例１に係るプロキシオブジェクトのデータ構造の一例を示す図である。【００４６】
ここで、オブジェクトＯＢＪは、図３に示すように、オブジェクトを一意に識別するＩＤ３０１と、オブジェクトで管理されるデータ３０２、３０３、・・・（データ１、データ２、・・・）と、オブジェクトが参照する他のオブジェクト（後段のオブジェクト）を示す参照情報を格納する参照先３０４（参照先１）とを含むデータ構造となっている。なお、オブジェクトＯＢＪが複数のオブジェクトＯＢＪを参照する場合には、参照先３０４が複数設けられる。【００４７】
プロキシオブジェクトＰＯＢは、プロキシオブジェクトを一意に識別するＩＤ３１１、プロキシオブジェクトによる間接参照先となるオブジェクトＯＢＪへの参照情報を保持する参照３１２（Ｏ参照）、プロキシオブジェクトによる間接参照先となるオブジェクトＯＢＪが保持するデータへのアクセスインターフェースを定義するデータＩ／Ｆ３１３、間接参照先となるオブジェクトＯＢＪが参照している他のオブジェクトを間接参照先としている他のプロキシオブジェクト（後段のプロキシオブジェクト）への参照情報を保持する参照３１４（Ｐ参照）を含むデータ構造となっている。なお、プロキシオブジェクト生成部１３５がオブジェクト管理表２００を参照してプロキシオブジェクト群を生成した後は、オブジェクト管理表２００をメモリ１１１から破棄してもよいし、そのまま保持していてもよい。【００４８】
プロキシオブジェクト参照設定部１３７は、オブジェクト保持部１３３に登録されたオブジェクト群に対して、以下に示す参照情報設定処理を実行する。すなわち、プロキシオブジェクト参照設定部１３７は、オブジェクト保持部１３３に登録した多段の参照関係を保持するオブジェクト群に対して、参照元となるオブジェクト（前段のオブジェクト）への間接参照を実現するプロキシオブジェクト（前段のプロキシオブジェクト）と、前段のオブジェクトの参照先となるオブジェクト（後段のオブジェクト）への間接参照を実現するプロキシオブジェクト（後段のプロキシオブジェクト）を識別し、前段のプロキシオブジェクトのＯ参照３１２に前段のオブジェクトへの参照情報を設定し、後段のプロキシオブジェクトのＯ参照３１２に後段のオブジェクトへの参照情報を設定する。また、プロキシオブジェクト参照設定部１３７は、前段のプロキシオブジェクトのＰ参照３１４に後段のプロキシオブジェクトへの参照情報を設定する。【００４９】
このような参照情報設定処理により、プロキシオブジェクト参照設定部１３７は、図３に示すようなプロキシオブジェクト群のそれぞれのプロキシオブジェクトＰＯＢからオブジェクト群の対応するオブジェクトＯＢＪへの一方向の参照関係を生成する。ここで、矢印の起点が参照元を示し、矢印の終点が参照先を示している。【００５０】
ユーザプログラム実行部１３１は、オブジェクト保持部１３３に対してオブジェクト管理部１３２を介して、オブジェクトの登録と取得を行う。また、ユーザプログラム実行部１３１は、オブジェクト管理部１３２からプロキシオブジェクトを伴って取得したオブジェクトが保持するデータに対するｒｅａｄ（読み出し）とｗｒｉｔｅ（書き込み）を実行する。また、ユーザプログラム実行部１３１は、ｗｒｉｔｅを実施したオブジェクトをオブジェクト管理部１３２を介して再登録する。【００５１】
ユーザプログラム実行部１３１での各処理に伴って実施する処理の詳細を以降で説明する。【００５２】
図４は、実施例１に係るオブジェクト登録処理のフローチャートである。【００５３】
オブジェクト管理部１３２は、ユーザプログラム実行部１３１からオブジェクトの登録要求が発生するまで待機する（ステップ４０１）。【００５４】
オブジェクトの登録としては、例えばユーザプログラム実行部１３１で登録対象のオブジェクトを識別するキーを生成し、そのキーで一意に識別するオブジェクトをバリューとするキー、バリュー型での登録であってもよいし、登録対象のオブジェクトへアクセスするキーやポインタをオブジェクト管理部１３２が生成してユーザプログラム実行部１３１に送付するようにしてもよい。また、オブジェクトの登録を受信した後に、オブジェクトの内部情報を用いてインデックスを作成して、検索可能となるように管理してもよい。ここでは、ユーザプログラム実行部１３１がオブジェクトを一意に識別するキーを伴った登録要求を発生させるキー、バリュー型を例にして説明する。【００５５】
登録要求が発生すれば（ステップ４０１でＹｅｓ）、オブジェクト管理部１３２は登録対象のオブジェクトから参照をたどることで到達できるオブジェクトの全てをオブジェクト群としてオブジェクト保持部１３３に複製または移動する（ステップ４０２）。なお、オブジェクト群のうち既にオブジェクト管理部１３２に登録済みのオブジェクトが存在する場合は、登録済みオブジェクトを無視して別のオブジェクトとして登録してもよいし、登録済みのオブジェクトを上書きしてもよい。【００５６】
ステップ４０２の後は、オブジェクト管理部１３２は、オブジェクト群のうち登録対象のオブジェクト（起点オブジェクト）を一意に識別するキー情報をユーザプログラム実行部１３１から受信し、キーと移動または複製した起点オブジェクトを示す起点オブジェクトＩＤをそれぞれオブジェクトインデックス表（図５参照）のキーと起点オブジェクトＩＤに登録する（ステップ４０３）。【００５７】
図５は、実施例１に係るオブジェクトインデックス表の一例である。【００５８】
オブジェクトインデックス表５００は、キー５０１と、起点オブジェクトＩＤ５０２と、起点プロキシオブジェクトＩＤ５０３とを対応付けて記憶する。キー５０１は、起点オブジェクトを一意に識別するキー情報である。起点オブジェクトＩＤ５０２は、対応する起点オブジェクトのＩＤである。起点プロキシオブジェクトＩＤ５０３は、起点オブジェクトを間接参照するためのプロキシオブジェクト（起点プロキシオブジェクト）のＩＤである。【００５９】
オブジェクト登録処理により、オブジェクト群の登録が完了した後に、プロキシオブジェクト生成・設定処理が実行される。【００６０】
プロキオブジェクト生成・設定処理では、オブジェクト構造解析部１３４がオブジェクト群の構造を解析する。次いで、解析結果を用いて、プロキシオブジェクト生成部１３５がオブジェクト群への間接参照を実現するプロキシオブジェクトを生成し、プロキシオブジェクト参照設定部１３７がプロキシオブジェクトとオブジェクト、プロキシオブジェクトとプロキシオブジェクトの間の参照を設定する。次に、このプロキシオブジェクト生成・設定処理を、フローチャートを用いて説明する。【００６１】
図６は、実施例１に係るプロキシオブジェクト生成・設定処理のフローチャートである。 【００６２】
まず、オブジェクト構造解析部１３４は、オブジェクト保持部１３３に登録されたオブジェクト群を解析することで、各オブジェクトのオブジェクトＩＤ、参照先ＩＤ、プロキシオブジェクトＩＤを取得し、オブジェクト管理表２００を生成し、プロキシオブジェクト生成部１３５に処理を引き継ぐ（ステップ６０１）。【００６３】
プロキシオブジェクト生成部１３５は、オブジェクト保持部１３３に登録されたオブジェクトの型情報から、その定義であるオブジェクトプログラムコードを特定する（ステップ６０１−１）。次に、プロキシオブジェクト生成部１３５は、特定したオブジェクトプログラムコードと同じプロキシオブジェクトＩＤで結びつけられるプロキシオブジェクトプログラムコードを取得する（ステップ６０１−２）。そして、プロキシオブジェクト生成部１３５は、取得したプロキシオブジェクトプログラムコードから、オブジェクト保持部１３３に登録された各オブジェクトへのデータアクセスＩＦ３１３（データＩ／Ｆ）と、Ｏ参照３１２と、Ｐ参照３１４とを実現するデータフィールドを持つプロキシオブジェクトＰＯＢを生成し、プロキシオブジェクト保持部１３６に登録する（ステップ６０２）。ステップ６０２では、プロキシオブジェクトＰＯＢのＯ参照３１２と、Ｐ参照３１４とに参照先を登録する処理を行わない。なお、Ｏ参照３１２とＰ参照３１４に、参照先を登録する処理は、以降に実行される。【００６４】
ステップ６０２でのプロキシオブジェクト生成が完了すると、プロキシオブジェクト生成部１３５は、オブジェクト群の起点オブジェクトへの間接参照を実現するプロキシオブジェクト（起点プロキシオブジェクト）のＩＤ（起点プロキシオブジェクトＩＤ）を、オブジェクトインデックス表５００の対応する行の起点プロキシオブジェクトＩＤとして登録し、プロキシオブジェクト参照設定部１３７に処理を引き継ぐ（ステップ６０３）。【００６５】
プロキシオブジェクト参照設定部１３７は、起点プロキシオブジェクトを、Ｏ参照とＰ参照とを設定する対象のプロキシオブジェクト（参照設定プロキシオブジェクト）として選択する（ステップ６０４）。続いてプロキシオブジェクト参照設定部１３７は、ステップ６０１で取得したプロキシオブジェクトＩＤとオブジェクトＩＤとから参照設定プロキシオブジェクトにより間接参照されるオブジェクトを特定し、参照設定プロキシオブジェクトのＯ参照３１２に特定したオブジェクトのＩＤを登録する（ステップ６０５）。【００６６】
その後、プロキシオブジェクト参照設定部１３７は、参照設定プロキシオブジェクトのＯ参照３１２のＩＤに対応するオブジェクトが参照する他のオブジェクトのＩＤ（参照先ＩＤ）があるか否かを、ステップ６０１で取得したオブジェクトＩＤ、参照先ＩＤを用いて確認する（ステップ６０６）。参照先ＩＤが存在しなければ（ステップ６０６でＮｏ）、ステップ６０８に進む。一方、参照先ＩＤが存在すれば（ステップＳ６０６でＹｅｓ）、プロキシオブジェクト参照設定部１３７は、参照先ＩＤのオブジェクトを間接参照するためのプロキシオブジェクトのＩＤをオブジェクト管理表２００から取得し、取得したプロキシオブジェクトＩＤで示されるプロキシオブジェクトを参照設定プロキシオブジェクトのＰ参照３１４に登録し、ステップ６０８に進む（ステップ６０７）。【００６７】
ステップ６０８では、ステップ６０２でプロキシオブジェクト生成部１３５が生成したプロキシオブジェクト群から参照設定プロキシオブジェクトとして未選択のプロキシオブジェクトが存在するか確認する。未選択のプロキシオブジェクトが存在すれば（ステップ６０８でＹｅｓ）、未選択のプロキシオブジェクトからＯ参照とＰ参照とを設定する参照設定プロキシオブジェクトを選択し、ステップ６０４からの処理を実行する。未選択のプロキシオブジェクトが存在しなければ（ステップ６０８でＮｏ）、処理を終了する。【００６８】
このプロキシオブジェクト生成・設定処理は、オブジェクトを登録する際に実行してもよいし、オブジェクトの取得要求を受信してから実行してもよい。また、プロキシオブジェクト生成・設定処理におけるプロキシオブジェクトを生成する処理（プロキシオブジェクト生成処理）と、プロキシオブジェクトに参照設定をする処理（プロキシオブジェクト設定処理）とを分割し、プロキシオブジェクト生成処理をオブジェクト登録時に実行し、プロキシオブジェクト設定処理をオブジェクト取得時に実行するようにしてもよい。さらに、プロキシオブジェクト設定処理をさらに分割し、プロキシオブジェクトにＰ参照を設定する処理をオブジェクト登録時に実行し、プロキシオブジェクトにＯ参照を設定する処理をオブジェクト取得時に行うようにしてもよい。【００６９】
次に、オブジェクト管理部１３２を介して過去に登録したオブジェクトを取得するオブジェクト取得処理をフローチャートに従って説明する。【００７０】
図７は、実施例１に係るオブジェクト取得処理のフローチャートである。【００７１】
オブジェクト管理部１３２は、ユーザプログラム実行部１３１からオブジェクトを一意に識別するキーを伴うオブジェクトの取得要求が発生するまで待機する（ステップ７０１）。オブジェクトの取得要求が発生すれば（ステップ７０１でＹｅｓ）、オブジェクト管理部１３２は、オブジェクト取得要求に付随するキーを用いて、オブジェクトインデックス表５００から該当するオブジェクトＩＤと起点プロキシオブジェクトＩＤを取得する（ステップ７０２）。そして、オブジェクト管理部１３２は、取得した起点プロキシオブジェクトＩＤが示すプロキシオブジェクトをユーザプログラム実行部１３１に送信する（ステップ７０３）。これにより、ユーザプログラム実行部１３１は、取得要求の対象のオブジェクトを読み出すプロキシオブジェクト又は、そのプロキシオブジェクトに到達することのできるプロキシオブジェクトを取得することとなる。【００７２】
なお、プロキシオブジェクトの送信時において、オブジェクト管理部１３２は、ユーザプログラム実行部１３１に対して、プロキシオブジェクトと、そのプロキシオブジェクトから参照されるプロキシオブジェクトを複製して送信してもよいし、プロキシオブジェクトを送信した後に、再び同じプロキシオブジェクトを生成してもよい。【００７３】
上記したように、ユーザプログラム実行部１３１がオブジェクト管理部１３２を介してプロキシオブジェクトを取得した後は、ユーザプログラム実行部１３１は取得したプロキシオブジェクトを介してオブジェクトが保持するデータに対するｒｅａｄとｗｒｉｔｅの操作を行うことができるようになる。【００７４】
次に、ユーザプログラム実行部１３１でプロキシオブジェクトを介して、オブジェクトのデータに対するｒｅａｄやｗｒｉｔｅの操作を行うオブジェクトのデータ操作処理をフローチャートに従って説明する。【００７５】
図８は、実施例１に係るオブジェクトのデータ操作処理のフローチャートである。【００７６】
ユーザプログラム実行部１３１は、起点プロキシオブジェクトに対してデータ操作対象のオブジェクトへの到達経路情報（参照経路情報）とそのデータが格納される属性をデータｒｅａｄ要求として送付する（ステップ８０１）。続いて、起点プロキシオブジェクトは、受信した到達経路情報を用いて、Ｐ参照３１４に保持する参照情報をたどることで目標の属性を持つオブジェクトＯＢＪへの間接参照を実現するプロキシオブジェクトＰＯＢに到達する（ステップ８０２）。【００７７】
ここで、到達経路情報とは、例えば、「オブジェクト１からオブジェクト２を介して、目標（データ操作対象）であるオブジェクトＮに到達する」と表現されるような目標オブジェクトに到達するために経由するオブジェクトの情報である。この到達経路情報に含まれるオブジェクトを、各オブジェクトへの間接参照を実現するプロキシオブジェクトに置換することで「プロキシオブジェクト１からプロキシオブジェクト２を介して、目標であるプロキシオブジェクトＮに到達する」のような、オブジェクトの到達経路に対応するプロキシオブジェクトの到達経路情報（プロキシオブジェクト到達経路情報）を生成する。このプロキシオブジェクト到達経路情報を生成することで、オブジェクト１の間接参照を実現するプロキシオブジェクト１から、オブジェクト２等のオブジェクトを介さずにプロキシオブジェクトを介して、オブジェクトＮの間接参照を実現するプロキシオブジェクトＮに到達することができる。【００７８】
このプロキシオブジェクト到達経路情報を用いて、目標となるオブジェクトへ間接参照可能なプロキシオブジェクト（目標プロキシオブジェクト）に到達した後は、ユーザプログラム実行部１３１が、目標プロキシオブジェクトが保持するデータＩ／Ｆを介して目標のオブジェクトに対するデータ操作を試行する（ステップ８０３）。この時、目標プロキシオブジェクトのデータＩ／Ｆは、ユーザプログラム実行部１３１によるデータ操作がｒｅａｄかｗｒｉｔｅかを判定する（ステップ８０４）。データ操作がｒｅａｄの場合（ステップ８０４でＲｅａｄ）は、目標プロキシオブジェクトは、ユーザプログラム実行部１３１に、オブジェクトのデータを読み込ませて処理を終了する（ステップ８０５）。【００７９】
一方、データ操作がｗｒｉｔｅの場合（ステップ８０４でＷｒｉｔｅ）は、目標プロキシオブジェクトは、間接参照するオブジェクトの複製をメモリ１１１に生成する（ステップ８０６）。目標オブジェクトを複製した後は、プロキシオブジェクトＰＯＢのＯ参照３１２を複製元オブジェクトＯＢＪへの参照から複製先オブジェクトＯＢＪへの参照へ変更する（ステップ８０７）。プロキシオブジェクトＰＯＢのＯ参照３１２の変更が完了すれば、プロキシオブジェクトは、複製先のオブジェクトに対してｗｒｉｔｅ操作を適用して処理を終了する（ステップ８０８）。なお、間接参照するオブジェクトが複製済みである場合に、プロキシオブジェクトに複製済みフラグを持たせるようにし、データ操作がｗｒｉｔｅの場合に、複製済みフラグを確認することで、同一のオブジェクトへのｗｒｉｔｅ時にオブジェクトを複製する処理を初回だけにするようにしてもよい。【００８０】
オブジェクトの内部情報をｗｒｉｔｅした後に、このオブジェクトを永続化する場合には、オブジェクト保持部１３６に保持されたｗｒｉｔｅ前のオブジェクトを、ｗｒｉｔｅ後のオブジェクトに更新する再登録処理を実行する必要がある。この再登録処理をフローチャートに従って説明する。【００８１】
図９は、実施例１に係るオブジェクトの再登録処理のフローチャートである。【００８２】
オブジェクト管理部１３２は、ユーザプログラム実行部１３１から登録対象のオブジェクト群の起点オブジェクトを一意に識別するキーを伴ったオブジェクトの登録要求が発生するまで待機する（ステップ９０１）。オブジェクトの再登録要求が発生すれば（ステップ９０１でＹｅｓ）、オブジェクト管理部１３２は、起点プロキシオブジェクト及び起点プロキシオブジェクトから到達可能なプロキシオブジェクトから間接参照可能なプロキシオブジェクトではないオブジェクトを求め、当該オブジェクトに対するｗｒｉｔｅの有無を確認してステップ９０３に進む（ステップ９０２）。オブジェクトに対するｗｒｉｔｅの有無の確認方法としては、例えば、プロキシオブジェクトＰＯＢのＯ参照３１２のオブジェクトを複製した場合に、複製を実施したことを示す複製済フラグをプロキシオブジェクトに保持させ、オブジェクトの再登録時に、その複製済フラグを確認することで確認するようにしてもよい。また、登録済みオブジェクト群と再登録対象のオブジェクト群との内部情報を比較し、内部情報が異なればｗｒｉｔｅが発生したと判定するようにしてもよい。【００８３】
ステップ９０３では、ｗｒｉｔｅが無ければ（ステップ９０３でＮｏ）、登録済みのデータとの変更点は無いと判断して登録処理を終了する。一方、ｗｒｉｔｅがあれば（ステップ９０３でＹｅｓ）、オブジェクト管理部１３２は、ｗｒｉｔｅが発生して複製が実施されたオブジェクトの複製先と、ｗｒｉｔｅが発生したオブジェクトへの間接参照を実現するプロキシオブジェクトを参照するプロキシオブジェクト群をステップ９０２で取得した全プロキシオブジェクトから抽出する（ステップ９０４）。そして、オブジェクト管理部１３２は、抽出したプロキシオブジェクトによって間接参照を実現するオブジェクトＯＢＪの参照先３０４をステップ９０４で取得したオブジェクトの複製先に変更してオブジェクトの再登録処理を終了する（ステップ９０５）。【００８４】
実施例１によると、プロキシオブジェクトのデータ構造に、オブジェクトの参照関係に対応するプロキシオブジェクトへの参照を保持するＰ参照を加えることと、データ構造を保持するプロキシオブジェクトを管理することで、起点プロキシオブジェクトからプロキシオブジェクトだけを経由することで任意のオブジェクトへの間接参照を実現する目標プロキシオブジェクトへの到達を可能にする。これにより、目標オブジェクトに到達するために非プロキシオブジェクトを経由する必要がなくなり、参照数を低減することができる。このため、プロキシオブジェクトを用いて間接参照する任意のオブジェクトへのアクセスを高速化することができる。
【実施例２】
【００８５】
永続化したオブジェクトに対するｒｅａｄ／ｗｒｉｔｅ性能を向上させるにはオブジェクトキャッシュの利用が有効である。また、オブジェクトキャッシュを利用する環境で、データ一貫性を保ったままｒｅａｄ性能を向上させるには、Ｃｏｐｙ  ｏｎ  Ｗｒｉｔｅの利用が有効である。Ｃｏｐｙ  ｏｎ  Ｗｒｉｔｅを実現するためには、永続化のためにオブジェクトキャッシュに登録したオブジェクトに対してプロキシオブジェクトを介した間接参照を実現する必要がある。ただし、登録したオブジェクトとそのオブジェクトから参照できるオブジェクト全てに対してプロキシオブジェクトを生成すると、登録したオブジェクト数に比例したプロキシオブジェクトが必要となる。プロキシオブジェクトは、プロキシオブジェクトが参照するオブジェクトへの参照情報を保持しているため、プロキシオブジェクトによるメモリ消費量が増加してメモリ１１１にキャッシュできるオブジェクト数が低下する。【００８６】
このオブジェクトキャッシュに登録するオブジェクト群には同じデータ構造と参照関係を持つオブジェクトが複数含まれるため、オブジェクト群への間接参照を実現するために生成するプロキシオブジェクト群には、同じデータアクセスＩ／Ｆを持つプロキシオブジェクトが複数含まれる。【００８７】
図２２は、実施例２に係るオブジェクトへの間接参照を実現するプロキシオブジェクトのデータ構成を説明する図である。【００８８】
例えば、図２２に示すように、オブジェクト保持部１３３には、オブジェクトＡ１とオブジェクトＢ１が存在し、オブジェクトＡ１からオブジェクトＢ１への参照が存在するとする。また、図２２に示すように、プロキシオブジェクト保持部１３６には、オブジェクトＡ１とオブジェクトＢ１への間接参照を実現するプロキシオブジェクトＰＡ１、ＰＢ１が存在するとする。オブジェクトＡ１とオブジェクトＢ１への間接参照を実現するためにプロキシオブジェクトＰＡ１は、Ｏ参照にＡ１、Ｐ参照にＰＢ１を保持し、オブジェクトＡ１の内部情報へのデータアクセスＩ／Ｆを保持することとなる。【００８９】
ここで、オブジェクトＡ１とオブジェクトＢ１と同じデータ構造及び参照関係を持つオブジェクトＡ２とオブジェクトＢ２が存在する場合には、オブジェクトＡ２とオブジェクトＢ２への間接参照を実現するためにプロキシオブジェクトＰＡ２、ＰＢ２が生成されることになる。このプロキシオブジェクトＰＡ２及びＰＢ２は、プロキシオブジェクトＰＡ１及びＰＢ１とは、Ｏ参照のみが異なるプロキシオブジェクトである。【００９０】
これは、例えば、Ｊａｖａであれば、同一クラスＡから別インスタンスとして、オブジェクトＡ１とＡ２を生成した場合に発生する。オブジェクトＢ１とＢ２についても同様である。プロキシオブジェクトＰＡ１とＰＢ１は、そのＯ参照をオブジェクトＡ２とＢ２に変更することでオブジェクトＡ２とオブジェクトＢ２のそれぞれへの間接参照を実現することができる。【００９１】
このことは、Ｏ参照にオブジェクトへの参照を登録しないプロキシオブジェクトＰＡ１、ＰＢ１を代表プロキシオブジェクトとして１組保持しておけば、この代表プロキシオブジェクトを用いて、オブジェクトＡ１及びＢ１、またはオブジェクトＡ２及びＢ２への間接参照を容易に実現することができること意味している。【００９２】
図２３は、実施例２に係る代表プロキシオブジェクトを複製して利用する例を説明する図である。【００９３】
具体的には、例えば、図２３に示すように、ユーザプログラム実行部１３１からオブジェクトＡ２及びＢ２に対するオブジェクト取得要求が発生した後に、プロキシオブジェクトＰＡ１及びＰＢ１を複製し、その複製したプロキシオブジェクトＰＡ１’及びＰＢ１’のそれぞれのＯ参照にオブジェクトＡ２とオブジェクトＢ２への参照をそれぞれ登録し、ユーザプログラム実行部１３１に送信することで、オブジェクトＡ２及びＢ２への間接参照を実現できる。【００９４】
このように、同じデータアクセスＩ／Ｆと、オブジェクト間の参照関係と、を保持するオブジェクト群に対しては、１組の代表プロキシオブジェクトを準備しておき、オブジェクトの取得要求があった時にのみ代表プロキシオブジェクトを複製し、その複製のＯ参照を変更することで、取得要求のあったオブジェクトに対する間接参照を実現できる。代表プロキシオブジェクトを用いることで、オブジェクト数に比例して必要であったプロキシオブジェクト数を低減することができる。【００９５】
このような代表プロキシオブジェクトを利用する実施例２に係るオブジェクト管理装置を以下に説明する。【００９６】
図１０は、実施例２に係る計算機の構成図である。【００９７】
実施例２に係るオブジェクト管理装置の一例としての計算機１０１は、図１に示す計算機を実現するプログラムに対して、オブジェクト保持部１３３に追加されたオブジェクト群に対して既存の代表プロキシオブジェクトにより間接参照を実現できるかを判定する代表プロキシオブジェクト確認部１３８を追加するとともに、プロキシオブジェクト保持部１３６を代表プロキシオブジェクトを保持する代表プロキシオブジェクト保持部１３６に変更したものである。【００９８】
図１１は、実施例２に係るオブジェクト登録処理のフローチャートである。【００９９】
オブジェクト構造解析部１３４は、オブジェクトとそのオブジェクトから参照できる（到達できる）オブジェクト全てからなるオブジェクト群が、オブジェクト保持部１３３に登録されるまで待機する（ステップ１１０１）。オブジェクト構造解析部１３４がオブジェクト保持部１３３へのオブジェクト群の登録を検知すれば（ステップ１１０１でＹｅｓ）、ステップ１１０２に進む。ステップ１１０２では、オブジェクト構造解析部１３４が登録されたオブジェクト群を解析することで、各オブジェクトの参照先と間接参照を実現するプロキシオブジェクトを抽出し、オブジェクト管理表２００を生成する（ステップ１１０２）。【０１００】
ここでの解析とは、例えば、オブジェクトの内部情報からオブジェクトの型（オブジェクト型）と他のオブジェクトへの参照とを抽出し、抽出したオブジェクト型を持つオブジェクトへの間接参照を実現するプロキシオブジェクトを特定することである。ここで、ステップ１１０２で、登録を検知したオブジェクト群の起点のオブジェクトを説明のため追加起点オブジェクトと呼ぶ。【０１０１】
ステップ１１０２の後に、既存の代表プロキシオブジェクトにより、登録されたオブジェクト群の間接参照が可能か判定するためステップ１１０３に進む。ステップ１１０３では、代表プロキシオブジェクト確認部１３８が、オブジェクト管理表２００を用いて追加起点オブジェクトへの間接参照を実現するプロキシオブジェクトを示すＩＤ（追加起点プロキシオブジェクトＩＤ）を取得する。次に、代表プロキシオブジェクト確認部１３８が、オブジェクトインデックス表５００の起点プロキシオブジェクトＩＤと一致する追加起点プロキシオブジェクトＩＤが存在するか否かを確認する（ステップ１１０４）。【０１０２】
存在しなければ（ステップ１１０４でＮｏ）、代表プロキシオブジェクト確認部１３８は、既存の代表プロキシオブジェクトが存在しないとして、代表プロキシオブジェクトを生成するためにプロキシオブジェクト生成部１３５に処理を引き継ぐ（ステップ１１０５）。一方、存在すれば（ステップ１１０４でＹｅｓ）、代表プロキシオブジェクト確認部１３８は、起点プロキシオブジェクトＩＤと一致する代表プロキシオブジェクトの起点が存在するとして、追加起点オブジェクトから参照するオブジェクトも代表プロキシオブジェクトにより間接参照を実現できるか否かを確認するためステップ１１０６に進む。ステップ１１０６では、オブジェクト管理表２００を用いて追加起点オブジェクトから参照されるオブジェクトが存在するか確認する。【０１０３】
この結果、存在しなければ（ステップ１１０６でＮｏ）、代表プロキシオブジェクト確認部１３８は、オブジェクト保持部１３３に追加したオブジェクト群は既存の代表プロキシオブジェクトで間接参照できると判定して処理を終了する。一方、存在すれば（ステップ１１０６でＹｅｓ）、代表プロキシオブジェクト確認部１３８は、追加起点オブジェクトから参照されるオブジェクトへの間接参照を実現するプロキシオブジェクトを示すプロキシオブジェクトＩＤ（追加参照先プロキシオブジェクトＩＤ）を取得する（ステップ１１０７）。【０１０４】
そして、代表プロキシオブジェクト確認部１３８は、代表プロキシオブジェクトの起点から参照するプロキシオブジェクト（群）を識別する参照先プロキシオブジェクトＩＤ（群）を取得する（ステップ１１０８）。続いて、代表プロキシオブジェクト確認部１３８は、取得した参照先プロキシオブジェクトＩＤ（群）に追加参照先プロキシオブジェクトＩＤが全て含まれるか否かを確認する（ステップ１１０９）。含まれなければ（ステップ１１０９でＮｏ）、既存の代表プロキシオブジェクトが存在しないとして、代表プロキシオブジェクトを生成するためにプロキシオブジェクト生成部１３５に処理を引き継ぐ（ステップ１１０５）。【０１０５】
一方、含まれれば（ステップ１１０９でＹｅｓ）、代表プロキシオブジェクト確認部１３８は、追加参照先プロキシオブジェクトＩＤと参照先プロキシオブジェクトＩＤが一致するペアを生成し、各ペアに対して追加参照先プロキシオブジェクトＩＤで示されるプロキシオブジェクトにより間接参照されるオブジェクトを追加起点オブジェクト、参照先プロキシオブジェクトＩＤで示されるプロキシオブジェクトを代表プロキシオブジェクトの起点とみなしてステップ１１０６に戻り、同様な代表プロキシオブジェクト確認処理を継続する（ステップ１１１０）。なお、ステップ１１０５でプロキシオブジェクト生成部１３５に処理を引き継ぐ前に、代表プロキシオブジェクト確認部１３８がステップ１１０９で代表プロキシオブジェクトとの差分を記録し、プロキシオブジェクト生成部１３５が代表プロキシオブジェクトに足りないプロキシオブジェクトを追加プロキシオブジェクトとして生成してもよい。【０１０６】
次に、ユーザプログラム実行部１３１に代表プロキシオブジェクトを提供する代表プロキシオブジェクト提供処理を説明する。代表プロキシオブジェクト提供処理において、ユーザプログラム実行部１３１のオブジェクト取得要求に従ってオブジェクト管理部１３２は、代表プロキシオブジェクトをユーザプログラム実行部１３１に送信（提供）する。この時、オブジェクト管理部１３２はオブジェクト保持部１３３に保持されるオブジェクト群への間接参照を実現するために代表プロキシオブジェクトを探索し、代表プロキシオブジェクト、または、その複製のプロキシオブジェクトのＯ参照にデータ取得要求で要求されたオブジェクトへの参照を登録することを行う。ここで、代表プロキシオブジェクト提供処理をフローチャートに従って説明する。【０１０７】
図１２は、実施例２に係る代表プロキシオブジェクト提供処理のフローチャートである。 【０１０８】
オブジェクト管理部１３２は、ユーザプログラム実行部１３１からオブジェクトを一意に識別するキーを伴ったオブジェクトの取得要求が発生するまで待機する（ステップ１２０１）。オブジェクト取得要求が発生すれば（ステップ１２０１でＹｅｓ）、オブジェクト管理部１３２はユーザプログラム実行部１３１から取得したキーを用いて、オブジェクトインデックス管理表５００から、要求されるオブジェクトのオブジェクトＩＤと起点プロキシオブジェクトＩＤとを取得し、プロキシオブジェクト参照設定部１３７に処理を引き継ぐ（ステップ１２０２）。プロキシオブジェクト参照設定部１３７は、取得した起点プロキシオブジェクトと、起点プロキシオブジェクトからたどることのできるプロキシオブジェクトとを、Ｐ参照３１４の参照情報を含めて複製する。そして、複製先の起点を起点プロキシオブジェクトとする（ステップ１２０３）。その後、プロキシオブジェクト参照設定部１３７は、起点プロキシオブジェクトのＯ参照３１２に、ステップ１２０２で取得したオブジェクトＩＤで示されるオブジェクトへの参照を登録する（ステップ１２０４）。【０１０９】
ステップ１２０４の後は、プロキシオブジェクト参照設定部１３７は、起点プロキシオブジェクトのＰ参照３１４に登録されたプロキシオブジェクトが存在するか確認する（ステップ１２０５）。Ｐ参照に登録されたプロキシオブジェクトが存在すれば（ステップ１２０５でＹｅｓ）、ステップ１２０６に進む。一方、存在しなければ（ステップ１２０５でＮｏ）、プロキシオブジェクト参照設定部１３７は、複製された代表プロキシオブジェクトにオブジェクトへの参照を設定する処理が完了したとしてオブジェクト管理部１３２に処理を戻してステップ１２０７に進む。【０１１０】
ステップ１２０６では、プロキシオブジェクト参照設定部１３７は、Ｐ参照３１４に登録されたプロキシオブジェクトのプロキシオブジェクトＩＤを取得し、オブジェクト管理表２００からプロキシオブジェクトＩＤに対応するオブジェクトＩＤを取得する。その後、取得したプロキシオブジェクトＩＤを新たな起点プロキシオブジェクトＩＤとしてステップ１２０４に進む。なお、オブジェクト管理表２００（図２参照）とは、ユーザプログラム実行部１３１から取得要求のあったオブジェクトを登録する際に、オブジェクト構造解析部１３４が生成した表である。オブジェクト管理表２００は、オブジェクトの登録が完了すれば破棄して、メモリ１１１に保持するデータ量を削減できる。ただし、オブジェクトの登録完了後に破棄している場合には、ステップ１２０２とステップ１２０３との間において、オブジェクト構造解析部１３４が取得要求のあったオブジェクトから参照されるオブジェクトを調査し、オブジェクト管理表２００を再び生成するステップが必要となる。ステップ１２０７では、オブジェクト管理部１３２は、ユーザプログラム実行部１３１に複製した代表プロキシオブジェクトの起点プロキシオブジェクトを送信する。【０１１１】
以上のように代表プロキシオブジェクトを導入することで、ユーザプログラム実行部１３１から取得要求されたオブジェクトに対しての参照に利用するためのプロキシオブジェクトのみを生成すればよい。このため、代表プロキシオブジェクトを用いる方法によると、オブジェクト保持部１３３に登録されたオブジェクト全てに対応するプロキシオブジェクトを生成する方法に比べてプロキシオブジェクトの生成数を低減することができる。
【実施例３】
【０１１２】
実施例２に係る計算機１０１においては、オブジェクト管理部１３２は、ユーザプログラム実行部１３１からのオブジェクト取得要求が発生するたびに代表プロキシオブジェクトを複製する。このため、ユーザプログラム実行部１３１はオブジェクト取得時には毎回複製処理が完了するまで、プログラムの実行を待機させる必要がある。そこで、実施例３に係るデータ管理装置の一例である計算機１０１おいては、ユーザプログラム実行部１３１が代表プロキシオブジェクトの複製を待つ時間を削減するために、同一の代表プロキシオブジェクトを事前に複製して、所定の一定数以上保持しておくようにしている。【０１１３】
実施例３に係る計算機１０１においては、例えば、図１０を用いて説明すると、オブジェクト管理部１３２が代表プロキシオブジェクト数を監視し、代表プロキシオブジェクト数が所定の閾値を下回れば、オブジェクト管理部１３２が代表プロキシオブジェクトの起点プロキシオブジェクトをプロキシオブジェクト生成部１３５に通知して代表プロキシオブジェクトの複製を実施させる。ここで、閾値としては、任意の値でよいが、ユーザプログラム実行部１３１での代表プロキシオブジェクト使用状況から決定してもよい。代表プロキシオブジェクト使用状況としては、例えば、ユーザプログラ実行部１３１で並列に処理を実行するスレッドの最大数や、スレッドで同時使用された代表プロキシオブジェクトの最大数などがある。【０１１４】
以上のように代表プロキシオブジェクトを事前に複製して代表プロキシオブジェクト保持部１３６に保持するようにしたために、オブジェクト取得要求が発生した場合に、図１２のステップ１２０３において、代表プロキシオブジェクトを複製する必要がなく、ユーザプログラム実行部１３１の処理時間が短縮される。
【実施例４】
【０１１５】
実施例２、実施例３に係る計算機１０１においては、オブジェクト管理部１３２はユーザプログラム実行部１３１からのオブジェクト取得要求が発生すれば、代表プロキシオブジェクト（群）を構成するプロキシオブジェクトのＯ参照３１２に取得要求のあったオブジェクトと、そのオブジェクトから参照できる全てのオブジェクトへの参照を登録する。しかし、ユーザプログラム実行部１３１は、要求したオブジェクトと、そのオブジェクトから参照できる全オブジェクトに対して、ｒｅａｄやｗｒｉｔｅといった操作を行うとは限らないため、取得したオブジェクト全てへの間接参照が必要になるとは限らない。【０１１６】
そこで、実施例４に係る計算機１０１においては、操作要求が発生したオブジェクトに対してプロキシオブジェクトからの参照を設定することにより、オブジェクト取得時における不要なオブジェクトへの参照設定を省くことができるようにした。ここで、オブジェクトの操作要求があった際に、操作要求のあったオブジェクトに対する参照をプロキシオブジェクトに設定することを、遅延プロキシオブジェクト参照設定ということとする。【０１１７】
図１３は、実施例４に係る遅延プロキシオブジェクト参照設定処理前のオブジェクト状態を説明する図である。【０１１８】
ここで、実施例４に係る計算機１０１について、図１０に示す計算機との違いを明確にするために、図１３を用いて説明する。【０１１９】
ユーザプログラム実行部１３１は、間接参照を実現するプロキシオブジェクトＰＯＢと間接参照先のオブジェクトＯＢＪを記憶している。プロキシオブジェクトＰＯＢは、多段の参照関係を保持するオブジェクトＯＢＪへの間接参照を実現するデータ構造をデータ部に持っている。すなわち、各プロキシオブジェクトＰＯＢは、間接参照先のオブジェクトＯＢＪの参照情報を保持するためのＯ参照３１２と、間接参照先のオブジェクトが参照する他のオブジェクトへの間接参照を実現するプロキシオブジェクトＰＯＢへの参照情報を保持するためのＰ参照３１４を保持している。さらに、プロキシオブジェクトＰＯＢは、ユーザプログラム実行部１３１によるオブジェクトへの間接参照要求を検知して、オブジェクトへの参照を設定（遅延プロキシオブジェクト参照設定）させる機能を実現するための間接参照追加部１３９を保持する。【０１２０】
以下、間接参照追加部１３９により実現させる遅延プロキシオブジェクト参照設定を、オブジェクト取得と、データのｒｅａｄやｗｒｉｔｅといったオブジェクト操作との２つの処理にわけて説明する。【０１２１】
オブジェクト取得では、ユーザプログラム実行部１３１が間接参照追加部１３９をその機能として保持するプロキシオブジェクトと、そのプロキシオブジェクトによる間接参照を実現するオブジェクトとを取得する。このオブジェクト取得処理の一例をフローチャートに従って説明する。【０１２２】
図１４は、実施例４に係るオブジェクト取得処理のフローチャートである。【０１２３】
オブジェクト管理部１３２は、ユーザプログラム実行部１３１からオブジェクトを一意に識別するキーを伴ったオブジェクトの取得要求が発生するまで待機する（ステップ１５０１）。オブジェクト取得要求が発生すれば（ステップ１５０１でＹｅｓ）、オブジェクト管理部１３２はユーザプログラム実行部１３１から取得したキーを用いてオブジェクトインデックス管理表５００から、要求されるオブジェクトのオブジェクトＩＤと起点プロキシオブジェクトＩＤを取得した後に、プロキシオブジェクト参照設定部１３７に処理を引き継ぐ（ステップ１５０２）。プロキシオブジェクト参照設定部１３７は、代表プロキシオブジェクトから複製され、且つ取得した起点プロキシオブジェクトＩＤで示されるプロキシオブジェクトＰＯＢのＯ参照３１２に、取得したオブジェクトＩＤで示されるオブジェクトの参照情報を登録する（ステップ１５０３）。その後、オブジェクト管理部１３２は、起点プロキシオブジェクトのＯ参照３１２にのみ参照先オブジェクトを登録した状態で、ユーザプログラム実行部１３１に起点プロキシオブジェクトを送信して処理を終了する（ステップ１５０４）。【０１２４】
オブジェクト操作では、ユーザプログラム実行部１３１からの間接参照要求を間接参照追加部１３９が検知した後に、オブジェクト構造解析部１３４とプロキシオブジェクト参照設定部１３７とが通信することで、プロキシオブジェクトからオブジェクトへの参照を登録する。このオブジェクト操作処理の一例をフローチャートに従って説明する。【０１２５】
図１５は、実施例４に係るオブジェクト操作処理のフローチャートである。【０１２６】
間接参照追加部１３９は、ユーザプログラム実行部１３１によるオブジェクトへの間接参照要求が発生するまで待機する（ステップ１６０１）。間接参照要求を検知すれば（ステップ１６０１でＹｅｓ）、間接参照追加部１３９は、プロキシオブジェクトを介して間接参照先のオブジェクトにアクセスできるか確認する（ステップ１６０２）。アクセスできれば（ステップ１６０２でＹｅｓ）、ユーザプログラム実行部１３１にプロキシオブジェクトを介した間接参照を実行させて処理を終了する。アクセスできなければ（ステップ１６０２でＮｏ）、間接参照追加部１３９は、間接参照要求先のオブジェクト（目標オブジェクト）、起点プロキシオブジェクトが間接参照するオブジェクト（起点オブジェクト）、起点プロキシオブジェクトから、目標オブジェクトへの間接参照を実現するプロキシオブジェクトまで順番に取得したプロキシオブジェクト群（参照順プロキシオブジェクト群）を取得する（ステップ１６０３）。【０１２７】
ここで、例えば、オブジェクトＡ、Ｂ、Ｃが存在して、オブジェクトＡがオブジェクトＢを参照し、オブジェクトＢがオブジェクトＣを参照するようになっている場合には、オブジェクトＣのデータをリードは、“Ａ．Ｂ．Ｃ．ｒｅａｄ（）”と表現される。この時、起点オブジェクトは、オブジェクトＡとなり、目標オブジェクトは、オブジェクトＣとなる。また、オブジェクトＡ、Ｂ、Ｃの各オブジェクトへの間接参照を実現するプロキシオブジェクトをそれぞれ、ＰＡ、ＰＢ、ＰＣとすると、参照順プロキシオブジェクト群は、ＰＡ→ＰＢ→ＰＣとなる。【０１２８】
ステップ１６０３の後、オブジェクト構造解析部１３４は、取得した起点オブジェクトから参照できるオブジェクトと、そのオブジェクトへの間接参照を実現するプロキシオブジェクトとを取得する（ステップ１６０４）。その後、オブジェクト構造解析部１３４は、参照順プロキシオブジェクト群のうち起点プロキシオブジェクトから直接参照されるプロキシオブジェクトと、ステップ１６０４で取得したプロキシオブジェクトが一致するか否かを確認する（ステップ１６０５）。ステップ１６０５で、一致するプロキシオブジェクトが存在すれば（ステップ１６０５でＹｅｓ）、ステップ１６０６に進む。一方、一致するプロキシオブジェクトが存在しなければ（ステップ１６０５でＮｏ）、間接参照要求されたオブジェクトは存在しないとして処理を終了する。この場合、ユーザプログラム実行部１３１での間接参照要求がオブジェクト自体の操作であれば、オブジェクトが存在しないことを示す情報として、例えば、ＮＵＬＬを返す。また、オブジェクトに含まれるデータの操作や、オブジェクトから参照するオブジェクトの操作であれば、オブジェクトが存在せず要求するオブジェクトやデータに到達できないことを示す情報、または実現できない処理として例外を返す（ステップ１６０８）。【０１２９】
ステップ１６０６では、一致したプロキシオブジェクトが、参照順プロキシオブジェクト群のうち最後に取得したプロキシオブジェクトか否かを確認する。最後のプロキシオブジェクトでなければ（ステップ１６０６でＮｏ）、ステップ１６０５で一致したプロキシオブジェクトを起点プロキシオブジェクトとしてステップ１６０４に戻り、プロキシオブジェクトの一致確認を継続する。一方。最後のプロキシオブジェクトであれば（ステップ１６０６でＹｅｓ）、プロキシオブジェクト参照設定部１３７は、一致したプロキシオブジェクトのＯ参照３１２に目標オブジェクトへの参照を登録し、オブジェクトへの間接参照を実現する（ステップ１６０７）。【０１３０】
以上のオブジェクト取得処理とオブジェクト操作処理とにより、例えば、図１３に示す参照関係にあるオブジェクト群に含まれるＩＤ＝２のオブジェクトＯＢＪへの間接参照要求が発生した後に、図１６に示すように、プロキシオブジェクト群に含まれるＩＤ＝Ｐ２のプロキシオブジェクトＰＯＢからＩＤ＝２のオブジェクトＯＢＪへの参照が設定され、プロキシオブジェクトＰＯＢにより間接参照要求がされたオブジェクトＯＢＪへの間接参照を実現することができる。上記実施例によると、オブジェクト取得処理時においては、代表プロキシオブジェクトと、ユーザプログラム実行部１３１からの取得対象となったオブジェクトとの参照関係を調査する処理や、代表プロキシオブジェクトの一部のプロキシオブジェクトへのＯ参照の設定処理を省けるため、オブジェクト取得処理を高速化できる。
【実施例５】
【０１３１】
代表プロキシオブジェクトを複数保持せず、ユーザプログラム実行部１３１により、間接参照要求が発生した場合に、間接参照を実現するプロキシオブジェクトを生成する遅延プロキシオブジェクト生成を行っても良い。遅延プロキシオブジェクト生成を実現するためには、図１３と同様に、起点プロキシオブジェクトへ間接参照追加部１３９を備える必要がある。遅延プロキシオブジェクト生成処理の一例を、フローチャートに従って説明する。【０１３２】
図１８は、実施例５に係る遅延プロキシオブジェクト生成処理のフローチャートである。【０１３３】
ユーザプログラム実行部１３１により、オブジェクト取得要求が発生した場合は、オブジェクト管理部１３２がオブジェクトインデックス表５００を参照し、起点プロキシオブジェクトを生成するとともに、起点プロキシオブジェクトのＯ参照３１２に要求されたオブジェクトのアドレスを登録し、この起点プロキシオブジェクトをユーザプログラム実行部１３１に送信する（１９０１）。この起点プロキシオブジェクトは、例えば、図１７に示すようになっている。【０１３４】
ユーザプログラム実行部１３１では、間接参照追加部１３９がオブジェクトへの間接参照要求を検知するまで待機する（ステップ１９０２）。間接参照要求を検知すれば（ステップ１９０２でＹｅｓ）、間接参照追加部１３９は既存のプロキシオブジェクトを介して間接参照先のオブジェクトにアクセスできるか否かを確認する（ステップ１９０３）。アクセスできれば（ステップ１９０３でＹｅｓ）、ユーザプログラム実行部１３１にプロキシオブジェクトを介した間接参照を実行させて処理を終了する。【０１３５】
一方、アクセスできなければ（ステップ１９０２でＮｏ）、間接参照追加部１３９は、間接参照要求先のオブジェクト（目標オブジェクト）と、起点プロキシオブジェクトが間接参照するオブジェクト（起点オブジェクト）とを取得し、オブジェクト構造解析部１３４に処理を引き継ぐ（１９０４）。ステップ１９０５では、オブジェクト構造解析部１３４が起点オブジェクトから目標オブジェクトまでの参照構造を解析し、目標オブジェクトへの間接参照を実現するプロキシオブジェクト（目標プロキシオブジェクト）と、起点プロキシオブジェクトから目標プロキシオブジェクトを参照するためにたどるプロキシオブジェクトとを、代表プロキシオブジェクト保持部１３６に保持される代表プロキシオブジェクトから複製する。【０１３６】
そして、ステップ１９０５で複製したプロキシオブジェクト群について、起点プロキシオブジェクトから目標オブジェクトへの間接参照を実現する目標プロキシオブジェクトへ参照をたどれるように、各プロキシオブジェクトのＰ参照３１４に参照先のプロキシオブジェクトの参照を設定し、目標オブジェクトへの間接参照を実現するプロキシオブジェクトのＯ参照３１４に目標オブジェクトへの参照を設定する（ステップ１９０６）。以上の処理により、間接参照要求後において、図１９に示すように、プロキシオブジェクト群に、ＩＤ＝Ｐ２のプロキシオブジェクトＰＯＢを生成でき、ＩＤ＝Ｐ１のプロキシオブジェクトＰＯＢからＩＤ＝Ｐ２のプロキシオブジェクトＰＯＢへの参照の設定をでき、ＩＤ＝Ｐ２のプロキシオブジェクトＰＯＢからＩＤ＝２のオブジェクトＯＢＪへの参照の設定を実現できる。【０１３７】
この遅延プロキシオブジェクト生成処理により、オブジェクトへの間接参照を実現するために必要なプロキシオブジェクトのみ生成できる。このため、代表プロキシオブジェクト保持部１３６で保持する代表プロキシオブジェクトをプロキシオブジェクトの種類に応じて１つだけに限定でき、代表プロキシオブジェクトを事前に複製して保持する場合に比べてメモリ１１１の消費量を削減できる。
【実施例６】
【０１３８】
オブジェクトが複数のオブジェクトが集まったオブジェクトであるコレクションへの参照を保持する場合がある。この時、コレクションの要素数が増大すると、オブジェクト数が増大し、それらオブジェクトに対する間接参照を実現するためのプロキシオブジェクト数も増大する。このプロキシオブジェクト数の増大によりメモリ消費量も増大する。一方、コレクションの要素となるオブジェクト群には、同じデータ構造を保持するオブジェクトの集合が含まれ、それら集合に属するオブジェクトは、データをｒｅａｄ／ｗｒｉｔｅするデータアクセスインターフェースは同じである。従って、同じデータ構造を保持するオブジェクトの集合に対しては、同じプロキシオブジェクトにより間接参照を実現できる。このため、代表プロキシオブジェクトと同様に、コレクションの要素を代表するプロキシオブジェクトを１つ生成しておき、コレクションの要素へのアクセスがあった場合にプロキシオブジェクトを複製して利用することで、プロキシオブジェクト数の増大を抑止できる。【０１３９】
これを実現するために、実施例６に係る計算機１０１では、コレクションの要素となるオブジェクトＯＢＪへの間接参照を実現するプロキシオブジェクトＰＯＢに、図２０に示すように間接参照先のコレクションＣＯＢに含まれる要素への参照情報を保持する間接コレクション１４１と、同一のデータ構造を持つオブジェクト集合への間接参照が発生した場合にプロキシオブジェクトＰＯＢを生成して間接参照を実現する機能のための間接参照代表部１４０とを追加し、間接参照先を示すＰ参照３１４にはコレクションを管理するオブジェクトＣＯＢへの参照を設定する。そして、ユーザプログラム実行部１３１で、コレクション要素に対する間接参照要求が発生した場合には、コレクション要素への間接参照処理を実行する。【０１４０】
図２１は、実施例６に係るコレクション要素への間接参照処理のフローチャートである。【０１４１】
間接参照代表部１４０は、コレクションの要素となるオブジェクトＯＢＪへの間接参照要求を検知するまで待機する（ステップ２２０１）。コレクションの要素への間接参照要求を検知すれば（ステップ２２０１でＹｅｓ）、間接参照代表部１４０は、間接参照要求の内容が、コレクション要素の追加や削除といったオブジェクトへの操作要求か、オブジェクトの内部情報に対する操作要求かを確認する（ステップ２２０２）。オブジェクトへの操作要求であれば、ステップ２２０８に進む。一方、オブジェクトの内部情報に対する操作要求であれば、間接参照代表部１４０は、間接コレクション１４１を用いて間接参照先となるオブジェクトを特定し、そのオブジェクトへの間接参照を実現するプロキシオブジェクトを生成する。その後、間接参照代表部１４０は、生成したプロキシオブジェクトのＯ参照３１２にそのオブジェクトへの参照を登録する（ステップ２２０３）。ステップ２２０３で、プロキシオブジェクトを生成した後、間接参照代表部１４０は、オブジェクトの内部情報に対する操作要求が、ｒｅａｄかｗｒｉｔｅかを判定する（ステップ２２０４）。【０１４２】
操作要求がｒｅａｄであれば、特定したオブジェクトの内部情報をｒｅａｄして処理を終了する（２２０５）。操作内容がｗｒｉｔｅであれば、間接参照代表部１４０は、オブジェクトの複製を作成し、生成したプロキシオブジェクトのＯ参照３１２を複製先に変更する。そして、間接参照代表部１４０は、間接コレクション１４１が保持する複製元のオブジェクトへの参照を複製先のオブジェクトに変更する（ステップ２２０６）。ステップ２２０６での複製処理が完了すれば、間接参照代表部１４０は、複製先オブジェクトにｗｒｉｔｅ内容を反映して処理を終了する（ステップ２２０７）。コレクションの要素であるオブジェクトの追加や削除を行う場合は、間接参照代表部１４０は、Ｐ参照３１４に登録されたコレクションを操作せず、間接コレクション１４０の参照情報の追加や削除を行い、処理を終了する（ステップ２２０８）。【０１４３】
このように間接参照代表部１４０と間接コレクション１４１を用いてＣｏｐｙ  ｏｎ  Ｗｒｉｔｅを実現することにより、配列の要素となるオブジェクトに１対１で必要であったプロキシオブジェクトをまとめることができ、プロキシオブジェクトによるメモリ１１１の消費量を低減できる。【０１４４】
なお、本発明は、上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル（表）、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。【０１４５】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１４６】
１０１…計算機、１１１…メモリ、１１２…ＣＰＵ、ＯＢＪ…オブジェクト、ＰＯＢ…プロキシオブジェクト。
【図１】
2013046360.tif 000003
【図２】
2013046360.tif 000004
【図３】
2013046360.tif 000005
【図４】
2013046360.tif 000006
【図５】
2013046360.tif 000007
【図６】
2013046360.tif 000008
【図７】
2013046360.tif 000009
【図８】
2013046360.tif 000010
【図９】
2013046360.tif 000011
【図１０】
2013046360.tif 000012
【図１１】
2013046360.tif 000013
【図１２】
2013046360.tif 000014
【図１３】
2013046360.tif 000015
【図１４】
2013046360.tif 000016
【図１５】
2013046360.tif 000017
【図１６】
2013046360.tif 000018
【図１７】
2013046360.tif 000019
【図１８】
2013046360.tif 000020
【図１９】
2013046360.tif 000021
【図２０】
2013046360.tif 000022
【図２１】
2013046360.tif 000023
【図２２】
2013046360.tif 000024
【図２３】
2013046360.tif 000025
【図２４】
2013046360.tif 000026
【図２５】
2013046360.tif 000027
【図２６】
2013046360.tif 000028
【図２７】
2013046360.tif 000029
【手続補正書】
【提出日】平成26年11月17日(2014.11.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
オブジェクトを記憶可能なメモリと、
前記メモリに接続されたプロセッサと
を有し、
前記プロセッサは、
前段のオブジェクトと、前記前段のオブジェクトから参照可能な１以上の後段のオブジェクトとを前記メモリに記憶させ、
前記前段のオブジェクトへの参照情報を含み、前記前段のオブジェクトを参照可能にする参照機能を提供する前段のプロキシオブジェクトと、前記後段のオブジェクトへの参照情報を含み、前記後段のオブジェクトに対する参照機能を提供する後段のプロキシオブジェクトとを生成して前記メモリに記憶させ、
前記前段のプロキシオブジェクトに、前記後段のプロキシオブジェクトへの参照情報を格納させる
オブジェクト管理装置。
【請求項２】
前記前段のオブジェクトは、参照可能な前記後段のオブジェクトへの参照情報を格納しており、
前記プロセッサは、前記前段のオブジェクトから前記後段のオブジェクトへの参照情報を取得して、前記後段のオブジェクトを特定し、特定した前記後段のオブジェクトを参照可能にする参照機能を提供する前記後段のプロキシオブジェクトを特定し、特定した前記後段のプロキシオブジェクトへの参照情報を前記前段のプロキシオブジェクトに格納させる
請求項１に記載のオブジェクト管理装置。
【請求項３】
前記プロセッサは、前記前段のオブジェクトを取得する要求が発生した場合に、前記前段のオブジェクトから前記後段のオブジェクトへの参照情報を取得して、前記後段のオブジェクトを特定し、特定した前記後段のオブジェクトを参照可能にする参照機能を提供する前記後段のプロキシオブジェクトを特定し、特定した前記後段のプロキシオブジェクトへの参照情報を前記前段のプロキシオブジェクトに格納させる
請求項２に記載のオブジェクト管理装置。
【請求項４】
前記プロセッサは、前記前段のオブジェクトを参照する指示が発生した場合に、前記前段のオブジェクトの識別情報に基づいて、前記前段のオブジェクトを参照可能にする機能を提供する前記前段のプロキシオブジェクトを特定し、前記前段のプロキシオブジェクトを取得する
請求項１に記載のオブジェクト管理装置。
【請求項５】
前記プロセッサは、
或るオブジェクトを起点として所定の目標オブジェクトを操作する指示が発生した場合に、起点となる前記或るオブジェクトから前記目標オブジェクトへのオブジェクトの参照経路に基づいて、起点となる前記或るオブジェクトを参照可能にする参照機能を提供するプロキシオブジェクトから前記目標オブジェクトを参照可能にする参照機能を提供する目標プロキシオブジェクトへのプロキシオブジェクトの参照経路を特定し、前記プロキシオブジェクトの参照経路に基づいて、前記目標プロキシオブジェクトを用いて、前記目標オブジェクトへの操作を実行する
請求項４に記載のオブジェクト管理装置。
【請求項６】
前記プロキシオブジェクトは、前記プロセッサに、前記プロキシオブジェクトが提供する参照機能により参照可能なオブジェクトのデータが更新される際に、前記オブジェクトを前記メモリに複製させ、複製された前記オブジェクトに対してデータの更新をさせ、
前記プロセッサは、複製前の前記オブジェクトを参照可能な前段のオブジェクトの参照情報を、複製後の前記オブジェクトの参照情報に変更する
請求項５に記載のオブジェクト管理装置。
【請求項７】
前記プロセッサは、
或るオブジェクトと、前記或るオブジェクトを起点として参照可能な１以上のオブジェクトとを含むオブジェクト群におけるオブジェクト間の参照構造を取得し、
前記オブジェクト群の各オブジェクトの参照機能を提供するプロキシオブジェクト群であって、各プロキシオブジェクト間の参照構造が前記オブジェクト間の参照構造に対応する参照構造である代表プロキシオブジェクト群を前記メモリに生成する
請求項１に記載のオブジェクト管理装置。
【請求項８】
前記プロセッサは、
前記オブジェクト群の各オブジェクトの参照機能を提供するプロキシオブジェクト群であって、各プロキシオブジェクト間の参照構造が前記オブジェクト間の参照構造に対応する参照構造である代表プロキシオブジェクト群が前記メモリに存在するか否かを判定し、
前記代表プロキシオブジェクト群が前記メモリに存在しない場合に、前記代表プロキシオブジェクト群を前記メモリに生成する
請求項７に記載のオブジェクト管理装置。
【請求項９】
前記プロセッサは、
或るオブジェクトを取得する要求が発生した場合に、前記或るオブジェクトの参照機能を提供するプロキシオブジェクトと、そのプロキシオブジェクトから参照可能なプロキシオブジェクトとを含む代表プロキシオブジェクト群を特定して、前記メモリに複製し、
複製した前記代表プロキシオブジェクト群の各プロキシオブジェクトに対して、前記或るオブジェクトから参照可能なオブジェクトであって、前記プロキシオブジェクトによる参照機能により参照可能なオブジェクトへの参照情報を設定する
請求項８に記載のオブジェクト管理装置。
【請求項１０】
前記プロセッサは、
或るオブジェクトを取得する要求が発生した場合に、前記或るオブジェクトの参照機能を提供するプロキシオブジェクトと、そのプロキシオブジェクトから参照可能なプロキシオブジェクトとを含む代表プロキシオブジェクト群を特定して、特定した前記代表プロキシオブジェクト群の各プロキシオブジェクトに対して、前記或るオブジェクトから参照可能なオブジェクトであって、前記プロキシオブジェクトによる参照機能により参照可能なオブジェクトへの参照情報を設定し、
その後、前記メモリにおける特定した前記代表プロキシオブジェクト群の数が所定の閾値以上となるように、前記代表プロキシオブジェクト群を複製する
請求項７に記載のオブジェクト管理装置。
【請求項１１】
前記プロセッサは、
或るオブジェクトを取得する要求が発生した場合に、前記オブジェクト及び前記オブジェクトから参照可能なオブジェクトを含むオブジェクト群の各オブジェクトを参照可能にする機能を提供するプロキシオブジェクト群を取得し、
前記オブジェクト群の中の或るオブジェクトを操作する指示が発生した場合に、前記操作対象のオブジェクトを参照可能にする機能を提供するプロキシオブジェクトを特定し、前記プロキシオブジェクトに対して、前記操作対象のオブジェクトへの参照情報を設定し、前記参照情報を用いて、前記操作対象のオブジェクトへの操作を実行する
請求項１に記載のオブジェクト管理装置。
【請求項１２】
前記プロセッサは、
或るオブジェクトを操作する要求が発生した場合に、既に取得しているプロキシオブジェクトから、前記或るオブジェクトを参照可能にする機能を提供するプロキシオブジェクトへのプロキシオブジェクトの参照経路を特定し、
前記参照経路に基づいて、必要なプロキシオブジェクトを生成するとともに、前記或るオブジェクトを参照可能にする機能を提供する前記プロキシオブジェクトに対して、前記或るオブジェクトへの参照情報を設定し、前記参照情報を用いて、前記或るオブジェクトへの操作を実行する
請求項１に記載のオブジェクト管理装置。
【請求項１３】
前記メモリの前記オブジェクトには、複数のオブジェクトを要素とするコレクションオブジェクトが含まれ、
前記プロセッサは、
前記コレクションオブジェクトを参照可能にする機能を提供するプロキシオブジェクトを生成するとともに、前記プロキシオブジェクトに前記コレクションオブジェクトの参照情報と、前記コレクションオブジェクトの要素の複数のオブジェクトの参照情報とを格納し、
前記コレクションオブジェクトの要素のオブジェクトを操作する要求が発生した場合に、前記コレクションオブジェクトの要素のオブジェクトを参照可能にする機能を提供するプロキシオブジェクトを生成させるとともに、前記プロキシオブジェクトに前記操作対象の前記オブジェクトの参照情報を格納し、前記プロキシオブジェクトの前記参照情報を用いて、前記操作対象の前記オブジェクトへの操作を実行し、
また、前記コレクションオブジェクトの要素のオブジェクトを変更する要求が発生した場合に、前記コレクションオブジェクトを参照可能にする機能を提供するプロキシオブジェクトが保持する前記コレクションオブジェクトの要素の複数のオブジェクトの参照情報を変更する
請求項１に記載のオブジェクト管理装置。
【請求項１４】
オブジェクトを記憶可能なメモリと、プロセッサとを有するオブジェクト管理装置によるオブジェクト管理方法であって、
前記プロセッサが、
前段のオブジェクトと、前記前段のオブジェクトから参照可能な１以上の後段のオブジェクトとを前記メモリに記憶させ、
前記前段のオブジェクトへの参照情報を含み、前記前段のオブジェクトを参照可能にする参照機能を提供する前段のプロキシオブジェクトと、前記後段のオブジェクトへの参照情報を含み、前記後段のオブジェクトに対する参照機能を提供する後段のプロキシオブジェクトとを生成して前記メモリに記憶させ、
前記前段のプロキシオブジェクトに、前記後段のプロキシオブジェクトへの参照情報を格納させる
オブジェクト管理方法。
【国際調査報告】
2013046360.tif 000030
2013046360.tif 000031
2013046360.tif 000032
2013046360.tif 000033
2013046360.tif 000034