memory-leaks - Tensorflow memory leak - Javaでメモリリークを起こすにはどうすればいいですか? #2

java メモリリークとは / java / memory

Read Question

18 revs, 14 users 33%



Answer #2

内部クラスの例を誰も使わなかったのは面白いと思いました。内部クラスがある場合、それは本質的に包含クラスへの参照を維持します。もちろん、最終的にはJavaがそれをクリーンアップするので、技術的にはメモリリークではありませんが、これによってクラスが予想以上に長く居座ることになります。

public class Example1 {
  public Example2 getNewExample2() {
    return this.new Example2();
  }
  public class Example2 {
    public Example2() {}
  }
}

ここで、Example1を呼び出して、Example1を破棄したExample2を取得しても、本質的にはExample1オブジェクトへのリンクが残っていることになります。

public class Referencer {
  public static Example2 GetAnExample2() {
    Example1 ex = new Example1();
    return ex.getNewExample2();
  }

  public static void main(String[] args) {
    Example2 ex = Referencer.GetAnExample2();
    // exが到達可能である限り; Example1は常にメモリに残ります。
  }
}