5
public class MemoryLeakExample {
    public static void main(String[] args) {
        while (true) {
            System.gc();
        }
    }
}

このプログラムでどのようにメモリ リークが発生していますか? NETBEANS プロファイラーで監視している間、メモリーは徐々に増加しています。間違っている場合はガイドしてください。助けていただければ幸いです。 5 分前の USED HEAP SIZE は :2257416 後: 2258360

ありがとうございました。

4

2 に答える 2

11

私はこのコードを実行しました:

final Runtime rt = Runtime.getRuntime();
long before = System.currentTimeMillis();
while (true) {
  System.gc();
  long now = System.currentTimeMillis();
  if (now - before > 1000) {
    System.out.println(rt.totalMemory() + " " + rt.freeMemory());
    before = now;
  }
}

それが印刷する数値は完全に安定しています。あなたの場合、プロファイリングデータでメモリを占有しているのはプロファイラー自体です。

于 2012-11-22T13:47:19.277 に答える
5

NETBEANS プロファイラーで監視している間、メモリーは徐々に増加しています。

VisualVM プロファイラーは、メモリを使用してプロファイリングを行います。メモリ プロファイリングを実行すると、使用されているメモリがプロファイラーに送信されたオブジェクトであることがわかります。

YourKit などの商用プロファイラーを使用する場合、プロファイリング情報がネイティブ メモリに記録されるため、ヒープに影響を与えることはありません。

于 2012-11-22T13:54:45.363 に答える