当我在new一个类,使用完之后有必要将它付值为null吗?

lovelanzhi716 2009-01-09 11:36:10
当我在new一个类,使用完之后有必要将它付值为null吗?
比如,
TestLogic testLogic = new TestLogic();
String x = testLogic.getResult();
testLogic = null;//这一句显示的指定为NULL值,有必要吗?
期待合理的解答
...全文
479 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq1983412 2009-03-17
  • 打赏
  • 举报
回复
有意义吗?自动回收会完成,如果这个对象后面不用了你处理了显得多余了!
zhoushijin5201314 2009-03-16
  • 打赏
  • 举报
回复
不需要,java的垃圾回收是自动完成的...
kunsnat 2009-02-24
  • 打赏
  • 举报
回复
up
vcshcn 2009-02-20
  • 打赏
  • 举报
回复
具体问题具体分析,如果该对象被root可以访问而以后又不要用,不设置null会引起内存泄漏,root访问不了会被回收
bleachkinsin 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tingfeng1981 的回复:]
这种写法是显示的置空,如果不写虚拟机会帮你置空,
不过楼主的写法是种好习惯
[/Quote]

同意
polimo 2009-02-17
  • 打赏
  • 举报
回复
2、没有加 System.gc();时

public class Test2 {


public static void main(String[] args) {

for(int i=0;i<100000;i++){
Test2 test = new Test2();
test = null;
}
//System.gc();
System.out.println("this is GC test!");
}

}


>javac Test2.java

>java -verbosegc Test2
[GC 512K->135K(1984K), 0.0021429 secs]
this is GC test!



时间是0.0021429(千万别小看这0.0000047)
polimo 2009-02-17
  • 打赏
  • 举报
回复
强烈建议使用
testLogic = null;//这一句显示的指定为NULL值

例如:

1、没有加 test = null 和 System.gc();时


public class Test2 {

public static void main(String[] args) {

for(int i=0;i<100000;i++){
Test2 test = new Test2();
//test = null;
}
//System.gc();
System.out.println("this is GC test!");
}

}

>javac Test2.java

>java -verbosegc Test2
[GC 512K->135K(1984K), 0.0021476 secs]
this is GC test!

时间是0.0021476





polimo 2009-02-17
  • 打赏
  • 举报
回复
建议楼主去看下 java 优化编程

看后就不会对加不加下面这句而有疑问了。
testLogic = null;//这一句显示的指定为NULL值
nike911 2009-02-16
  • 打赏
  • 举报
回复
public static void gc() {
Runtime.getRuntime().gc();
}
qinggeer 2009-02-15
  • 打赏
  • 举报
回复
是有垃圾回收机制,可是具体是什么时候回收的,不确定啊,还是写上这,及时回收。呵呵。
leonw00 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 Asinzy 的回复:]
引用 22 楼 kanon_lgt 的回复:
引用 8 楼 dennistan 的回复:
not necessary,JVM automatically collect back it.

装吧你就!!!!
你这句蹩脚的英文堆砌垃圾文中都是语法错误,还在装!!
it是代词,能collect back it?!
...........

晕倒,这也是一个良好的英文学习习惯嘛,错不可怕。
[/Quote]

是有错误, 但是你要强就写出正确的来呀,说话文明点
Asinzy 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 kanon_lgt 的回复:]
引用 8 楼 dennistan 的回复:
not necessary,JVM automatically collect back it.

装吧你就!!!!
你这句蹩脚的英文堆砌垃圾文中都是语法错误,还在装!!
it是代词,能collect back it?!
...........
[/Quote]
晕倒,这也是一个良好的英文学习习惯嘛,错不可怕。
Asinzy 2009-02-13
  • 打赏
  • 举报
回复
上面引用错了
Asinzy 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 Coolfatman 的回复:]
如果testLogic 所属的对象长期存在,或 testLogic 本身是static的,那么是必要的,否则只能说是一个良好的开发习惯。
[/Quote]
晕倒,这也是一个良好的英文学习习惯嘛,错不可怕。
老哥讲数据库 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 Coolfatman 的回复:]
如果testLogic 所属的对象长期存在,或 testLogic 本身是static的,那么是必要的,否则只能说是一个良好的开发习惯。
[/Quote]
你好,我个人认为你是正确的,简单的一句解释,既解答了技术原理,又表达你的开发习惯.
佩服你!!
老哥讲数据库 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dennistan 的回复:]
not necessary,JVM automatically collect back it.
[/Quote]
装吧你就!!!!
你这句蹩脚的英文堆砌垃圾文中都是语法错误,还在装!!
it是代词,能collect back it?!
...........
tingfeng1981 2009-02-09
  • 打赏
  • 举报
回复
这种写法是显示的置空,如果不写虚拟机会帮你置空,
不过楼主的写法是种好习惯
Coolfatman 2009-02-09
  • 打赏
  • 举报
回复
如果testLogic 所属的对象长期存在,或 testLogic 本身是static的,那么是必要的,否则只能说是一个良好的开发习惯。
zj1381289 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 mooxin 的回复:]
应该不需要,但也有好处
[/Quote] 引用
esena 2009-01-18
  • 打赏
  • 举报
回复
我做过测试(只有逻辑,如需测试,请自行调试):
class A{public A a;finally(){System.out.print('---')}
public static testA(){
A head=new A();
A cursor=head;
for(int i=0;i<100;i++){
cursor.a=new A();
cursor=cursor.a;
}
cursor.a=head;
}
}
可以在别处调用testA方法,在调用之后掉gc方法,你会发现一个循环引用的一串对象都被回收了
加载更多回复(17)

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧