Javaで、私のアプリケーションがEJBとしてデプロイされた状態で、glassfishのようなアプリケーションサーバーで動作しているとき。 EJBをアンデプロイすると、メモリにロードされたsigletoneクラスがどうなりますか?私はそこに存在するコンテナを再起動してガベージコレクションを行うまでは理解していますが、いつどこで実行されるのかわからないので、ejbをもう一度デプロイすると、jvmの古いオブジェクトを取り戻すことができます ?アプリケーションが終了するとオブジェクトに何が起こるか
答えて
配備された各アプリケーションには、独自の別のクラスローダーがロードされます。クラスローダはクラスのアイデンティティの一部であるため、異なるインスタンスが互いに干渉することなく、同じクラスを複数回(異なるコンフィグレーションで)読み込むことができます。
これにより、アプリケーションサーバー内のさまざまなアプリケーションが互いに効果的に分離され、同じアプリケーションを2度並行して実行することもできます。
アプリケーションがアンデプロイされると、そのオブジェクトへの参照が残っていなければ、すべてのオブジェクト(クラスローダーを含むクラス自体)がガベージコレクトされます。残念ながら、参照は一部のシステムクラスに残り、ガベージコレクションを防止することができます。これはclassloader leakと呼ばれます。
ガベージコレクションは任意の時間に実行され、制御できません。 Javaのガベージコレクタは古いオブジェクトを再利用できますが、これは当てはまりません。配備を解除すると、シングルトンは破棄されます。展開すると、新しいものが作成されます。
ごめんなさいGCが古いオブジェクトを再利用できるということを理解できませんでした。私の質問は次のようなものだと思います。アプリケーションをアンデプロイするとシングルトンが破壊されることが予想されますが、何らかの理由でJVMが再起動されていないためシングルトンはJVMに残っています。そして、このsingletoneに送信された特定のコマンドがありませんでした。 –
- 1. アンドロイドスタジオからデバイスに起動すると、アプリケーションが終了する
- 2. アプリケーションが終了したときに通知からアクティビティを起動中にアプリケーションが終了する
- 3. アプリケーションが終了するとAndroidサービスが再起動する
- 4. このオブジェクトに何が起こるか
- 5. アプリケーションが終了するとアラームマネージャが起動しない
- 6. IntentServiceがリクエストされずにIntentServiceが終了した後にアプリケーションに何が起こるか
- 7. Android - アプリケーションが終了するとリモートサービスが終了する
- 8. Android、強制終了後に実際に何が起こるのですか?
- 9. UIテスト中に起動後にアプリケーションが終了する
- 10. プロセスが終了した後にAndroidアプリケーションを再起動する
- 11. branch.initSessionWithLaunchOptionsハンドラがアプリケーション終了時に起動する
- 12. アプリケーションが終了する(0)
- 13. アプリケーションが終了すると、DB接続はすぐに終了しますか?
- 14. アプリケーションが終了する前に終了するスレッドでCoUninitializeを呼び出すことは重要ですか?
- 15. アプリケーションが終了する前にソケットペアの終了を終了する必要がありますか?
- 16. アプリケーションが終了すると、Androidバックグラウンドサービスが再起動しています
- 17. アプリケーションを終了した後にサービスが終了する
- 18. JavaFXでのアプリケーションの起動と終了
- 19. 終了時にQtアプリケーションがクラッシュする
- 20. レイアウトがランドスケープになるとAndroidアプリケーションが終了する
- 21. 終了時にアプリケーションを終了する
- 22. アプリケーションが終了するとスレッドが停止しますか?
- 23. Appium:Ruby:シナリオごとにアプリケーションを終了して起動する
- 24. アンドロイド:アクティビティが終了した場合、再起動時に何が起こりますか?
- 25. アプリケーションは、アプリケーションの起動の終了時にルートビューコントローラを持つことが期待されますか?
- 26. Unixでプロセスを終了すると実際に何が起こっていますか?
- 27. アクティビティが終了するとプロセスが再起動されます
- 28. vb.netアプリケーションが終了する前に非同期タスクが完了することを確認する
- 29. RandomAccessFilesは、アプリケーションが終了するまで終了しません。
- 30. Xamarin Androidでアプリケーションを終了した後、バックグラウンドサービスが終了する
OKクラスローダーのリークを言うとき、それは既知の問題であることを意味しますか?アプリケーションはまだ展開されていませんが、 GC、そして一度私はもう一度アプリをデパイすると、私のシングルトンは再び作り直されるのではなく、再利用されるでしょうか? –
@Loner shushman:いいえ、クラスは再利用されません(再デプロイされたアプリケーションは新しいクラスローダーを取得します)。しかし、メモリを占有してしまい、最終的には多数の再デプロイメントの後にアプリケーションサーバーがメモリ不足になります。 –
OKだから、シングルトンであってもクラスは再利用されませんか?私が求めているのは、シングルトンクラスを持っているからです。彼らはまだJVMにいると信じており、シャットダウンメカニズムを使ってJVMからそれらをアンロードしていますが、オブジェクトは使用されていません –