关于垃圾回收,,如何理解。。请各位大大指教
下述代码中,执行完语句1后,b是否会被回收?
import java.util.*;
public class Stack
{
     private Object[] elements;
     private int size = 0;
     public Stack(int initialCapacity)
     {
         this.elements = new Object[initialCapacity];
     }
     public void push(Object e)
     {
         ensureCapacity();
         elements[size++] = e;
     }
     public Object pop()
     {
         if (size == 0)
             throw new EmptyStackException();
         return elements[--size];
     }     
     private void ensureCapacity()
     {
         if (elements.length == size)
         {
             Object[] oldElements = elements;
             elements = new Object[2 * elements.length + 1];
             System.arraycopy(oldElements, 0, elements, 0, size);
         }
     }
     public static void main(String[] args)
     {
         Stack stack=new Stack(10);
         Integer i=new Integer(10);
         stack.push(i);
         Object b=stack.pop();
         b=null;  /////////////////语句1        
     }
}        
A. 可以
B. 不可以
------解决方案--------------------楼主很高兴回答你的问题: java中对象的销毁 被java虚拟机视为垃圾的对象主要包括两种 一种对象引用超出其作用范围 2就是 给对象赋值null 就是你题目中的   值得注意一点是垃圾回收只能回收由new创建的对象。 而且虚拟机何时回收我们程序员也不知道
------解决方案-------------------- A 可以。 就是不确定垃圾回收器什么时候回收。  
出题人想迷惑人么?
------解决方案--------------------个人浅见:
不会回收. 题目中的b 只是指向elements对象数组的最后一个对象的引用。b=null语句只是让b不再指向那个对象了,但那个对象还在。(elements 还存在)。
比如:
Object a1,b1;
a1=new Object();    //a1 指向那个new出来的对象。
b1=a1;              //b1 也指向那个对象。
b1=null;            //b1不指向那个对象了,但a1还指向那个对象。所以对象不会回收。
------解决方案--------------------就想windows的消息循环,你要操作的消息命令发给windows,但是何时执行是无法确定,但是只要windows不死机消息最终会被执行。
------解决方案--------------------关键是问题里问b会不会回收,,个人理解它都不占内存,,回收啥。。
我也这么认为.
------解决方案--------------------