質問

  1. メモリの使用量をサンプリングし、Pojoのインスタンスの数をカウントします。 Visual VMで「ゴミ収集」を押して、インスタンスがダウンしているのを見ることができる場合、それはメモリが漏れないことを意味しますか?

  2. JVMを強制する方法は、真夜中に毎日ごみ収集しますか? (VisualVMでGarbage Collectを自動的に押すのと同じように)? VisualVMのCPU使用法、GCは常に0%です。 -XMX -XMS 1024Mを設定しましたが、通常はメモリ使用量は約200MBです。これは、GCが必要なときにのみ行われるためですか?だからこそ、GC CPU時間の場合は常に0%

  3. 「フルGC」を行う前回の時間を確認する方法は?

役に立ちましたか?

解決

  1. いいえ、必ずしもそうではありません。本当に意味するのはそれだけです いくつかの オブジェクトの収集できます。たとえば、インスタンスカウントが常にGCの後にダウンしたが、以前と同じレベルにまったく下がっていない場合、まだゴミ漏れがある可能性があります。この「ベースライン」が時間の経過とともに増加した場合、時々記憶がなくなるでしょう。また、ネガティブを証明するのは非常に難しいので、アプリケーションにはメモリリークバグがある可能性がありますが、この特定の状況はそれを行使していません。
  2. 一つのことを明確にしましょう - JVMにゴミコレクションを実行させることは決してできません. 。あなたができる最善のことは電話です System.gc(), 、 これは ヒント JVMに、今すぐGCを実行したいと思うかもしれません。何もする必要はなく、そのメソッドのNO-OP実装は完全に有効です。基本的に、ガベージコレクションは「Just Doves」であり、特定の期待を置くことが少ないほど、より良いものになります。したがって、基本的には、はい、通常は必要なときにのみ実行されます。
  3. 繰り返しますが、これは通常、内部知識であり、詳細は使用しているガベージコレクターの実装によって異なります。ただし、SunのJVMの場合、コマンドライン引数を使用できます -verbose:gc 冗長なガベージコレクションの詳細をコンソールへの出力を取得するには。プログラムまたは視覚的に詳細を検査したい場合は、この情報がJMXを介して公開される可能性があります(つまり、 JMXリモートを使用するようにプロセスを設定します, 、そしてJConsoleでそれに接続します)。私にとって、Sunの1.5.0_06 JVMを使用して、java.lang.garbageCollectorにMbeanが表示され、最後の完全なGCの時間を含むいくつかの情報を公開しています。

他のヒント

  1. いいえ。アプリケーションがメモリリークフリーであるかどうかを判断する具体的な方法はありません。最良のことは、長期間にわたって浸漬テストを実行し、ライブヒープのサイズが安定していることを確認することです。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top