問題と解説は、こちらにあります。
http://www.geocities.jp/hyden0000/h.html
わからない個所は、解説の図解で、オブジェクトが互いに参照している
ところです。解説には、9、10行目の互いに参照しあっていると記述がありますが、
sm1.objは、sm2のポインタを代入しているのであって、
sm2.objと互いに参照しないように思います。
最終的に12行目を実行後に、sm1とsm2がobjを参照しなくなるため、
GCが実行されることはわかるのですが・・。いまいち、図解が
しっくりきません。すみませんが、どなたかアドバイスお願いします。
Javaにはポインターという概念がないんです。
だからポインターという概念で考えたら駄目です。
参照といってるように、参照という概念で考えないと理解できません。
図は正しいです。
-------------
ポインターっぽく考えると
Sample sm1 =new Sample(); //仮にsm01のアドレスが001
Sample sm2 =new Sample(); //仮にsm02のアドレスが002
sm1.obj=sm2; //sm1.objはアドレス002を参照
sm2.obj=sm1; //sm2.objはアドレス001を参照
------
sm1 =null ; //sm1のメモリー領域を開放しようとする
ここで、sm2.objがアドレス001を参照してるので、sm1の領域を開放しようとしても
出来ない。