关于JAVA析构函数不存在的原因

不知道大家有没有JAVA设计者不给JAVA提供析构函数的原因。我想问的问题有这些:首先,如果在方法栈里面生成一个临时对象的话,在返回的时候编译器会不会对栈内部的对象调用它... 不知道大家有没有JAVA设计者不给JAVA提供析构函数的原因。
我想问的问题有这些:
首先,如果在方法栈里面生成一个临时对象的话,在返回的时候编译器会不会对栈内 部的对象调用它的析构函数,如果不调用的话是否会造成积压
其次,为何不提供析构函数,首先程序员可以选择主动的释放空间,而垃圾回收只需要清理掉程序员遗忘的那部分,这样垃圾回收要清理的对象就会减少,效率自然提高。
谢谢~~~~
展开
 我来答
匿名用户
2013-09-03
展开全部
java的垃圾回收机制是根据不同的虚拟机构造有不同的调用方式,如有的可能是每隔一定时间检查一次堆存储,进行清理;也可能是在发现空间不足的时候进行清理。要想看到这种机制的好处首先请想一想C++中析构函数的缺点。在我看来似乎它一无是处,为什么呢,1,程序本来就是要节省人力脑力的,但这里,你造了一个对象还要时刻注意着它是否应该结束任务被回收,一个软件开发出来动辄就是上千个对象实例而且跟据程序的无序性和不可预测性,你想要将所有的对象都在适当时候回收那是绝对做不到的。2,再来看看万一你不小心多析构了一次会出现什么,本来已经消失在内存的名字你再次清理了一次,轻则把不该清的清理了,重则程序立刻崩溃。所以在java面前,人不再关心什么时候对象会消失,也不再关心何时对象对回收了。在程序的控制下,宁可不回收也不会多回收一次垃圾。这就是人省事儿了,机器费事了。我们想要的当然是人省点力气了。。。说的有点哆嗦了。
匿名用户
2013-09-03
展开全部
首先,对于类自身来说,JAVA中finalize与C++中的析构函数在功能上是一样的,都是在类的实例被释放前调用其来完成对实例自身的解构,例如对自身持有资源的释放等操作。而对于调用者来说,JAVA中的finalize是GC在回收类实例资源时调用的,由于GC是独立于代码序列之外的,所以finalize的调用时间也是不确定的,而C++中的析构函数是在代码编译阶段将其调用代码插入到代码序列的,所以其调用时间是可以预期的。另外,关于GC的回收动作,一般会在内存不足时会自行进行回收动作以释放可用空间,所以当空间很紧张时,GC的回收动作也会频繁发生,系统的效率也会急剧下降。建议不再用的对象要将其对象变量设置为null,以使GC认识到该对象是可以被回收的,否则如果对象变量一直指向这些对象,则GC不会回收其,即会造成楼主所说的“积压”。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Saingel
2015-12-13
知道答主
回答量:19
采纳率:100%
帮助的人:2460
展开全部
java没有析构函数是语言本身的缺陷和不足,finallize虽然有类似功能,但并不一定都调用,
都说java有gc,不需要释放内存,但系统资源呢?大多解决方法就是另开一个close方法关系释放系统资源,这和java不需要手动释放背道而驰
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-03
展开全部
Java有垃圾回收机制,会自动执行。而且java提供了finalize()方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-03
展开全部
空间不足时会调用也会定时的清理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式