社区
Java EE
帖子详情
在Java编程中,有必要在一个对象完成工作后,用obj = null;吗?
xiaoyue_yu
2003-10-16 02:48:38
和java中自动垃圾回收有什么关系呢?
...全文
79
10
打赏
收藏
在Java编程中,有必要在一个对象完成工作后,用obj = null;吗?
和java中自动垃圾回收有什么关系呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
swinging
2003-10-17
打赏
举报
回复
另外说一点,对object=null操作后,不一定是会使对象被回收的,
对象是否被回收是看一个对象是否还有引用指向它,如果你将对象的引用置为null,
而这个对象还有其它引用在引用它,那么你这么做基本就没有任何意义了,
而且还在程序上给人困扰,因为你使一个变量具有多重意义,
在你不经意的时候,很可能会在将这个变量置为NULL后又使用它(因为开始时这个变量
确实是指向你需要的对象的,所以你后来还用它,而忘了自己中途把它置为NULL了),
于是BUG就爬出来了。
swinging
2003-10-17
打赏
举报
回复
我觉得你们(楼上所有的)思路有问题。
其实如果一个OBJECT使用完了,需要NULL下了,不如让它就在此OVER,
就是说,尽量在使该OBJECT的引用的生存空间只有使用它的那么大,
一个对象引用在使用是一般是最好不用来反复通过赋值指向不同对象的,
这样变量的意义更确定一些,有助于程序的清晰,
因此一旦不使用该对象引用的对象时,最好是同时使这个引用也被丢弃,
给个简单例子:
假设有一个List list,
当使用迭代器遍历它时,最好能这样:
for(Iterator iter = list.iterator; iter.hasNext();) {
// do something
}
这样的话,变量iter的生存空间就只在使用它的范围内,一旦程序流程跑出了循环,那么这个引用就被丢弃了。
一般我们很习惯这样的写法:
Iterator iter = list.iterator;
while(iter.hasNext()) {
// do something
}
其实两个好像没有什么本质区别,最大不同就是变量iter的生存空间不同,
象楼主说的,在使用完后置iter=null,即:
Iterator iter = list.iterator;
while(iter.hasNext()) {
// do something
}
iter=null;
肯定不如上面使用FOR循环来得简洁,而且这里并没有丢弃变量iter,而实际iter将不再被使用了的。
umeshu
2003-10-17
打赏
举报
回复
虽然楼上说的有一定的正确性,但null一下还是有助于垃圾回收得以正确执行的。
songsd
2003-10-17
打赏
举报
回复
object = null有时候很有用,有时候一点用也没有,纯粹是浪费cpu,浪费读你代码人的感情(这点我深有体
会了),object = null的语句的目的是让某个对象的引用数为0,这样的话,当垃圾回收线程运行时候,会将该
对象占用的资源释放,使该对象真正的消失。理解这个目的再加上对变量作用域的理解,就很容易知道什
么时候该用,什么时候不该用了。
这里举几个例子
比如有个方法
void method1()
{
List l= new ArrayList();
向l中加入10000个对象;
使用或处理l; //到此l已经使用完毕
methodX(); //methodX()需要长时间执行;
}
对于这种情况,显然需要执行l = null;否则假如最后执行methodX(); ,执行了很长时间,这段时间gc执行
了好多次,但是l引用的对象一直却得不到释放,于是造成了白白的内存浪费,显然这样的代码不是最好
的。
假如后面的mehodX()换成了执行时间很短的代码(即使很多行),那就没有必要执行l = null了。
是不是需要使用l=null需要衡量的是,l是否占用足够多的内存空间。2,使用完后,l作用域范围内还需要执行的时间。3,使用l = null会使代码看起来很别扭。
再举一个不需要执行 "=null"的例子
method2()
{
.....
for(int i = 0;i<n;i++)
{
MyClass m ....
process(m);
m=null;
}
.....
}
littlecpu
2003-10-17
打赏
举报
回复
只要你的函数原子性足够细,那有这些烦心事
littlecpu
2003-10-17
打赏
举报
回复
放屁
happyegg
2003-10-16
打赏
举报
回复
null一下没有用的,java中的垃圾回收是自动完成,自己null一下,内存还是不会释放的
Mars_wx
2003-10-16
打赏
举报
回复
觉得还是null一下
zeeler
2003-10-16
打赏
举报
回复
java中的GC可以自动回收作废类的对象,但是只回收Heap中存储的对象,所以在java编程中尽量都使用new来生成对象,例如: String hello = new String("");
另外,还要注意GC回收的标准是Heap中的对象没有相关的reference指向它,具体的内容请参考《Java编程思想(第二版)》
xiaoyue_yu
2003-10-16
打赏
举报
回复
up
obj
=
null
;是否能让
对象
立刻释放,是否能加快
对象
释放,是否有
必要
加上?
我这个喜欢闭门造车,所以很多论点都有可能是错误,于是放在这里和大家一起商讨一下。如果对各位造成什么误导的话,个人不请求原谅,你们爱报复就报复,爱打击就打击,我不嫌弃臭鸡蛋,当然更喜欢鲜花。。。好了,客套就到此为至。以下说说主题。 昨天和一群友讨论内存回收的问题。突然有位自称IBM+移动的
JAVA
群友说在使用完
对象
后整个=
null
;这样
对象
可以加快翻译。。。并且经过IBM小组的严格测试。。。
java
Obj
ect==
null
和
null
==
Obj
ect 的区别
==
null
null
==
java
中
当给
一个
对象
赋值为
null
时发生了什么
比如下面的代码 String[] arr = new String[10]; arr=
null
; 将arr这个引用置空,不指向任何
对象
。 上面new的那个数组
对象
,则没有任何引用指向它,垃圾回收器可以回收此
对象
。
java
中
对象
引用放在栈
中
,
对象
的实例放于堆
中
,
一个
对象
要是只声明不赋值,则只会在内存的栈区创建引用,堆
中
并无此引用的指向。 而
null
对象
在堆
中
会被
java
的垃圾回收机制回收。 在
Java
中
,
null
值表示引用不指向任何
对象
。运行过程
中
系统发现使用了这样
一个
引用时,可以立即停止进
java
null
==
null
_
Java
中
关于
Null
的9个解释(
Java
Null
详解)
对于
Java
程序员来说,
null
是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连
Java
的发明者都承认这是他的一项巨大失误。
Java
为什么要保留
null
呢?
null
出现有一段时间了,并且我认为
Java
发明者知道
null
与它解决的问题相比带来了更多的麻烦,但是
null
仍然陪伴着
Java
。我越发感到惊奇,因为
java
的设计原理是为了简化事情,那就是为什么没有浪费时间在指针、操作符重载、多继承...
Java
对象
不使用时,为什么要赋值
null
?
完成
了对
对象
的操作后,如果我们确定不再需要该
对象
,我们可以将
obj
赋值为
null
,使得该
对象
成为垃圾收集的候选
对象
。需要注意的是,在某些情况下,
Java
的垃圾收集机制可能会自动检测到
一个
对象
不再被引用并进行回收,而无需将其赋值为
null
。在
Java
中
,将
一个
对象
引用赋值为
null
的主要目的是为了解除该引用与
对象
之间的关联,使得该
对象
成为垃圾收集的候选
对象
。通过将
对象
引用设置为
null
,我们告诉
Java
虚拟机不再需要该
对象
,它可以在合适的时候进行垃圾回收。这样可以及时释放内存,提高程序的性能和资源利用效率。
Java EE
67,512
社区成员
225,881
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章