私のプログラムでヒープダンプを実行しました。私がメモリアナライザツールでそれを開いたとき、のjava.lang.ref.Finalizer
が大量のメモリを占めていることがわかりました。なぜこれはそうですか?はメモリリークですか?なぜjava.lang.ref.Finalizerはあまりにも多くのメモリを食べますか
答えて
いくつかのクラスはObject.finalize()
メソッドを実装します。このメソッドをオーバーライドするオブジェクトは、バックグラウンドスレッドコールファイナライザによって呼び出される必要があり、これが発生するまでクリーンアップすることはできません。これらのタスクが短く、これらのタスクの多くを破棄しないと、すべて正常に動作します。しかし、これらのオブジェクトやファイナライザの多くを作成するのに時間がかかる場合は、ファイナライズするオブジェクトのキューが構築されます。このキューはすべてのメモリを使い切ることができます。
ソリューションです
- あなたは(あなたがオブジェクトのクラスを記述している場合)ことができれば、あなたがそれを使用する必要がある場合
- は(非常に短い確定作るファイナライズ()Dオブジェクトを使用していません)
- は、そのようなオブジェクトを毎回破棄しない(
最後のオプションでは、既存のライブラリを使用しているとして、あなたのための最良である可能性が高い)、それらを再利用してみてください。
オプション#4 - ファイナライザを(オーバー)使用するライブラリの使用を避けてください。 –
オプション#1;のバリエーション) –
おそらく問題はFinalizerスレッドの原因です。 1つのクラスがfinalizeのメソッドをオーバーライドし、Finalizerスレッドのデッドロックを引き起こします – fuyou001
ProxoolはJDBC接続の接続プールです。これは、あなたのアプリケーションが接続プールを誤って使用しているという問題があることを私に示唆しています。ステートメントオブジェクトにclose
を呼び出す代わりに、あなたのコードがそれらを削除している可能性があります。 Proxoolはファイナライザを使用して、基本となるドライバ実装オブジェクトを閉じますが、これにはFinalizerインスタンスが必要です。また、オープン/クローズ(実際の)データベース接続を必要以上に頻繁に接続することもあり、パフォーマンスに悪影響を及ぼします。
リークされたResultSet、Statement、Connectionオブジェクトのコードをチェックして、finally
ブロックで閉じていることを確認することをお勧めします。
メモリダンプを見ると、898,527,228バイトがどこに行くのかが懸念されます。大部分は、IDが2aab07855e38
のFinalizerオブジェクトによって保持されます。ダンプファイルがまだ残っている場合はFinalizer
を参照してください。それはProxoolオブジェクトよりも問題に見えます。
ありがとう、しかし、私はJDBC接続のポーリングmemoyリークの原因を見つけることができません – fuyou001
私はあなたのソースコードが表示されない限り、どちらもできません。 (そして私はとにかくそれを通り抜けて私の時間を過ごす準備ができていない...) –
- 1. memory_get_usage()は1行のコードであまりにも多くのメモリを使用するのはなぜですか?
- 2. テキストエディタアプリケーションにメモリリークがありますか?メモ帳よりも3倍多くのメモリを消費するのはなぜですか?
- 3. なぜ私のジュリアプログラムはあまりにも多くのメモリを使用していますか?
- 4. なぜこのコードはあまりにも多くのメモリを必要としますか
- 5. なぜdebug_backtrace()はあまりにも多くのメモリを使用していますか?
- 6. なぜCocoaアプリはあまりにも多くのメモリを使用しますか?
- 7. mySQLインデックスは、あまりにも多くの行があまりにも多いですか?
- 8. なぜこのコードにはメモリリークがありますか?
- 9. なぜshell = Trueは私のサブプロセスを食べますか?
- 10. なぜCodeIgniterはあまりにも多くのデータをそのクッキーに保存しますか?
- 11. メモリリークはありますか?
- 12. メモリを食べるメモリとは何ですか
- 13. 繰り返しJSON解析がますます多くのメモリを消費するのはなぜですか?
- 14. 多くのアンチ・クッキーの動きはもうありますか?
- 15. は、あまりにも多くのメモリを使用しているmatlabのxmlreadですか?
- 16. トランザクションメモリをあまりにも多く求めていますか?
- 17. C++ Ifstreamはあまりにも多くの読み取りですか?
- 18. なぜMySQL(InnoDB)のパフォーマンスには多くのバリエーションがありますか?
- 19. なぜ新RelicはTomcatのメモリをたくさん食べているのですか?
- 20. なぜ多くのデータベース接続タイプがありますか?
- 21. なぜ多くのプログラミング言語がありますか?
- 22. なぜ複数のスレッドが自分のメモリを食べるのですか
- 23. これは私のRazor - Viewであまりにも多くのコードですか?
- 24. PHP GETリクエストにあまりにも多くの変数がありますか?
- 25. Javaアプリケーションではメモリリークはまったくありませんか?
- 26. 活性は、あまりにも多くのコードを示すことなく行
- 27. あまりにも多くのラッパークラス
- 28. あまりにも多くのテキストが
- 29. あまりにも多くのクエリー
- 30. なぜこの多型ではありませんか?
「画像」リンクは、あなたのツイッタープロファイルのように見えます。 –
@ R.MartinhoFernandesそれは彼がTwitterでホストしてきたイメージに行くと思う。 – Oliver