关于java的堆与栈
好像一般的说法是基本变量及引用变量是在栈中存放的,对象等在堆中保存 
 那么,加入我声明一个List,这个List的地址应该是在栈中保存的,那List中的对象的地址在栈中还是堆中保存? 
 1   如果在栈中,那么jvm怎么知道这个List的大小从而在栈中分配空间? 
 2   如果在堆中,那么就是一些引用类型存放在堆中了   
 List <Object>    list      地址为0x000001 
 栈                                                      堆 
 0x00001                              Object   o        
 还是 
 栈                                                                                                      堆 
 List <Object>    list   
 0x00001   
 Object   o 
------解决方案--------------------1你创建个list的引用不初始化不能加入其他对象,你的引用是对其他的list的引用的话所引的对象也是在堆中创建的 
 2list中存的是对象的地址,至于它是堆中还是栈中取决于对象本身而不是list 
 3仅代表个人观点,请高手指正 
------解决方案--------------------好像一般的说法是基本变量及引用变量是在栈中存放的,对象等在堆中保存   
 ----不知这句对不对 
------解决方案--------------------up
------解决方案--------------------这篇文章不错 
 http://www.blogcn.com/u/47/61/guiguzi629/blog/44733219.html
------解决方案--------------------这个问题建议LZ看下Inside the Java Virtual Machine(by Bill Venners) 
 在Java Virtual Machine内存分为method area,heap,java stacks,native method stacks,这个跟经典的unix内存分配方式是有些区别的,自己对Java Virtual Machine理解也不是很透彻,以lz的问题来说,如果这个list你是定义成static的属性,那么是在method area中,如果是非static的属性的话,是在heap中,如果是local变量,那么在他所属的thread的java stack中,如果调用C++的话,有可能在native method stack中,拙见!!!!
------解决方案--------------------to yuekun1172006(编编编): 
 int是基本类型,所以n是存放在栈中的。lz看看下面的例子就明白了: 
 public class A{ 
 int n = 0; 
 } 
 在引用这个类的地方: 
 public class Test{ 
   public static void main(String[] args){ 
     A a = new A(); 
     A b = new A(); 
     System.out.println(a.n == b.n); 
   } 
 } 
 结果是true;原因是n是int类型,属于基本类型,a.n和b.n所指向的都是相同的值 0,是放在栈中的。 
------解决方案--------------------mark  等下回来看
------解决方案--------------------去看看孙鑫老师的视频,讲的不错的