6

私は非常に奇妙な問題を抱えています。私は Eclipse Equinox に基づく OSGi アプリケーションに取り組んでいます。これは OSGi Log Service (Equinox 実装) を使用して開発されたもので、現在、Apache Felix OSGi Log Service 実装でテストしています。

API/コード側では、すべて正常に動作します。OSGi ログ サービスは標準であるため、Equinox から Felix に問題なく交換できます。

ただし、この奇妙な動作を観察しました。アプリケーションをコンソール プログラムとして起動し、コンソールでログ出力を確認し、メモリ使用量を分析するために JVisualVM をアタッチしました。JVisualVM グラフは、80 MB の使用済みヒープを示しました。

13 時間後、平均ヒープ サイズが 220 MB に達したので、ヒープ ダンプを分析することにし、「ヒープ ダンプ」ボタンを押しました。この操作の後、JVisualVM グラフは 20(min)-35 の使用済みヒープを示しました。 (最大) MB (?!?!)、この値は一定でした。

「ヒープ ダンプ」操作で 200 mbs 近く解放できますか? はいの場合、なぜですか?

Equinox OSGi Log Service の実装でこの動作を見たことがないので、Felix Log がこの問題に関与していると思われます...

ありがとう

4

2 に答える 2

11

「ヒープ ダンプ」操作で 200 mbs 近く解放できますか? はいの場合、なぜですか?

はい、できます。私はコードを調べていませんが、2 番目の引数を true に設定してHotSpotDiagnosticMXBean.dumpHeapを呼び出していることは確かです (jconsole または JVisualVM の MBeans 拡張から呼び出す場合は、これがデフォルトです)。私の経験では、そうすると、ヒープをダンプする前に明示的な gc がトリガーされ、それがおそらく「なぜ?」に対する答えです。

于 2011-03-23T10:04:34.717 に答える
3

なぜあなたはGCにさえ悩まされているのですか? メモリが適切に解放されていれば、心配する必要はありません。しかし、ヒープが大きくなる原因を知りたい場合は (リークでなくても)、これを見てください: How can I take a heap dump on Java 5 without garbage collection first? .

于 2011-03-23T09:59:33.887 に答える