(57)【要約】【課題】大量のオブジェクトの状態を他の装置へ転送する必要がある場合に，そのオーバーヘッドを大幅に減少させ，短時間でオブジェクト状態の同期をとることを可能とする。【解決手段】オブジェクト生成機能１０１は，オブジェクト１０２を生成する際に，その内部状態を転送用領域１０４のバイト列上に配置し，マッピング情報をマッピング管理テーブル１０３に設定する。アプリケーションプログラム１００がアクセサメソッドにより内部状態の操作を行ったときには，転送用領域１０４のバイト列に対して状態を設定又は取得する。転送機能１０５は，転送用領域１０４のバイト列とマッピング管理テーブル１０３とを受信装置２０に転送し，受信装置２０では，復元機能２０１が受信した情報をもとにオブジェクト２０４を復元する。【選択図】図１
2006286013.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムと、前記アプリケーションプログラムから操作可能な内部状態を保持する複数のオブジェクトとを有する情報処理装置におけるオブジェクト状態転送方法において，
オブジェクトが複数の情報処理装置間で共有されるかどうか判定し、
前記オブジェクトが前記複数の情報処理装置間で共有される場合には前記オブジェクトを共有オブジェクトとして共有ヒープ領域に格納し、
前記オブジェクトが前記複数の情報処理装置間で共有されない場合には前記オブジェクトをヒープ領域に格納し、
前記共有ヒープ領域を他の情報処理装置にそのまま送出することにより、前記共有オブジェクトの状態を前記他の情報処理装置に転送することを特徴とするオブジェクト状態転送方法。
【請求項２】
請求項１記載のオブジェクト状態転送方法において、
前記他の情報処理装置への転送対象となるクラスを転送対象クラスとして予め指定しておき、
前記アプリケーションプログラムから新規オブジェクトの生成が指示された場合、前記アプリケーションプログラムから指定された生成対象クラスが前記転送対象クラスに含まれるかどうかを判定し、
前記生成対象クラスが前記転送対象クラスに含まれない場合は、前記ヒープ領域上に新規のオブジェクトを生成し、
前記生成対象クラスが前記転送対象クラスに含まれる場合は、前記共有ヒープ領域上に新規の共有オブジェクトを生成することを特徴とするオブジェクト状態転送方法。
【請求項３】
請求項１又は請求項２記載のオブジェクト状態転送方法において、
前記アプリケーションプログラムからのオブジェクトに対する内部状態の操作が指示された場合、前記アプリケーションプログラムから与えられる操作対象のオブジェクトのアドレスに基づいて前記操作対象のオブジェクトが前記共有ヒープ領域上に格納されているかどうかを判定するとともに、前記操作が内部状態の設定であるかどうか判定し、
前記操作対象のオブジェクトが前記共有ヒープ領域上に格納されており、かつ、前記操作が内部状態の設定である場合、前記共有ヒープ領域を構成している複数のブロックの中で前記操作対象のオブジェクトが格納されているブロックが更新されたことを示すフラグを立てることを特徴とするオブジェクト状態転送方法。
【請求項４】
請求項１から請求項３までのいずれか１項に記載のオブジェクト状態転送方法において、前記共有ヒープ領域全体を前記他の情報処理装置に送出することを特徴とするオブジェクト状態転送方法。
【請求項５】
請求項３記載のオブジェクト状態転送方法において、前記複数のブロックのうち、対応するブロックが更新されたことを示すフラグが立っているブロックのみを前記他の情報処理装置へ送出することを特徴とするオブジェクト状態転送方法。
【請求項６】
前記共有オブジェクトを復元する他の情報処理装置は、
請求項１から請求項５までのいずれか１項に記載のオブジェクト状態転送方法により転送された前記共有ヒープ領域を受信して自装置上の共有ヒープ領域上に展開し、
転送された前記共有ヒープ領域に含まれている該共有ヒープ領域のアドレスと自装置上の共有ヒープ領域に含まれている該共有ヒープ領域のアドレスの差を計算し、
前記転送された共有ヒープ領域に含まれる共有オブジェクト内のポインタが該転送された共有ヒープ領域内を指しているかどうか判定し、
前記ポインタが前記転送された共有ヒープ領域内を指している場合は、前記アドレスの差に基づいて該ポインタを修正し、
前記ポインタが前記転送された共有ヒープ領域外を指している場合は、前記ポインタをNULLにクリアすることを特徴とするオブジェクト状態転送方法。
【請求項７】
アプリケーションプログラムと、前記アプリケーションプログラムから操作可能な内部状態を保持する複数のオブジェクトとを有する情報処理装置におけるオブジェクト状態転送装置であって、
前記複数のオブジェクトのうち、複数の情報処理装置間で共有されるオブジェクトが共有オブジェクトとして格納される共有ヒープ領域と、
前記複数のオブジェクトのうち、前記複数の情報処理装置間で共有されないオブジェクトが格納されるヒープ領域と、
前記共有ヒープ領域を他の情報処理装置にそのまま送出することにより、前記共有オブジェクトの状態を前記他の情報処理装置に転送する転送手段と
を備えることを特徴とするオブジェクト状態転送装置。
【請求項８】
請求項７記載のオブジェクト状態転送装置において、
前記共有ヒープ領域は、前記共有オブジェクトを格納するための複数のブロックと、前記複数のブロックの各々が更新されたかどうかを示すフラグとを備え、
前記オブジェクト状態転送装置は、
前記他の情報処理装置への転送対象となる転送対象クラスが格納された転送対象クラス格納手段と、
生成対象クラスの指定を伴う前記アプリケーションプログラムからの新規オブジェクト生成の指示に応答して、前記転送対象クラスに含まれないクラスを前記生成対象クラスとする指示に対しては前記ヒープ領域上に新規のオブジェクトを生成し、前記転送対象クラスに含まれるクラスを前記生成対象クラスとする指示に対しては前記共有ヒープ領域上に新規の共有オブジェクトを生成するオブジェクト生成手段と、
操作対象のオブジェクトのアドレスを伴う前記アプリケーションプログラムからの内部状態の操作の指示に応答して、前記操作対象のオブジェクトのアドレス及び前記操作の内容に基づき、前記共有ヒープ領域内のオブジェクトに対する内部状態設定の指示を検出し、前記操作対象のオブジェクトが格納されているブロックに対応するフラグを立てる手段と
をさらに備え、
前記転送手段は、予め指定された転送方式に従って、前記共有ヒープ領域の全体、もしくは、前記フラグが立っているブロックのみを前記他の情報処理装置へ転送することを特徴とするオブジェクト状態転送装置。
【請求項９】
アプリケーションプログラムと、前記アプリケーションプログラムから操作可能な内部状態を保持する複数のオブジェクトとを有する情報処理装置におけるオブジェクト状態転送装置であって、
自身の領域のアドレスを記憶するとともに、前記複数のオブジェクトのうち、複数の情報処理装置間で共有されるオブジェクトが共有オブジェクトとして格納される共有ヒープ領域と、
前記複数のオブジェクトのうち、前記複数の情報処理装置間で共有されないオブジェクトが格納されるヒープ領域と、
他の情報処理装置から転送される共有ヒープ領域を受信して自装置の前記共有ヒープ領域上に展開し、前記転送された共有ヒープ領域のアドレスと自装置の前記共有ヒープ領域のアドレスの差を計算し、前記転送された共有ヒープ領域に含まれる共有オブジェクトのポインタのうち、前記転送された共有ヒープ領域内を指しているポインタを前記アドレスの差に基づいて修正するとともに、前記転送された共有ヒープ領域外を指しているポインタをNULLにクリアすることで、共有オブジェクトを復元する復元手段と、
復元された共有オブジェクトに関する情報を前記アプリケーションプログラムに通知するオブジェクト管理手段と
を備えることを特徴とするオブジェクト状態転送装置。
【請求項１０】
請求項１から請求項６までのいずれか１項に記載のオブジェクト状態転送方法を，コンピュータによって実行するためのオブジェクト状態転送プログラム。
【請求項１１】
請求項１から請求項６までのいずれか１項に記載のオブジェクト状態転送方法を，コンピュータによって実行するためのプログラムを記録したことを特徴とするオブジェクト状態転送プログラムの記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，Ｊａｖａ（登録商標）仮想マシンを搭載した装置に関し，特に，オブジェクト状態の他ホストへの転送のオーバヘッドを減少させ，オブジェクト状態の同期をとる場合におけるシステム全体の性能向上を可能にしたオブジェクト状態転送方法，オブジェクト状態転送装置およびオブジェクト状態転送プログラム並びにそのプログラムの記録媒体に関するものである。
【背景技術】
【０００２】
既存のＪａｖａ（登録商標）技術では，複数のオブジェクトの内部状態（インスタンス変数と呼ばれるようなオブジェクトに固有の情報）を外部装置へ転送するためには，一つ一つのインスタンスをシリアライズと呼ばれる手法によりバイト列に変換し，そのバイト列を外部装置へ転送する必要があった。このため，このシリアライズを実行するときに大きなオーバーヘッドが発生していた。すなわち、シリアライズを実行するためには、各インスタンスの内部状態であるメンバ変数へ一つ一つアクセスすることにより個々のメンバ変数の状態を取得し、取得した状態をバイト列が格納される転送用領域へ逐一コピーしてゆく必要があるため、オーバーヘッドが大きくなる。
【０００３】
例えば，複数のホストから構成されるクラスタでは，クラスタを構成するホストの一つが何らかの原因によりサービス継続が不可能になった場合に，他のホストが代わりにそのサービス提供を継続することにより，システムの信頼性を上げることが可能になる。サービス提供を他のホストが引き継ぐためには，そのサービスに関する情報（オブジェクトの状態）を，クラスタを構成するホスト間で同期をとり復元する必要が発生する。
【０００４】
このようなときに，シリアライズを実行して，複数のオブジェクトの内部状態をバイト列に変換し，他のホストへ転送していたが，そのオーバヘッドのためシステム全体での性能に大きな影響が発生していた。
【０００５】
なお、上記のようなクラスタ構成を採用したシステムとして、例えば、非特許文献１で公開されている文献では、シリアライズを利用してセッションステートをレプリケーションすることにより、フェイルオーバー時のセッション引き継ぎを実現している。
【非特許文献１】ＢＥＡシステムズ、“WebLogic Server クラスタ ユーザーズ ガイド”、[online]、［平成１５年７月３日検索］、インターネット＜ＵＲＬ：http://edocs.beasys.co.jp/e-docs/wls/docs70/cluster/failover.html＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
以上のように従来の技術では，信頼性向上のためにクラスタを構成する複数ノード（ホスト）間でオブジェクト状態の同期をとるような，大量のオブジェクトの状態を転送する必要がある場合に，その他の処理が停滞し，システム全体での性能に大きな影響が発生する原因になっていた。
【０００７】
本発明は，このオーバーヘッドを大幅に減少させ，多数のオブジェクトに渡って短時間でオブジェクト状態の同期をとることを可能とし，システム全体の性能への影響を最小化しつつ，クラスタ構成における信頼性を向上させることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の第１の態様は，アプリケーションプログラムが通常のオブジェクトとしてアクセスするオブジェクトの内部状態をバイト列に保存することを最も主要な特徴とする。
【０００９】
より詳細には、Ｊａｖａ（登録商標）仮想マシンなどの上に搭載されているアプリケーションプログラムが、オブジェクトの内部状態を操作するためのアクセサメソッド経由でオブジェクトにアクセス可能であり、そのオブジェクトの内部状態がバイト列にマッピングされ，そのままの形で外部装置に転送手段によって送出される。
【００１０】
本発明の第１の態様において、アプリケーションプログラムからの新規オブジェクトの生成要求に従って，その新規オブジェクトの内部状態をバイト列上に確保して新規オブジェクトの内部状態とバイト列とのマッピングをとり、このマッピングに関するマッピング情報をマッピング管理テーブルなどに保持するようにしても良い。
【００１１】
本発明の第１の態様において、生成されたオブジェクトに対してアプリケーションプログラムが内部状態へのアクセスを行ったときに，マッピング管理テーブルなどに格納されたマッピング情報に従って，マッピングされたバイト列に対してそのオブジェクトの内部状態を設定し又はマッピングされたバイト列からそのオブジェクトの内部状態を取得し，アプリケーションプログラムに結果を返却するようにしても良い。
【００１２】
本発明の第１の態様において、オブジェクトの内部状態が保持されたバイト列およびマッピング管理テーブルなどに格納されたマッピング情報をそのままの形で，他の情報処理装置へ転送するようにしても良い。
【００１３】
本発明の第１の態様において、生成されたオブジェクトがアプリケーションプログラムにより不要と判断され，Ｊａｖａ（登録商標）仮想マシンなどがそのオブジェクトに関するメモリ領域を解放しようとしたときに，同時にバイト列とオブジェクトのマッピングを解放し，マッピング管理テーブルなどに格納されたマッピング情報を更新するようにしても良い。
【００１４】
本発明の第１の態様において、ある情報処理装置の転送手段により転送されたバイト列およびマッピング情報から，他の情報処理装置上の復元手段がオブジェクトを復元し，復元されたオブジェクトに関する情報をアプリケーションプログラムに通知するようにしても良い。
【００１５】
本発明の第２の態様は、複数の情報処理装置間で共有するオブジェクトを他の情報処理装置に転送される転送対象として共有ヒープ領域上に配置し、転送手段が共有ヒープ領域を他の情報処理装置に転送することを特徴とする。
【００１６】
本発明の第２の態様において、転送対象クラスを予め指定しておき、アプリケーションプログラムからの新規オブジェクトの生成要求に従って、生成対象クラスが転送対象クラスに含まれるかどうかを判定し、生成対象クラスが転送対象クラスに含まれない場合はヒープ領域上にオブジェクトを生成し、生成対象クラスが転送対象クラスに含まれる場合は共有ヒープ領域上に共有オブジェクトを生成するようにしても良い。
【００１７】
本発明の第２の態様において、生成されたオブジェクトに対し、アプリケーションプログラムが内部状態への操作の指示を行ったときに、アプリケーションプログラムから与えられた操作対象のオブジェクトのアドレスに基づき、操作対象のオブジェクトが共有ヒープ領域内かどうかを判定するとともに指示された操作が内部状態の設定であるかどうか判定し、共有ヒープ領域内のオブジェクトに対する内部状態の設定指示である場合は、操作対象のオブジェクトが格納されている共有ヒープ領域上のブロックが更新されたことを示すフラグを立てるようにしても良い。
【００１８】
本発明の第２の態様において、オブジェクトの内部状態が保持された共有ヒープ領域全体を他の情報処理装置に転送するようにしても良い。
本発明の第２の態様において、対応するブロックが更新されたことを示すフラグが立っているブロックのみを他の情報処理装置へ転送するようにしても良い。
【００１９】
本発明の第２の態様において、ある情報処理装置から転送された共有ヒープ領域を、他の情報処理装置が受信してその内容を共有ヒープ領域として展開し、転送側の共有ヒープ領域のアドレスと受信側の共有ヒープ領域のアドレスの差を計算し、転送された共有ヒープ領域に含まれる共有オブジェクトのポインタが転送側の共有ヒープ領域内を指していた場合は上記アドレスの差に基づいてポインタを修正し、上記ポインタが転送側の共有ヒープ領域外を指していた場合は該ポインタをNULLにクリアすることで、共有オブジェクトを復元するようにしても良い。
【発明の効果】
【００２０】
本発明の第１の態様によれば，アプリケーションプログラムからは通常のオブジェクトとして操作可能であるが，実際はバイト列に内部状態がマッピングされたオブジェクトをアプリケーションプログラムに提供でき，オブジェクト状態の転送のためのオーバーヘッドを大きく削減することが可能となり，転送先においてもオブジェクトを復元することが可能となる。これにより，処理速度の低下を避けつつ信頼性の高い装置の提供が可能となる。
【００２１】
例えば、ある情報処理装置がサービスを継続できなくなった場合に他の情報処理装置がそのサービスを引き継ぐためには、オブジェクトの内部状態を他の情報処理装置へ転送しておく必要がある。転送処理はオブジェクトの内部状態が更新される度に行うのが理想的ではあるが、それでは負荷が非常に重くなるため現実的には一定期間毎に転送処理を行うことになる。本発明では、内部状態の転送のためのオーバーヘッドが大幅に削減されるため、他の処理を停滞させることなく、他の情報処理装置への内部状態の転送を従来よりも頻繁に行うことが可能となる。それゆえ、複数の情報処理装置間で内部状態を同期させる時間間隔を短くすることができ、その分、システム全体の信頼性を高めることができる。
【００２２】
本発明の第２の態様によれば、通常のオブジェクトとして操作可能な共有オブジェクトを格納でき、かつ、転送側の情報処理装置が直接転送可能で、かつ、復元側の情報処理装置で復元可能である共有ヒープ領域をアプリケーションプログラムに提供できる。したがって、オブジェクトの内部状態を他の情報処理装置に転送するためのオーバーヘッドを大きく削減することが可能となり、転送先においてもオブジェクトを復元することが可能となる。これにより、処理速度の低下を避けつつ信頼性の高い装置の提供が可能となる。
【００２３】
より詳細には、オブジェクトが複数の情報処理装置間で共有されるかどうかを判定して、複数の情報処理装置間で共有されるオブジェクトは共有オブジェクトとして共有ヒープ領域上に格納し、複数の情報処理装置間で共有されないオブジェクトはヒープ領域上に格納している。これにより、アプリケーションプログラムが，通常のオブジェクトと共有オブジェクトのそれぞれの内部状態を同様に操作可能となる。
【００２４】
また、アプリケーションプログラムからの新規オブジェクトの生成要求があった場合、生成対象クラスが予め指定された転送対象クラスに含まれる場合は共有ヒープ領域上に共有オブジェクトを生成することで、特定のクラスに属するオブジェクトだけを共有オブジェクトとして複数の情報処理装置間で共有することが可能となる。したがって、複数の情報処理装置間で同期をとるために必要となる転送データ量を削減することも可能となる。
【００２５】
また、オブジェクトの内部状態が保持された共有ヒープ領域全体を他の情報処理装置に転送する場合、共有ヒープ領域をそのまま他の情報処理装置に転送すれば良くなるため、転送のオーバーヘッドを少なくすることができる。
また、更新されたブロックのみを他の情報処理装置へ転送することで、転送されるデータ量を削減でき、送信側の情報処理装置における送信時間および受信側の情報処理装置における受信時間を短縮して、転送処理および受信処理におけるオーバーヘッドを低減することが可能となる。
【００２６】
また、転送されてきた共有ヒープ領域に含まれる共有オブジェクトのポインタが転送側の共有ヒープ領域内を指していた場合は転送側の共有ヒープ領域のアドレスと受信側の共有ヒープ領域のアドレスの差に基づいてポインタを修正し、上記ポインタが転送側の共有ヒープ領域外を指していた場合は該ポインタをNULLにクリアすることで、共有ヒープ領域が格納される領域を複数の情報処理装置間で一致させておく必要がなくなる。
【発明を実施するための最良の形態】
【００２７】
以下、図面を参照して本発明の各実施の形態について説明する。
〔第１の実施の形態〕
図１は，本発明の第１の実施の形態に係るシステム構成例を示す図である。送信装置１０は，Ｊａｖａ（登録商標）仮想マシンを搭載したコンピュータであり，オブジェクトの内部状態を転送する側の装置である。受信装置２０も，Ｊａｖａ（登録商標）仮想マシンを搭載したコンピュータであり，オブジェクトの内部状態を送信装置１０から受信し，受信した内部状態をもとにオブジェクトを復元する装置である。
【００２８】
送信装置１０におけるオブジェクト生成機能１０１は，アプリケーションプログラム１００からのオブジェクト生成指示により，オブジェクト１０２を生成するものである。このとき，オブジェクト生成機能１０１は，所定の転送用領域１０４に生成したオブジェクト１０２の内部状態をバイト列として配置し，新規オブジェクト１０２の内部状態とバイト列とのマッピングの情報をマッピング管理テーブル１０３に設定する。
【００２９】
アプリケーションプログラム１００がオブジェクト１０２の内部状態をアクセサメソッド経由でアクセスすると，マッピング管理テーブル１０３の情報に従ってマッピングされた転送用領域１０４中のバイト列に対し，そのオブジェクト１０２の内部状態の設定または取得が行われ，アプリケーションプログラム１００に返却される。なお、アクセサメソッドは、アプリケーションプログラム１００がオブジェクト１０２にアクセスするためにオブジェクト１０２が用意している一種のインタフェースであって、図示するには適していないため、図１ではアクセサメソッドを敢えて示していない。
【００３０】
転送機能１０５は，送信装置１０において生成されたオブジェクト１０２の状態の同期をとるために，受信装置２０へ状態の転送を定期的に行うものであり，転送用領域１０４中のバイト列およびマッピング管理テーブル１０３をそのままの形で受信装置２０へ送る。転送機能１０５は，一つのオブジェクトとして実装される。
【００３１】
受信装置２０における復元機能２０１は，転送機能１０５からのバイト列を受信装置２０内の転送用領域２０２に設定し，またマッピング管理テーブル１０３上のマッピングの情報を受信装置２０内のマッピング管理テーブル２０３に反映するものである。復元機能２０１は，受け取った転送用領域２０２のバイト列とマッピング管理テーブル２０３とから，各オブジェクトの内部状態を把握し，送信装置１０におけるオブジェクト１０２と同じ内部状態のオブジェクト２０４を復元する。復元機能２０１は，一つのオブジェクトとして実装される。
【００３２】
オブジェクト管理機能２０５は，復元機能２０１からのオブジェクト２０４の復元通知を受け，アプリケーションプログラム２０６にオブジェクトを復元したことを通知する。
【００３３】
以下，送信装置１０および受信装置２０における各部の機能をさらに詳しく説明する。
【００３４】
図２は，本発明を用いた場合の実施の形態として，オブジェクト生成の処理の例を示したものであり，図３は，オブジェクト生成の処理フローチャートである。以下，図２および図３に従って処理の流れを説明する。
【００３５】
［Ａ］オブジェクト生成指示
アプリケーションプログラム１００がオブジェクト生成機能１０１のオブジェクト生成メソッド（たとえば，ｃｒｅａｔｅＯｂｊｅｃｔ（）など）を呼び出すことにより，当該メソッドにより指定された対象オブジェクトのオブジェクト生成を指示する（ステップＳ１）。
【００３６】
［Ｂ］マッピング取得
オブジェクト生成機能１０１は，オブジェクト生成指示に対し，生成対象オブジェクトの内部状態と転送用領域１０４であるバイト列とのマッピングをとる。そのため，オブジェクト生成機能１０１は、生成対象オブジェクトの内部状態の数およびそれぞれの型を判定し，必要なサイズを判定し，マッピング管理テーブル１０３から必要なサイズ分の空き領域を検索する（ステップＳ２）。その後，オブジェクト生成機能１０１はマッピング管理テーブル１０３にそれぞれの内部状態のバイト列上の位置を記録する。すなわち，オブジェクト生成機能１０１は、マッピング管理テーブル１０３の空き領域のレコードに生成オブジェクトに関する情報を設定することで領域を確保する（ステップＳ３）。
【００３７】
［Ｃ］オブジェクト生成
続いて，オブジェクト生成機能１０１は，オブジェクトを生成し，上記［Ｂ］で保存したマッピング管理テーブル１０３の情報を設定する。すなわち，オブジェクト生成機能１０１は、生成したオブジェクトに，内部状態の転送用領域１０４上の位置を設定する（ステップＳ４）。
【００３８】
［Ｄ］オブジェクトリファレンス返却
その後，オブジェクト生成機能１０１は，アプリケーションプログラム１００にオブジェクトリファレンスを返却する（ステップＳ５）。アプリケーションプログラム１００は，オブジェクト生成機能１０１からオブジェクトリファレンスを受け取る（ステップＳ６）。オブジェクトリファレンスは，オブジェクトの受け渡しを行うためのものであって、オブジェクトの格納位置を直接参照するポインタで実現することができる。あるいは、オブジェクトの格納位置を直接参照するポインタをエントリとするテーブルを作成し、オブジェクトリファレンスがこのテーブル上のいずれかのエントリを指すようにすることで、オブジェクトリファレンスがオブジェクトの格納位置を間接的に参照するようにしても良い。ここでは，アプリケーションプログラム１００がオブジェクト生成機能１０１にオブジェクトの生成を要求したときに，オブジェクト生成機能１０１が生成したオブジェクトをアプリケーションプログラム１００に受け渡すために，オブジェクトリファレンスを返却する。
【００３９】
図４は，本発明を用いた場合の実施の形態として，オブジェクトへの操作の処理の例を示したものであり，図５は，オブジェクトへの操作の処理フローチャートである。以下，図４および図５に従って処理の流れを説明する。
【００４０】
［Ａ］オブジェクト操作指示
アプリケーションプログラム１００がオブジェクト１０２のアクセサメソッド（例えば，ｓｅｔＡｔｔｒｉｂｕｔｅ（），ｇｅｔＡｔｔｒｉｂｕｔｅ（）など）を呼び出すことにより，オブジェクトの内部状態への操作，すなわち内部状態の設定または取得を指示する（ステップＳ１０）。
【００４１】
［Ｂ］オブジェクト内部状態設定又は取得
オブジェクト１０２のアクセサメソッドは，オブジェクト生成時にオブジェクト１０２に設定されたオブジェクト内部状態のバイト列へのマッピング情報に基づき，転送用領域１０４であるバイト列にアクセスし，内部状態の設定又は取得を行う（ステップＳ１１）。
【００４２】
［Ｃ］オブジェクト内部状態設定又は取得の結果返却
オブジェクト１０２はアプリケーションプログラム１００に設定又は取得の結果を返却する。特に，取得の場合，オブジェクト１０２は内部状態をアプリケーションプログラム１００に返却する（ステップＳ１２）。アプリケーションプログラム１００は，結果を受け取る（ステップＳ１３）。
【００４３】
図６は，本発明を用いた場合の実施の形態として，オブジェクトの転送および復元の例を示したものであり，図７は，オブジェクトの転送および復元の処理フローチャートである。以下，図６および図７に従って処理の流れを説明する。
【００４４】
［Ａ］バイト列およびマッピング管理テーブル取得
転送機能１０５は，例えば送信装置１０におけるオブジェクト状態を受信装置２０に転送するために，定期的に転送処理を開始し，転送用領域１０４であるバイト列およびマッピング管理テーブル１０３の情報を取得する（ステップＳ２０）。
【００４５】
［Ｂ］データ転送
転送機能１０５は，取得した情報を他ホストである受信装置２０の復元機能２０１に転送する（ステップＳ２１）。
【００４６】
［Ｃ］バイト列及びマッピング管理テーブル復元
復元機能２０１は，オブジェクトの内部状態を示すバイト列とマッピング管理テーブル１０３の情報を送信装置１０から受信し（ステップＳ２２），それらを転送用領域２０２とマッピング管理テーブル２０３に設定して復元する（ステップＳ２３）。
【００４７】
［Ｄ］オブジェクト復元
続いて復元機能２０１は，マッピング管理テーブル２０３から，転送されたオブジェクトの種類及び内部状態の転送用領域２０２上の位置を取得し（ステップＳ２４），マッピング管理テーブル２０３の情報に基づいて，オブジェクト２０４を復元する。次いで、復元機能２０１は、復元したそれぞれのオブジェクト２０４に対し，マッピング管理テーブル２０３の情報（内部状態の転送用領域２０２上の位置など）を設定する（ステップＳ２５）。
【００４８】
［Ｅ］オブジェクト復元通知
復元機能２０１は，復元したオブジェクト２０４のリファレンスを配列にして，オブジェクト管理機能２０５に通知する（ステップＳ２６）。オブジェクト管理機能２０５は，オブジェクト２０４のリファレンスの配列を受け取り（ステップＳ２７），事前に登録されたアプリケーションプログラム２０６に，復元された情報としてその配列のリファレンスを通知する（ステップＳ２８）。その後，必要ならアプリケーションプログラム２０６が復元の後処理を行う。
【００４９】
図８は，本発明を用いた場合の実施の形態として，オブジェクト消去の処理を示したものであり，図９は，そのオブジェクト消去の処理フローチャートである。以下，図８および図９に従って処理の流れを説明する。
【００５０】
［Ａ］オブジェクト解放指示
アプリケーションプログラム１００は，オブジェクトが不要になったときに対象オブジェクトの解放メソッドを呼び出すことにより，対象オブジェクト１０２に解放指示をする（ステップＳ３０）。
【００５１】
［Ｂ］マッピング情報クリア
対象オブジェクト１０２は，解放指示を受けると，オブジェクト生成機能１０１に消去を指示する（ステップＳ３１）。オブジェクト生成機能１０１は，オブジェクト１０２からの消去の指示により，マッピング管理テーブル１０３のオブジェクト１０２に対するレコードを空き領域とし，マッピング情報をクリアする（ステップＳ３２）。アプリケーションプログラム１００は，解放指示を行ったオブジェクトに係るオブジェクトリファレンスを消去する（ステップＳ３３）。
【００５２】
図１０は，受信装置２０において転送用領域２０２であるバイト列とマッピング管理テーブル２０３のマッピング情報からオブジェクトを復元する方式を説明する図である。
【００５３】
受信装置２０の復元機能２０１は，送信装置１０の転送機能１０５から定期的に転送用領域１０４であるバイト列とマッピング管理テーブル１０３のマッピング情報とを受け取り，転送用領域２０２とマッピング管理テーブル２０３に設定する。マッピング管理テーブル２０３に設定されるマッピング情報は，オブジェクト名ＯＢＪ１及びＯＢＪ２やそれらの各内部状態ａ及びｂの転送用領域（バイト列）２０２上の位置である。
【００５４】
復元機能２０１は，オブジェクト名ＯＢＪ１及びＯＢＪ２の内部状態の型や数の情報を，あらかじめ用意されているオブジェクトのクラスファイル２０７から取得し，マッピング管理テーブル２０３に設定された各オブジェクトの内部状態と転送用領域２０２とのマッピング情報とから，オブジェクトの各内部状態の転送用領域２０２上の位置を復元することにより，オブジェクト２０４を再生する。これによって，送信装置１０におけるオブジェクト１０２の状態と同じ状態を持つオブジェクト２０４が，受信装置２０において再現されることになる。
【００５５】
以上説明した第１の実施の形態では，送信装置１０に転送用領域１０４が一つ，また受信装置２０に転送用領域２０２が一つ設けられる例を説明したが，それぞれ複数の転送用領域を保持する実施も可能である。転送用領域が複数存在する場合には，あらかじめ定められたオブジェクト群ごとに，グループ識別情報などを付与して転送用領域を使い分けることになる。
【００５６】
また、上述した説明ではマッピング情報をマッピング管理テーブル１０３及びマッピング管理テーブル２０３にまとめて格納していたが、マッピング情報を各オブジェクトに対応させて分散して格納するようにしても良い。図１１はこの場合のシステム構成例を示したブロック図であって、図１に示したものと同じ構成要素については同一の符号を付しておりその説明を省略する。
【００５７】
図１１では図１のマッピング管理テーブル１０３及び２０３に記憶されていたマッピング情報をそれぞれマッピングデータ１０８及び２０８として個々のオブジェクト１０２及び２０４に対応させて配置している。具体的には、図２に示したマッピング情報のうちのオブジェクトＯＢＪ１に関する内部状態ａ及びｂのデータを当該オブジェクトＯＢＪ１に対応するオブジェクト１０２とともに格納する。同様に、図２に示したマッピング情報のうちのオブジェクトＯＢＪ２に関する内部状態ａ及びｂのデータを当該オブジェクトＯＢＪ２に対応するオブジェクト１０２とともに格納する。なお、図１１に示したシステムの動作は、図１〜図１０を参照して説明した前述の動作と同じであって、マッピング管理テーブル１０３及び２０３がアクセスされる代わりに個々のオブジェクトに対応して格納されるマッピングデータ１０８及び２０８がアクセスされる点が相違する。
【００５８】
〔第２の実施の形態〕
図１２は、本発明の第２の実施の形態に係るシステム構成例を示す図である。送信装置３０及び受信装置４０はそれぞれ第１の実施の形態における送信装置１０及び受信装置２０に対応している。そこで、本実施の形態では、第１の実施の形態で参照した図面中のものと同一の構成要素については同一の参照符号を付けてその説明を省略する。
【００５９】
オブジェクト３０２はホスト間で共有の対象とならない各ホストに固有のオブジェクトである。これに対して、共有オブジェクト３１０はホスト間で共有されるオブジェクトであって、ホスト間での転送対象となるオブジェクトでもある。
ヒープ領域３１１はオブジェクト３０２が格納される領域であり、共有ヒープ領域３１２は共有オブジェクト３１０が格納される領域である。なお、ヒープ領域３１１及び共有ヒープ領域３１２のデータ構造の具体例については図１５を参照して後述する。
【００６０】
転送対象クラスデータベース（ＤＢ）３１３はホスト間で共有される転送対象のクラスに関する情報が記憶されるデータベースである。なお、転送対象クラスＤＢ３１３の具体的な構造例については図１３を参照して後述する。
転送対象クラスリスト３１４はユーザから送信装置３０に与えられるデータであって、この転送対象クラスリスト３１４で指定されたクラス名にそれぞれクラス番号が付与されて転送対象クラスＤＢ３１３に格納される。
【００６１】
オブジェクト生成機能３０１は第１の実施の形態におけるオブジェクト生成機能１０１に対応するものであって、詳細については後述するが主たる機能は次の通りである。オブジェクト生成機能３０１は、ユーザから入力された転送対象クラスリスト３１４を転送対象クラスＤＢ３１３に設定する。また、オブジェクト生成機能３０１は、アプリケーションプログラム１００からオブジェクト生成が指示されると、転送対象クラスＤＢ３１３を検索して生成対象クラスが転送対象として指定されているかどうか判別し、得られた判別結果に応じてオブジェクトをヒープ領域３１１上または共有ヒープ領域３１２上に生成する。さらに、オブジェクト生成機能３０１は、アプリケーションプログラム１００からオブジェクト操作（オブジェクト状態の設定または取得）が指示されると、操作対象のオブジェクトが共有ヒープ領域３１２上にあるかどうか判別し、得られた判別結果に応じてヒープ領域３１１上のオブジェクト３０２または共有ヒープ領域３１２上の共有オブジェクト３１０を操作して、操作結果をアプリケーションプログラム１００に返す。
【００６２】
転送機能３０５は第１の実施の形態における転送機能１０５に対応するものであって、共有ヒープ領域３１２の全領域，もしくは，更新されたオブジェクトが含まれた共有ヒープ領域３１２の一部の領域を受信装置４０へ定期的に転送する。
【００６３】
復元機能４０１は第１の実施の形態における復元機能２０１に対応するものであって、送信装置３０から受信した共有ヒープ領域３１２の全領域または一部の領域を共有ヒープ領域４１２上に展開して、送信装置３０における共有オブジェクト３１０と同じ状態の共有オブジェクト４１０を共有ヒープ領域４１２上に生成する。また、復元機能４０１は復元した共有オブジェクト４１０に関する情報をオブジェクト管理機能４０５に通知する。
【００６４】
オブジェクト管理機能４０５は送信装置３０側におけるオブジェクト生成機能３０１と同等の機能を備えるほか、復元された共有オブジェクト４１０に関する情報を復元機能４０１から受け取ってこの情報のリファレンスをアプリケーションプログラム２０６に通知する。
【００６５】
オブジェクト４０２，ヒープ領域４１１，転送対象クラスＤＢ４１３，転送対象クラスリスト４１４はそれぞれ送信装置３０側におけるオブジェクト３０２，ヒープ領域３１１，転送対象クラスＤＢ３１３，転送対象クラスリスト３１４と同様のものである。
【００６６】
図１３は，本発明を用いた場合の実施の形態として，転送対象クラスの指定方法の処理の例を示したものであり、図１４は転送対象クラスの指定方法の処理フローチャートである。
【００６７】
ここで、図１３は転送対象クラスＤＢ３１３の構造の具体例を示している。転送対象クラスＤＢ３１３は、ホスト間で転送対象となるクラスのクラス名と、転送対象クラス指定時にオブジェクト生成機能３０１から当該クラス名に対して与えられるクラス番号とが対にして格納される。
【００６８】
以下、図１３および図１４に従って処理の流れを説明する。
【００６９】
［Ａ］転送対象クラスリスト読込
仮想マシンを搭載した送信装置３０が起動されると、オブジェクト生成機能３０１は、ユーザより与えられた転送対象クラスリスト３１４を読み込む。同様に、仮想マシンを搭載した受信装置４０が起動されると、オブジェクト管理機能４０５は、ユーザより与えられた転送対象クラスリスト４１４を読み込む（ステップＳ５１）。
【００７０】
［Ｂ］転送対象クラスＤＢへの転送対象クラスリストの保存
オブジェクト生成機能３０１は読み込んだ転送対象クラスリスト３１４を転送対象クラスＤＢ３１３に保存する。同様に、オブジェクト管理機能４０５は読み込んだ転送対象クラスリスト４１４を転送対象クラスＤＢ４１３に保存する。その際、オブジェクト生成機能３０１及びオブジェクト管理機能４０５はそれぞれ転送対象クラスリスト３１４及び４１４で指定された個々のクラス名に対して一意のクラス番号を付与する（ステップＳ５２）。
【００７１】
図１５は，本発明を用いた場合の実施の形態として，オブジェクト生成の処理の例を示したものであり、図１６はオブジェクト生成の処理フローチャートである。
【００７２】
ここで、図１５はヒープ領域３１１および共有ヒープ領域３１２の構造の具体例を示している。
【００７３】
ヒープ領域３１１は、個々のオブジェクト３０２の状態を示すオブジェクト状態情報３２０のみがオブジェクト毎に保存されている。これに対して共有ヒープ領域３１２は、ひとつのヘッダ３５０と複数のブロック３５１から構成される。なお、個々のブロック３５１はいずれも同一の構造であるため、図１５では代表してブロック１について詳細な構造を示してある。
【００７４】
ヘッダ３５０は、ヘッダ／ブロック種別３６０、ブロック数３６１、ブロックサイズ３６２、領域の先頭アドレス３６３、ブロック更新フラグ３６４から構成される。ヘッダ／ブロック種別３６０には自身に続く領域がヘッダ３５０かブロック３５１かを示すためのデータ（固定値）が格納されている。ブロック数３６１は共有ヒープ領域３１２が含むブロックの個数を示している。なお、本実施の形態では説明を簡単にするためにブロック数３６１として固定値が格納される（すなわち、共有ヒープ領域３１２の大きさが不変）ものとするが、これに限定されるものではない。ブロックサイズ３６２は個々のブロック３５１の大きさを示している。なお、本実施の形態では説明を簡単にするためにブロック３５１の大きさが全て同一であるものとするが、これに限定されるものではない。領域の先頭アドレス３６３には共有ヒープ領域３１２の先頭アドレスが格納されている。すなわち、送信装置３０側では共有ヒープ領域３１２の先頭アドレスが領域の先頭アドレス３６３に格納され、受信装置４０側では共有ヒープ領域４１２の先頭アドレスが領域の先頭アドレス３６３に格納される。ブロック更新フラグ３６４は、ヘッダ３５０及び各ブロック３５１に対応して設けられたフラグの集合であって、それぞれのフラグは対応する領域（ヘッダ３５０又は個々のブロック３５１）が更新されているか否かを示す。
【００７５】
各ブロック３５１は、先頭にヘッダ／ブロック種別３７０及びブロック番号３７１があり、これらに続いて各オブジェクトの情報（以下、オブジェクト情報という）がオブジェクト毎に保持される。ヘッダ／ブロック種別３７０には、ヘッダ／ブロック種別３６０と同様に、自身に続く領域がヘッダ３５０かブロック３５１かを示すためのデータ（固定値）が格納されている。当然ながら、ヘッダ／ブロック種別３７０に格納される固定値はヘッダ／ブロック種別３６０に格納される固定値とは異なる値に設定されている。ブロック番号３７１は各ブロックに割当てられた一意の番号を示す。
【００７６】
各オブジェクト情報は、次オブジェクトへのオフセット３７２、クラス番号３７３、オブジェクト状態情報３７４から構成される。次オブジェクトへのオフセット３７２は各オブジェクトのサイズを示しており、各オブジェクトに関するオブジェクト情報の先頭アドレス（すなわち、次オブジェクトへのオフセット３７２が格納されている位置）に次オブジェクトへのオフセット３７２を加えることで、次のオブジェクトに関するオブジェクト情報の先頭アドレスを得ることができる。なお、各ブロックの最後のオブジェクトに関するオブジェクト情報に続くメモリ上には、次オブジェクトへのオフセット３７２に相当する領域に０が格納されており、これによってそのメモリ上にはオブジェクトが存在しないことが判定可能となる。クラス番号３７３は、各オブジェクトが属しているクラスに対して転送対象クラスの指定時に与えられたクラス番号（図１３を参照）が格納される。オブジェクト状態情報３７４にはヒープ領域３１１を構成するオブジェクト状態情報３２０と同様に各オブジェクトの状態が保持される。
【００７７】
以下、図１５及び図１６に従って処理の流れを説明する。
【００７８】
［Ａ］オブジェクト生成指示
アプリケーションプログラム１００はオブジェクト生成機能３０１ヘオブジェクト生成を指示する。一例として、生成対象クラスのクラス名がClass_Aである場合、new Class_Aというバイトコードによりオブジェクト生成機能３０１へオブジェクト生成を指示することができる（ステップＳ６１）。
【００７９】
［Ｂ］転送対象クラスか否かの確認
オブジェクト生成機能３０１は、転送対象クラスＤＢ３１３を検索（ステップＳ６２）し、生成対象クラスのクラス名が転送対象クラスＤＢ３１３に含まれているかどうかを確認する（ステップＳ６３）。生成対象クラスのクラス名が含まれている場合は［Ｃ］に進む。一方、生成対象クラスのクラス名が含まれていない場合は［Ｄ］に進む。
【００８０】
［Ｃ］共有ヒープ領域にオブジェクトを生成
オブジェクト生成機能３０１は生成対象クラスのオブジェクトを共有ヒープ領域３１２上に生成する（ステップＳ６４）。まず、オブジェクト生成機能３０１は共有ヒープ領域３１２上におけるオブジェクトの格納領域を決定する。すなわち、オブジェクト生成機能３０１は、各ブロック３５１内の次オブジェクトへのオフセット３７２を先頭のブロック（図１５に示す「ブロック１」）から順にたどってゆくことにより、各ブロック３５１における最後のオブジェクトに関するオブジェクト情報の次のアドレスを求め、このアドレスを生成対象のオブジェクトに関するオブジェクト情報の先頭アドレスとする。次に、オブジェクト生成機能３０１は、第１の実施の形態で説明したように、生成対象オブジェクトの内部状態の数およびそれぞれの型を判定することで生成対象のオブジェクトのサイズを求め、得られたサイズに基づいて次オブジェクトへのオフセット３７２を設定する。また、オブジェクト生成機能３０１は、生成対象クラスのクラス名に対応するクラス番号を転送対象クラスＤＢ３１３から取得してこれをクラス番号３７３として設定する。なお、生成対象のオブジェクトを格納するだけの空き領域が着目しているブロック３５１に残っていなければ、オブジェクト生成機能３０１は必要な空き領域を持ったブロックが見つかるまで同様のことを行ってゆく。この後、処理を［Ｅ］に進める。
【００８１】
［Ｄ］ヒープ領域にオブジェクトを生成
オブジェクト生成機能３０１は生成対象クラスのオブジェクトをヒープ領域３１１上に生成する（ステップＳ６５）。すなわち、オブジェクト生成機能３０１はヒープ領域３１１上においてオブジェクト状態情報３２０の領域を新たに１個確保する。この後、処理を［Ｅ］に進める。
【００８２】
［Ｅ］オブジェクトリファレンス返却
第１の実施の形態と同様に、オブジェクト生成機能３０１はアプリケーションプログラム１００にオブジェクトリファレンスを返却する（ステップＳ６６）。アプリケーションプログラム１００は、オブジェクト生成機能３０１からオブジェクトリファレンスを受け取る（ステップＳ６７）。
【００８３】
図１７は，本発明を用いた場合の実施の形態として，オブジェクト操作の処理の例を示したものであり、図１８はオブジェクト操作の処理フローチャートである。以下、図１７および図１８に従って処理の流れを説明する。
【００８４】
［Ａ］オブジェクト操作指示
アプリケーションプログラム１００がオブジェクト生成機能３０１へオブジェクト操作を指示する（たとえば、オブジェクトＯＢＪ１の内部状態ａをインクリメントする操作）。同時に、アプリケーションプログラム１００は操作対象のオブジェクトのアドレスをオブジェクト生成機能３０１に伝える（ステップＳ７１）。
【００８５】
［Ｂ］対象オブジェクトのアドレスが共有ヒープ領域内かどうかのチェック
オブジェクト生成機能３０１は操作対象のオブジェクトのアドレスが共有ヒープ領域３１２内かどうかをチェックする（ステップＳ７２）。共有ヒープ領域３１２の外である場合は［Ｃ］に進み、共有ヒープ領域３１２の内である場合は［Ｄ］に進む。
【００８６】
［Ｃ］オブジェクトの操作
オブジェクト生成機能３０１は、操作対象のオブジェクトのアドレスに基づき、アプリケーションプログラム１００からの指示通りに、ヒープ領域３１１上にある操作対象のオブジェクト３０２に対応するオブジェクト状態情報３２０に対して操作を実施する（ステップＳ７３）。この後、処理を［Ｅ］に進める。
【００８７】
［Ｄ］オブジェクトの操作およびブロック更新フラグの設定
オブジェクト生成機能３０１は、操作対象のオブジェクトのアドレスに基づき、アプリケーションプログラム１００からの指示通りに、共有ヒープ領域３１２上にある操作対象の共有オブジェクト３１０に対応するオブジェクト情報内のオブジェクト状態情報３７４に対して操作を実施する（ステップＳ７４）。次に、オブジェクト生成機能３０１は、操作対象となる共有オブジェクト３１０が存在する共有ヒープ領域３１２上のブロック番号を計算する。ここで、対象となる共有オブジェクトの存在するアドレスをｘ, 共有ヒープ領域３１２の先頭アドレス（すなわち、最初のブロック３５１の先頭アドレス）をｙ, ブロックサイズ３６２を２ｎ  とすると、ブロック番号＝（ｘ−ｙ）＞＞ｎで計算される。
なお、“＞＞ｎ”はｎビット分の右シフト演算を表す。そして、オブジェクト生成機能３０１はオブジェクトに対する操作が状態の設定であれば、ブロック更新フラグ３６４を構成するフラグの集合のうち、計算されたブロック番号に対応するフラグを立てる。また、ブロック更新フラグ３６４が更新されたことはヘッダ３５０の内容が設定されたことを意味するので、オブジェクト生成機能３０１はさらに、ブロック更新フラグ３６４を構成するフラグの集合のうち、ヘッダ３５０に対応するフラグを立てる（ステップＳ７５）。この後、処理を［Ｅ］に進める。
【００８８】
［Ｅ］オブジェクト操作結果の通知
オブジェクト生成機能３０１はアプリケーションプログラム１００にオブジェクト操作の結果を返却する。特に、オブジェクトに対する操作が状態の取得の場合、オブジェクト生成機能３０１は操作対象となったオブジェクトの内部状態をアプリケーションプログラム１００に返却する（ステップＳ７６）。アプリケーションプログラム１００はこのオブジェクトの内部状態を受け取る（ステップＳ７７）。
【００８９】
図１９は，本発明を用いた場合の実施の形態として，共有ヒープ領域３１２を対象としたオブジェクトの転送及び復元処理を示したものであり、図２０はオブジェクトの転送及び復元の処理フローチャートである。以下、図１９および図２０に従って処理の流れを説明する。
【００９０】
［Ａ］共有ヒープ領域の転送指示
転送機能３０５は、周期的に転送処理を開始し、共有ヒープ領域３１２の先頭アドレスを取得する。
【００９１】
［Ｂ］共有ヒープ領域の転送
転送方式は全域転送と差分転送の２種類があり、いずれの転送方式に従って転送を行うかは送信装置３０の起動時にユーザが予め選択して送信装置３０に入力する。そして、転送機能３０５は転送方式を判別する（ステップＳ８１）。転送方式が全域転送の場合、転送機能３０５は共有ヒープ領域３１２を読み込んでその全体を受信装置４０の復元機能４０１に転送する（ステップＳ８２）。これに対して転送方式が差分転送の場合、転送機能３０５は共有ヒープ領域３１２のヘッダ３５０内のブロック更新フラグ３６４を参照し、フラグが立っているヘッダ３５０及び／又はブロック３５１を共有ヒープ領域３１２から読み込んで受信装置４０の復元機能４０１に転送し、転送を行ったヘッダ３５０及び／又はブロック３５１に対応するフラグをクリアする（ステップＳ８３）。
【００９２】
［Ｃ］共有ヒープ領域の復元
復元機能４０１は、送信装置３０から受信したデータを共有ヒープ領域４１２上に展開する（ステップＳ８４）。ここで、受信装置４０側では、送信装置３０側と共有ヒープ領域のアドレスが異なっている。そこで復元機能４０１は、共有ヒープ領域４１２のヘッダ３５０中の領域の先頭アドレス３６３を参照して共有ヒープ領域４１２の先頭アドレスを取得するとともに、共有ヒープ領域４１２上に展開された送信装置３０側のヘッダ３５０中の領域の先頭アドレス３６３を参照して共有ヒープ領域３１２の先頭アドレスを取得する。次に、復元機能４０１は両アドレスの差分を計算し、共有ヒープ領域４１２上に展開したデータ（具体的にはオブジェクト状態情報３７４において他のオブジェクトを指しているポインタ）の中で送信装置３０側の共有ヒープ領域３１２内を指すポインタを受信装置４０側のアドレス（すなわち、共有ヒープ領域４１２内）に修正する。また、復元機能４０１は、送信装置３０側で共有ヒープ領域３１２の外を指すポインタをNULLにクリアする（ステップＳ８５）。なお、ポインタが共有ヒープ領域３１２の外を指す場合とは、ポインタがヒープ領域３１１内を指す場合である。また、アプリケーションプログラム２０６は必要に応じてNULLにクリアされたポインタの後処理を行う。
【００９３】
［Ｄ］オブジェクト復元通知
復元機能４０１は、復元した共有オブジェクト４１０のリファレンスを配列にして，オブジェクト管理機能４０５に通知する（ステップＳ８６）。オブジェクト管理機能４０５はこのリファレンスの配列を受け取り、その配列のリファレンスを復元された情報としてアプリケーションプログラム２０６に通知する（ステップＳ８７）。その後，必要に応じてアプリケーションプログラム２０６は復元の後処理を行う。
【００９４】
なお、転送方式が全域転送の場合には、先に図１７及び図１８を参照して説明したオブジェクト操作の処理において、ブロック更新フラグの更新処理（図１８のステップＳ７５）を省略しても良い。
【００９５】
〔第３の実施の形態〕
図２１は，本発明の第３の実施の形態に係るシステム構成例を示す図であって，第１の実施の形態と第２の実施の形態を組み合わせたものである。このため、送信装置５０は送信装置１０及び送信装置３０の構成要素を備えており、受信装置６０は受信装置２０及び受信装置４０の構成要素を備えている。なお、図２１において、第１の実施の形態または第２の実施の形態で説明したものと同じ構成要素については同一の符号を付してその説明を省略する。
【００９６】
オブジェクト生成機能５０１は、第１の実施の形態におけるオブジェクト生成機能１０１と第２の実施の形態におけるオブジェクト生成機能３０１を合わせたものである。なお、オブジェクト生成機能５０１が第１の実施の形態に係る動作を行うのか第２の実施の形態に係る動作を行うのかは、アプリケーションプログラム１００がオブジェクト生成機能５０１に対して予め指定する。同様に、オブジェクト生成機能６０１は、第１の実施の形態におけるオブジェクト生成管理２０５と第２の実施の形態におけるオブジェクト管理機能４０５を合わせたものである。なお、オブジェクト管理機能６０１が第１の実施の形態に係る動作を行うのか第２の実施の形態に係る動作を行うのかは、アプリケーションプログラム２０６がオブジェクト管理機能６０１に対して予め指定する。このほか、第１の実施の形態で説明した転送対象となるオブジェクト１０２及び２０４はそれぞれヒープ領域３１１及び４１１に格納される。
【００９７】
以下に各処理について第１の実施の形態で説明したオブジェクト状態転送装置単独または第２の実施の形態で説明したオブジェクト状態転送装置単独との差分について説明する。
【００９８】
転送対象クラスの指定方法は第２の実施の形態のみにおける処理であり、図１３および図１４を用いて説明した処理の流れと同様である。
【００９９】
オブジェクトの生成及びオブジェクトへの操作は第１の実施の形態及び第２の実施の形態の両方に存在する処理であり、それぞれの実施の形態の流れに従う。
【０１００】
オブジェクトの転送及び復元処理は、第１の実施の形態及び第２の実施の形態の両方に存在する処理であり、それぞれの実施の形態の流れに従う。すなわち、転送機能３０５が予め選択された転送方式に従って共有ヒープ領域３１２の一部または全部を復元機能４０１に転送し、復元機能４０１がこれを受信して共有ヒープ領域４１２上に共有オブジェクト４１０を復元する。また、転送機能１０５が転送用領域１０４とマッピング管理テーブル１０３を復元機能２０１に転送し、復元機能２０１が転送用領域２０２とマッピング管理テーブル２０３を復元する。
【０１０１】
オブジェクトの消去処理は第１の実施の形態のみにおける処理であり、その処理は第１の実施の形態の流れに従う。
【０１０２】
なお、転送機能１０５と転送機能３０５を一つの転送機能にまとめるとともに、復元機能２０１と復元機能４０１を一つの復元機能にまとめることも可能である。この場合、送信装置５０から転送されてくるデータが第１の実施の形態に係るものであるか第２の実施の形態に係るものであるかを受信装置６０側で判別する必要がある。そこで、送信装置５０は受信装置６０にデータを転送する際にこのデータが第１の実施の形態に係るものであるか第２の実施の形態に係るものであるかを示す付加情報を併せて転送し、受信装置６０がこの付加情報に基づいて第１の実施の形態に係る動作または第２の実施の形態に係る動作を行う。
【０１０３】
以上の本発明の各実施の形態の処理は，コンピュータ（情報処理装置）とソフトウェアプログラムとによって実現することができ，そのプログラムは，コンピュータが読み取り可能な可搬媒体メモリ，半導体メモリ，ハードディスク等の適当な記録媒体に格納して，そこから読み出すことによりコンピュータに実行させることができる。
【０１０４】
また、各ホストは実際には送信装置として動作するとともに受信装置としても動作するため、実際には各ホストは送信装置としての構成要素および受信装置としての構成要素の双方を備えている。もっとも、ある瞬間では各ホストは送信装置または受信装置のいずれか一方として動作しているため、上述した各実施の形態では、送信装置として機能する１台のホストと受信装置として機能する１台のホストを示して説明を行った。
【図面の簡単な説明】
【０１０５】
【図１】本発明の第１の実施の形態に係るシステム構成例を示す図である。
【図２】第１の実施の形態におけるオブジェクト生成の処理の例を示す図である。
【図３】第１の実施の形態におけるオブジェクト生成の処理フローチャートである。
【図４】第１の実施の形態におけるオブジェクトへの操作の処理の例を示す図である。
【図５】第１の実施の形態におけるオブジェクトへの操作の処理フローチャートである。
【図６】第１の実施の形態におけるオブジェクトの転送および復元の例を示す図である。
【図７】第１の実施の形態におけるオブジェクトの転送および復元の処理フローチャートである。
【図８】第１の実施の形態におけるオブジェクト消去の処理を示す図である。
【図９】第１の実施の形態におけるオブジェクト消去の処理フローチャートである。
【図１０】第１の実施の形態におけるオブジェクトの復元方式を説明する図である。
【図１１】本発明の第１の実施の形態においてマッピング情報をオブジェクトに分散して記憶させた場合のシステム構成例を示す図である。
【図１２】本発明の第２の実施の形態に係るシステム構成例を示す図である。
【図１３】第２の実施の形態における転送対象クラス指定の処理の例を示す図である。
【図１４】第２の実施の形態における転送対象クラス指定の処理フローチャートである。
【図１５】第２の実施の形態におけるオブジェクト生成の処理の例を示す図である。
【図１６】第２の実施の形態におけるオブジェクト生成の処理フローチャートである。
【図１７】第２の実施の形態におけるオブジェクト操作の処理の例を示す図である。
【図１８】第２の実施の形態におけるオブジェクト操作の処理フローチャートである。
【図１９】第２の実施の形態におけるオブジェクト転送および復元の処理の例を示す図である。
【図２０】第２の実施の形態におけるオブジェクト転送および復元の処理フローチャートである。
【図２１】本発明の第３の実施例の形態に係るシステム構成例を示す図である。
【符号の説明】
【０１０６】
１０送信装置
１００  アプリケーションプログラム
１０１  オブジェクト生成機能
１０２  オブジェクト
１０３  マッピング管理テーブル
１０４  転送用領域（バイト列）
１０５  転送機能
１０８  マッピングデータ
２０  受信装置
２０１  復元機能
２０２  転送用領域（バイト列）
２０３  マッピング管理テーブル
２０４  オブジェクト
２０５  オブジェクト管理機能
２０６  アプリケーションプログラム
２０８  マッピングデータ
３０  送信装置
３０１  オブジェクト生成機能
３０２  オブジェクト
３０５  転送機能
３１０  共有オブジェクト
３１１  ヒープ領域
３１２  共有ヒープ領域
３１３  転送対象クラスＤＢ
３１４  転送対象クラスリスト
３２０，３７４  オブジェクト状態情報
３５０  ヘッダ
３５１  ブロック
３６０，３７０  ヘッダ／ブロック種別
３６１  ブロック数
３６２  ブロックサイズ
３６３  領域の先頭アドレス
３６４  ブロック更新フラグ
３７１  ブロック番号
３７２  次オブジェクトへのオフセット
３７３  クラス番号
４０  受信装置
４０１  復元機能
４０２  オブジェクト
４０５  オブジェクト管理機能
４１０  共有オブジェクト
４１１  ヒープ領域
４１２  共有ヒープ領域
４１３  転送対象クラスＤＢ
４１４  転送対象クラスリスト
５０  送信装置
５０１  オブジェクト生成機能
６０  受信装置
６０１  オブジェクト管理機能
【図１】
2006286013.tif 000003
【図２】
2006286013.tif 000004
【図３】
2006286013.tif 000005
【図４】
2006286013.tif 000006
【図５】
2006286013.tif 000007
【図６】
2006286013.tif 000008
【図７】
2006286013.tif 000009
【図８】
2006286013.tif 000010
【図９】
2006286013.tif 000011
【図１０】
2006286013.tif 000012
【図１１】
2006286013.tif 000013
【図１２】
2006286013.tif 000014
【図１３】
2006286013.tif 000015
【図１４】
2006286013.tif 000016
【図１５】
2006286013.tif 000017
【図１６】
2006286013.tif 000018
【図１７】
2006286013.tif 000019
【図１８】
2006286013.tif 000020
【図１９】
2006286013.tif 000021
【図２０】
2006286013.tif 000022
【図２１】
2006286013.tif 000023