3
  1. i はメモリ使用量をサンプリングし、POJO のインスタンス数をカウントします。ビジュアル vm で「ガベージ コレクション」を押して、インスタンスがダウンしているのを確認できた場合、それはメモリ リークがないということですか?

  2. 真夜中に毎日jvmにガベージコレクションを強制する方法は?(visualvm で自動的にガベージ コレクションを押すのと同じように) ? visualvm の CPU 使用率が表示されます。gc は常に 0% です。私は -xmx -xms 1024m を設定しましたが、通常メモリ使用量は約 200MB です。これは、GC が必要な場合にのみ実行されるためですか? そのため、GC CPU 時間は常に 0% です。

  3. 「フルGC」を最後に行った時間を確認する方法は?

4

2 に答える 2

6
  1. いいえ、必ずしもそうではありません。つまり、オブジェクトの一部を収集できるということです。たとえば、インスタンス カウントが GC 後に常に減少したが、以前と同じレベルに達していない場合、ガベージ リークが発生する可能性があります。この「ベースライン」が時間の経過とともに増加すると、メモリが不足することがあります。また、否定的であることを証明するのは非常に難しいため、アプリケーションにメモリ リークのバグがある可能性がありますが、この特定の状況ではそれが実行されていません。
  2. 1 つはっきりさせておきます。JVM にガベージ コレクションを強制的に実行させることはできません。あなたができる最善の方法は call ですSystem.gc()。これは、JVM が今すぐ GC を実行する必要があるかもしれないというヒントです。何もする必要はなく、そのメソッドのノーオペレーション実装は完全に有効です。基本的に、ガベージ コレクションは「ただ発生する」ものであり、特定の期待を持たないほど良いものです。基本的に、はい、通常は必要なときにのみ実行されます。
  3. 繰り返しますが、これは通常内部の知識であり、詳細は使用しているガベージ コレクターの実装によって異なります。ただし、Sun の JVM の場合は、コマンドライン引数-verbose:gcを使用して、詳細なガベージ コレクションの詳細をコンソールに出力できます。詳細をプログラムまたは視覚的に調べたい場合、この情報は JMX 経由でも公開される可能性があります (つまり、 JMX リモーティングを使用するようにプロセスを設定し、JConsole でそれに接続します)。私の場合、Sun の 1.5.0_06 JVM を使用して、java.lang.GarbageCollector に、最後のフル GC の時刻を含むいくつかの情報を公開する MBean が表示されます。
于 2010-10-11T08:36:14.470 に答える
1
  1. いいえ。アプリケーションにメモリ リークがないかどうかを判断する具体的な方法はありません。最適な方法は、ソーク テストを長時間実行して、ライブ ヒープのサイズが安定していることを確認することです。

  2. メソッド呼び出しを使用してSystem.gc()、ガベージ コレクターを実行できます。

  3. GC が最後に実行された時間を取得するための API はないようですが、GarbageCollectorMXBeanは GC に関するいくつかの統計を提供できます。

于 2010-10-11T08:39:13.140 に答える