以下就是一些程序设计的几点建议。
1.最基本的建议就是尽早释放无用对象的引用。
大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null。
摘自http://wz.csdn.net/url/781480/
-----------------------------------------------------------------------------------------------------------
上面最后一句话的意思是不是说即使引用变量退出活动域之后,该引用变量依然存在,垃圾回收器就不会回收该引用指向的对象?如果让垃圾回收器回收无用的对象,则只能显示该指向该对象的引用变量置为null或者重新指向一个对象?“大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null。”对于这句话谁又能给一个例子?
10 个解决方案
#1
public void test(){
String str=new String("Hello");
}
这样的情况,方法执行完后,引用变量str也就不存在了(自动退栈),但是它原来指向的对象依然在栈里面,这样看GC什么时候回收了.这个对象可能存在很长时间.GC也会根据内存状况决定是否进行回收.
String str=new String("Hello");
}
这样的情况,方法执行完后,引用变量str也就不存在了(自动退栈),但是它原来指向的对象依然在栈里面,这样看GC什么时候回收了.这个对象可能存在很长时间.GC也会根据内存状况决定是否进行回收.
#2
笔误,对象在堆里面.
#3
受教……
#4
你的意思是在引用变量的作用域之外,该引用变量指向的对象就可以被GC回收了?不需要在退出作用域之前显示的写上这段代码:str = null;
#5
这种情况是,但是具体什么时候回收是不确定的 。
str=null;
这样的写法肯定是方法中还有很多其他的代码,但是str到此已经没有用了,直接设置为null。这样str原来指向的对象就是GC可以回收的了 。
str=null;
这样的写法肯定是方法中还有很多其他的代码,但是str到此已经没有用了,直接设置为null。这样str原来指向的对象就是GC可以回收的了 。
#6
只要超出引用变量的作用域范围,该引用变量就直接置为null了,你是这个意思吗?
#7
不是,超出作用域范围str这个变量已经不存在了,出栈操作 。
#8
str变量出栈了,str指向的对象也就不会被达到,所以他的效果和str=null是一样的,str指向的对象也会被GC回收,你是这个意思吗?
#9
str指的对象没有引用执行了,GC会发现这个对象成为垃圾,需要的时候就回收掉。
#10
刚好看到JAVA编程思想里的关于这个例子的解释。
说是会自动回收垃圾的。
不过我对JAVA的自动回收的工作原理还不了解。所以不敢瞎说。
说是会自动回收垃圾的。
不过我对JAVA的自动回收的工作原理还不了解。所以不敢瞎说。
#1
public void test(){
String str=new String("Hello");
}
这样的情况,方法执行完后,引用变量str也就不存在了(自动退栈),但是它原来指向的对象依然在栈里面,这样看GC什么时候回收了.这个对象可能存在很长时间.GC也会根据内存状况决定是否进行回收.
String str=new String("Hello");
}
这样的情况,方法执行完后,引用变量str也就不存在了(自动退栈),但是它原来指向的对象依然在栈里面,这样看GC什么时候回收了.这个对象可能存在很长时间.GC也会根据内存状况决定是否进行回收.
#2
笔误,对象在堆里面.
#3
受教……
#4
你的意思是在引用变量的作用域之外,该引用变量指向的对象就可以被GC回收了?不需要在退出作用域之前显示的写上这段代码:str = null;
#5
这种情况是,但是具体什么时候回收是不确定的 。
str=null;
这样的写法肯定是方法中还有很多其他的代码,但是str到此已经没有用了,直接设置为null。这样str原来指向的对象就是GC可以回收的了 。
str=null;
这样的写法肯定是方法中还有很多其他的代码,但是str到此已经没有用了,直接设置为null。这样str原来指向的对象就是GC可以回收的了 。
#6
只要超出引用变量的作用域范围,该引用变量就直接置为null了,你是这个意思吗?
#7
不是,超出作用域范围str这个变量已经不存在了,出栈操作 。
#8
str变量出栈了,str指向的对象也就不会被达到,所以他的效果和str=null是一样的,str指向的对象也会被GC回收,你是这个意思吗?
#9
str指的对象没有引用执行了,GC会发现这个对象成为垃圾,需要的时候就回收掉。
#10
刚好看到JAVA编程思想里的关于这个例子的解释。
说是会自动回收垃圾的。
不过我对JAVA的自动回收的工作原理还不了解。所以不敢瞎说。
说是会自动回收垃圾的。
不过我对JAVA的自动回收的工作原理还不了解。所以不敢瞎说。