8

メイン アプリケーションから別の JVM (java.exe) を実行しています。オブジェクト(かなり大きなオブジェクト)を新しく作成されたプロセスと共有する方法はありますか(作成時または作成後)。

someObject sO= new someObject();

//sO is populated

//Creating new process

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java  -cp " + tempDir +  jarsInPath  + " " + appMain);

ここで、sO オブジェクトを proc オブジェクトによって示されるプロセスで使用できるようにします。

ProcessBuilder は、この目的のためのユーティリティを提供していますか?

4

4 に答える 4

3

オブジェクトを共有する場合は、個別のプロセスではなくスレッドを使用するのが最善の方法です。プロセスはメモリを共有できないため(JNIを介する場合を除く)、ファイルまたはRMIソケット接続を介してシリアル化された形式でラージオブジェクトを前後にコピーする必要があります(後者の方が固有の同期をもたらすため、より適切なオプションです)。 。

于 2009-09-17T08:32:58.017 に答える
1

サービスを公開して、オブジェクトからのデータへのアクセスを許可できます。RMIを使用してプロセス間通信を設定するのは比較的簡単です。IPCオーバーヘッドが発生するため、これはローカルアクセスほどパフォーマンスが高くなく、きめ細かいアクセスはコストがかかりますが、要約データやその他の集約データを取得する場合、これは適切なモデルになる可能性があります。

これらが別々のプロセスである理由はわかりません。子プロセスのコードを親に直接ロードする機会はありますか?動的なロードとアンロードが可能です。

于 2009-09-17T08:32:43.297 に答える
0

この目的で分散キャッシュを使用できると思います(EHCache、memcachedなど...)

于 2009-09-17T10:12:49.580 に答える
0

いいえ、Java には共有メモリのサポートはありません。

これに取り組む最も簡単な方法は、オブジェクトを一時ファイルにシリアライズしてから、新しい JVM でデシリアライズすることです。

于 2009-09-17T08:27:10.613 に答える