Javaの開発を現役で5年ほどやって来ましたが、1つ勘違いしていたことがありました。 Javaでは循環参照してもメモリリークは発生しないのです。 すごく今更ですね。 確かに、Javaのメモリ解放は リファレンスカウンタ式ではない ため、前々から循環参照しないのでは?と思っていましたが、一応循環参照する部分はWeakリファレンスにしたり、Androidで言うなら破棄するタイミングでnullを入れたりしていました。 JavaのGCは ルートからたどっていってたどり着かなかったものを開放する ということは常に頭に入っていたので、循環参照しないのでは?と思いつつも、実際に答えを出さないままでした。 今更で当たり前かもしれないですが、実はこの事実を知らない人はいるのでは…? 実験 public class A { public final String message; public A ref;