是的!!每次都在判断p==null,死循环。

解决方案 »

  1.   

    没看到p的完整定义,那么假定你已经定义p是volatile。另外,没看到你什么地方把 p 设置为 null 了而且,你的代码好复杂,为啥不是:
    while(p != null) {
        Thread.sleep(xx);
    }最后:如果有另一个线程执行了 p = null,那么这个循环是可以结束的,注意要有volatile。
    回归正题,变量p和new Person()对象是两个不同的东西;如果p=null了,GC可以回收掉Person()对象;至于变量p自己占用的那点点地址空间什么时候被回收,那么要看变量p所属的对象其生命周期了;如果你定义的是 static,那你还能指望变量p被回收吗?
      

  2.   

    p是实例相关的,Java 在执行 p == null 这句时,存在 对 p 的调用(引用) 吗?假设 p 已不被其他任何变量引用, Java 会因为线程中 p == null 的执行造成 p还在被 引用(或调用) 吗?
      

  3.   

    假设 p 已不被其他任何变量引用, Java 会因为线程中 p == null 的执行造成 p还在被 引用(或调用) 而 无法回收 p 所占的内存?