3

RMI 理論については 2 つの答えがあります。

1) 見てみましょう:

Service impl = new Service();

Service がリモート インターフェイスの実装であり、UniCastRemoteObject を拡張するとします。

(サーバー側)上記のコードでimplを作成してから呼び出す場合:

impl.f();

f() を実行するために、JVM はスタブを使用しますか? つまり、 f() はリモートメソッドとして呼び出されますか?

2) Distributed Garbage collection を探していました。リモート オブジェクトに関連付けられたカウンターがいつゼロになるかを確認する unreference メソッドを実装しました。正常に動作します。finalize メソッドも実装しましたが、これが呼び出されることはありません。理由を説明できますか? リモート参照 UnicastRemoteObject.unexportObject(impl,true); のバインドも解除しようとしました。しかし、ファイナライズは呼び出されません。

ありがとう

よろしく

4

2 に答える 2

1

1) いいえ、ローカルでリモート オブジェクトと通信する場合、これはスタブを経由しません。通常、スタブは、RMI レジストリからオブジェクトを取得する場合、または別のリモート呼び出しで参照を取得する場合にのみ挿入されます。

2) 使用されているアルゴリズムについてはよくわかりませんが、RMI には分散ガベージ コレクションがあり、未使用のオブジェクトを解放する必要があります。しかし、他のガベージ コレクションと同様に、参照カウントがゼロになっても、オブジェクトが自動的にガベージ コレクションされるわけではありません。これは通常、システムがメモリを解放する必要がある場合にのみ発生し、アプリケーションの存続期間中は発生しない可能性があります。

于 2013-07-14T17:41:25.847 に答える