以前は常にJavaのサービスでカスタムオブジェクトを使用していましたが、バックエンドで常に実行し続けていました。ガベージコレクタによってオブジェクトが破棄されたために、NULL_POINTER_EXCEPTION
というトレースを含むバグレポートが表示されることがあります。私はすべてのハイエンドデバイスを持っているので、私はこれをテストすることができません静的な最終的なオブジェクトはガベージコレクタによって破壊されるかどうか?静的な最終オブジェクトはガベージコレクタによって削除されますか?
答えて
静的な最終オブジェクトはガベージコレクタによって削除されますか?
私はこれが起こる可能性が3つの状況を考えることができます。static
を持つクラスをロードしたクラスローダが到達不能になった
。しかし、これはの後に発生する可能性があります。あなたのコードは、オブジェクトがGC'dであることに気付くことのできないポイントに達しました!
を
static final
に割り当てるために何か「厄介な反射癖」が使用されました。 (はい、できます...)何かが微妙にヒープを破壊しています。例えばいくつかのバグのあるJNI/JNAコード。
注あなたは(明らかに)にGC'dされているオブジェクトの効果を観察しているので、それはははGC'dているクラスローダの直接の結果することができないこと。クラスローダーとfinal static
をGC'edできるようにするために何か他のことが起こっているはずです...もし実際にここで起こっているのであれば。
実際に、あなたの問題はGC関連ではないと思われます。むしろ、私はあなたのサービスが記録されていないチェックされていない例外のために死んでいると思われます。"main"以外のスレッドでキャッチされない例外のデフォルトの動作は、それらを黙って無視することです。
run()
メソッドのcatch
または "キャッチされない例外ハンドラ"のいずれかでサービススレッドがすべての例外を記録していることを確認することをお勧めします。
JVMはマークスイープGCアルゴリズムを使用します。これは、GCの "ルート"位置(現在のコールスタック内のすべてのオブジェクトと同様)のすべてのライブ参照を検査する必要があります。各ライブオブジェクトは生きていると「マークされています」、ライブオブジェクトによって参照されるオブジェクトには「生きている」とマークされます。
マークフェーズの完了後、GCはヒープをスイープし、マークされていないすべてのオブジェクトのメモリを解放します(残りのライブオブジェクトのメモリを圧縮します)。
「いいえ、最終的な改変者は、GCが作業負荷を軽減するのに役立たない」と言うつもりです。
通常のJavaアプリケーション(私はAndroidについてはわかりません)では、static final参照されたObjectは、適切なClassLoaderがアンロードされたときにのみGCedされます。
たとえば、コンテナ(Tomcatなど)に複数のWebアプリケーションを配置し、各WebアプリケーションをアンデプロイしてアプリケーションのClassLoaderをアンロードすると、アプリケーションのstatic final参照されたオブジェクトがGCedされます。しかし、他のClassLoader(他のweb-appのClassLoader、共通ClassLoader、boot-strap ClassLoaderなど)によってロードされたオブジェクトはGCされません。
あなたの質問に対する答えは、ClassLoaderが非アクティブ化されているかどうかによって異なります。
- 1. 静的メソッドによって設定されている最終的な静的変数をモックする方法はありますか?
- 2. F#のガベージコレクタによってオブジェクトが移動されないようにする
- 3. Mercurial最終的なブランチを削除
- 4. 最終的なバンドルからCSS定義が削除されました
- 5. セッションがガベージコレクタによって削除されているか確認してください
- 6. 静的メソッドによって返される値は静的ですか?
- 7. コンパイルプロセスのレキシカル分析フェーズでjavadocコメントが削除/削除されますか?あなたの最終的な.classファイルに含まれていますか?
- 8. 静的メンバーがHttpPostで削除されています
- 9. SpriteBatchのドローコールはXNAによって削除されますか?
- 10. 最終的な静的な文字列は、静的な最終的な文字列より効率的ですか?
- 11. C++:さまざまな静的および動的ポインタタイプを削除する
- 12. ファクトリによって返されるオブジェクトが静的である場合、ファクトリと見なされますか?
- 13. ガベージコレクタと静的クラス、変数
- 14. 最終的なprintlnから開始コドンを削除する
- 15. リフレクションによってJava静的最終変数値にアクセスする
- 16. Android Studio - 削除されたコードはまだ最終APKにありますか?
- 17. アクティブになってから自動的にクラスが削除されます
- 18. Netlogo BehaviorSpaceオプティマイゼーション - 中止された実行を削除する - 最終的なコマンド
- 19. 選択オプションは削除ボタンによって削除されます。プラグイン
- 20. 静的ライブラリの場合は、参照されていない静的オブジェクトは作成されませんか?
- 21. なぜ私は静的な最終変数を非静的なブロックで宣言していませんか?
- 22. 静的クラスはSwiftによってサポートされていますか?
- 23. Python asyncio:参照されていないタスクはガベージコレクタによって破棄されますか?
- 24. Swift - 静的なUITableViewで削除するスワイプ(削除ボタンなし)
- 25. 静的マップに動的に割り当てられたオブジェクト。削除は必要ですか?
- 26. 最終静的arraylist関数で変更されました
- 27. オブジェクトを削除するCoreDataGeneratedAccessorsが削除されていないようです
- 28. 最終(定数)インスタンス(非静的)変数は、クラス(静的)変数のように動作しますか?
- 29. FABは、ダイアログを開いて、recyclerviewで最終的に削除されたカードを再度追加します。
- 30. 最終的な前にすべての文字を削除する方法\
なぜC++とC#というタグがありますか? – nogard
Visual Basicタグを忘れました... –
"カスタムオブジェクトサービス"、 "ハイエンドデバイス" - これはどのプラットフォームですか?これは特にAndroid JVMですか? – Rup