私は Java の初心者であり、NetBeans でこのメモリ プロファイル セッションを分析する方法と、それを監視してメモリ リークの検索を支援する方法を知りたいと考えています。
「ライブバイト」とは?すべてのライブ バイトを合計すると、Java アプリケーション システム メモリによって使用されるごく一部しか得られないことがわかります。各オブジェクト タイプの割り当てられたバイト数に関する情報がないのはなぜですか? 「割り当てられたオブジェクト」の値が増え続けているのは、メモリ リークの兆候ですか?
これは、多数の同時スレッドと http 接続を使用するアプリケーションです。スレッドを確認しましたが、問題なく動作しています。つまり、同時に 20 を超えるスレッドはありません。http 接続には JBOSS Netty を使用し、HTML の解析には jSoup を使用しました。
このメモリ リークは、割り当てられた ParseError オブジェクトが多すぎることが原因ですか? または、バイト作成スタック トレースでメモリ リークの理由を検索する必要がありますか?
その他のリソース:
編集:
プロジェクトに HTML Cleaner を追加しました。これにより、パーサー エラーが表示されなくなりました。メモリ リークの増加が約 3 ~ 4 倍遅くなりました。メモリ使用量が 800MB に達した後、アプリケーションがクラッシュし、NetBeans でヒープを監視できました。結果:
注: アプリで LinkedHashMap を作成していないため、他のライブラリで作成する必要があります。TagNode は、「HTML Cleaner」によるクリーニング後にクリーニングされた html を保持するオブジェクトです。私のアプリには TagNode オブジェクトが 1 つしかなく、これは netty http 応答ハンドラー (messageReceived によって呼び出される) のローカル変数です。