0

私が働いている場所ではAppletContext.showDocument(URL)、ユーザーがアプレットであるアプリケーションからログオフするときにこのメソッドを使用して、目的のログオフJSPを提供します。ただし、何らかの理由でメソッドAppletContextを呼び出すだけでは取得できない場合を示すコードもあります。Applet.destroy()

シンクライアントアーキテクチャを使用しています。これは、基本的に、サーバーに接続されたダム端末の束があることを意味します。アプレットごとに1つずつ、数百とは言わないまでも数十のJVMインスタンスが実行されることが多いためです。

メソッド内で、destroy()取得したすべてのリソースを破棄してから、参照を取得してRuntime呼び出します。ただし、または同等の機能は実行さrunFinalization()gc()ません。System.exit()

質問

  1. リソースが解放され、同じWebページが表示されることは理解していますが、アプレットを実行していたJVMはどうなりますか?
  2. System.exit()最後にに呼び出しを追加するとdestroy()、シンクライアントサーバーで実行されている他のJVMはどうなりますか?
4

1 に答える 1

0

コンテキストとしては、ページがアクティブな間、ブラウザ(またはJavaプラグイン、あるいはその両方)がアプレットインスタンスにハングアップするため、これはすべて必要です。DOMから削除したり、他のトリックを試してそのメモリを解放したりしても、別のページに移動するまでアプレットインスタンスは保持されるため、destroy()で完全にクリーンアップする必要があります。どこかのネイティブコードで参照されていることを示すメモリプロファイリングを実行しました。

あなたの質問に答えるには:

  1. これは、Javaのバージョンによって異なります。Java 6アップデート10(次世代プラグインを使用)の時点で、一定期間後、アプレットが実行されていないと、Javaは自動的にシャットダウンします。このタイムアウトは、JVMの起動時間が過去1〜2年で減少したため、短くなっているように見えます。
  2. アプレット(署名されたものでさえ)が呼び出すことを許可されているとは思わないSystem.exit()。ただし、許可されている場合、最新のブラウザーでは、そのブラウザーのJVMのインスタンスを強制終了し、他のブラウザーは強制終了しません。以前は、ブラウザ全体をシャットダウンする可能性がありました:)

編集:

実際、回答1の話にはもっと多くのことがあります...それはOS Xを除いてどこでも当てはまります。OSXでは、次世代プラグインは6u27頃までデフォルトではありませんでした(10.6ではOS Xアップデート5ではJavaで、日から10.7でした) 1)。

于 2011-11-01T22:30:53.283 に答える