黑马程序员技术交流社区

标题: 关于内存的问题。 [打印本页]

作者: 龚振 龚振 龚振    时间: 2012-5-4 18:46
标题: 关于内存的问题。
想问一下:
1这段代码总共最后是有99个局部变量o还是1个o还是?
2最后这个内存图是如何指向的,一个o指向一个new Object();其他的new Object()没有指向吗?
3v.add(o)这个方法执行是内存图是如何画的??
有点复杂,不知道有人能解答下么?
  1. Vector v=new Vector(10);
  2. for (int i=1;i<100; i++){
  3. Object o=new Object();
  4. v.add(o);
  5. o=null;
  6. }
复制代码

作者: 云惟桉    时间: 2012-5-4 20:44
1.个人认为是一个局部变量o,因为在for循环中改变的只是o的指向,即地址,变量应该只有一个。
2.因为jvm的垃圾回收机制是动态的,因此,在没有任何引用指向Object对象时,对象会被回收,释放内存。
但是关键是这些Object对象都加入到集合中了,因此集合中存放了这些对象的引用(而不是对象的实体),因此我觉得最后这些Object对象的引用(指向)都以元素形式存放在集合中。
3.add方法如上所言,是把对应的Object对象的引用加入到集合中,堆内存存放着对象实体,而集合只是添加了这些实体的引用(地址)。

以上纯属个人理解,有错误的地方请指正




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2