有如下代码:
//A为某个对象
A a = new A();List list = new ArrayList();
list.add(a);a = null;
//到这里时, 对象"A"及它的引用"a"所分配的存储空间有没有被释放呢?又如:
A a = null;for (int i = 0; i < 10; i++) {
a = new A();
}a = null;
//这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢?大家讨论一下啊!
//A为某个对象
A a = new A();List list = new ArrayList();
list.add(a);a = null;
//到这里时, 对象"A"及它的引用"a"所分配的存储空间有没有被释放呢?又如:
A a = null;for (int i = 0; i < 10; i++) {
a = new A();
}a = null;
//这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢?大家讨论一下啊!
当a=null,垃圾回收器不一定马上回收空间。当回收时,就释放了。如果没回收,句没释放。
2、一个空间。因为一个引用只能指向一个对象。a只能指向一个“A”。
2、
1〉 A a = null; for (int i = 0; i < 10; i++) {
2〉 a = new A();
} 3〉 a = null;
以上代码解释:1〉处:声明类型A的对象a;此时内存中无。
2〉处:先是分配一块内存给a,然后又让a反复指向一片新的内存空间。那么上一次的内存空间,java垃圾回收。
3〉处:指向null,以前的空间释放。(建议用finalize())
1)问://到这里时, 对象"A"及它的引用"a"所分配的存储空间有没有被释放呢?
对象"A"的空间没有被释放。理由:虽然a不再指向对象“A”了,但:list中还引用着这个对象“A”,即:它还是list中的元素,故:不可能被释放。
另外:引用变量a自身的空间当然存在。2)问://这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢?
循环中一共分配了十个。但由于最后:a=null;因而最后又全被回收了。至于回收的时机,由GC决定。以上仅供你参考
就是因为集合还保留了对原来的一个引用.所以很多内存泄漏都由此而来.貌似很多JAVA书都喜欢用这个做引申的例子将JAVA的内存泄漏问题
对象"A"的空间没有被释放。理由:虽然a不再指向对象“A”了,但:list中还引用着这个对象“A”,即:它还是list中的元素,故:不可能被释放。
另外:引用变量a自身的空间当然存在。 2)问://这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢?
循环中一共分配了十个。但由于最后:a=null;因而最后又全被回收了。至于回收的时机,由GC决定。 以上仅供你参考
我也是这么认为的.........