日期:2014-05-20 浏览次数:20876 次
public class Obj {
private int id;
public Obj() {
}
public Obj(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[]args) {
ArrayList<Obj> list = new ArrayList<Obj>();
[color=#FF0000]Obj obj1 = null;[/color]
for(int i=1;i<10;i++)
{
obj1 = new Obj(i);
list.add(obj1);
}
if(null!=list) {
[color=#FF0000]Obj obj2 = null;[/color]
for(int i=0;i<list.size();i++) {
obj2 = list.get(i);
System.out.print(obj2.getId()+"\t");
}
}
}
}
[color=#FF0000]Obj obj1 = null;[/color]
for(int i=1;i<10;i++)
{
obj1 = new Obj(i);
list.add(obj1);
}
[color=#FF0000]Obj obj2 = null;[/color]
for(int i=0;i<list.size();i++) {
obj2 = list.get(i);
System.out.print(obj2.getId()+"\t");
}
[color=#FF0000]Obj obj1 = null;[/color]
for(int i=1;i<10;i++)
{
obj1 = new Obj(i);
list.add(obj1);
obj1 = null;
}
[color=#FF0000]Obj obj1 = null;[/color]
for(int i=1;i<10;i++)
{
obj1 = new Obj(i);
list.add(obj1);
}
------解决方案--------------------
[color=#FF0000]Obj obj1 = null;[/color]
for(int i=1;i<10;i++)
{
obj1 = new Obj(i);
list.add(obj1);
obj1 = null;
}
------解决方案--------------------
obj1,obj2事实上都是引用
对第一个循环,放在里面或外面,都是创建9个对象。因为obj1 = null;这条语句并没有创建对象,只是创建了一个引用。
对第2个循环,放在里面性能不如放在外面,因为如果obj2 = null;放在循环里面,它被执行9次,将比放在外面多创建8个引用。之后obj2 = list.get(i); obj2被赋值指向给list.get(i),之前9次创建的引用都没有意义。
list.add(obj1);
obj1 = null;
这不会有内存泄漏问题。
obj1被设为null后,它原来指向的对象还存活于list中,这个对象被JVM认为是active的,不会被GC回收。
唯一改变了的,只是obj1这个引用的指向而已,其它一切依然照旧。
------解决方案--------------------
同求 我是小白
------解决方案--------------------
up一下!嘿嘿!!
------解决方案--------------------
不会有内存泄漏,放在循环外或者循环内性能都一样,局部变量的汇编指令是一样的