站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题请教Java高手:关于对象销毁的问题

请教Java高手:关于对象销毁的问题

摘要: 请教Java高手:关于对象销毁的问题


1.如何手工销毁一个对象,释放其占用的内存空间
2.如果一个对象容器中,比如ArrayList,其中存放了很多对象,这些对象在什么情况下会自动销毁?容器对象销毁了,这些对象会自动销毁吗?调用ArrayList.clear()方法以后,这些对象会自动销毁吗?


第3个问题:
static A a=new A();
A aa= new A();
a=aa;

那么第一次创建的A的实例会自动销毁吗?


Java某些版本的语法是支持C++方式的手工释放的.
这样我觉得比较好一些,但是不是Java标准.

至于他们甚么时候被销毁,不是我们可以控制的,那是gc的事情.
我们写代码只能保证gc能不能删除他们.



1、通常情况不用自己动手来清理!
2、调用ArrayList.clear()方法以后,会被清理掉。
3、第一次创建的A的实例肯定会自动销毁


1。手工好像不可以
2。应该是告诉虚拟机这个ArrayList没用了,但是虚拟机不一定马上销毁它
3。会


同意楼上的


晕,如果真是这样,那真不敢相信JAVAR虚拟机能做到这么牛


如果在调用ArrayList.clear()的同时,其中有一个对象正在被其他线程调用,这个时候会出现什么情况?


根本不用理这些东西——除非是高高手——平时稍微注意就可以了
如果你明白第3个问题的a=new A()分配的内存没有用到(好玩?),避免这么写不就可以了——实际上是被回收的

Java号称自动回收,一般情况应该是没有问题的;如果到了这个问题也需要计较的时候,你已经是高高手了

如果还想进一步了解,百度或google一下吧,好多东西,我都看不过来~


同意楼上的,java语言中并没有析构函数。自身的垃圾回收机制就很强,所以释放的问题一般可以不用考虑的。当然特殊的情况除外,不过我还没有遇到过。:)


java语言自带gc回收机制,这些东西,让系统自己做去吧,咱们不用考虑了


在你用JNI的时候使用c或者c++手动在栈上分配对象空间时要手动回收


似乎很遥远的东西。。。、



析构函数是有的,就是所谓的 finalize ,但是调用该方法并不能保证对象本身会立刻
被gc回收


JAVA自带了回收机制,它是当达到一定的程度,自动会去回收


如果在调用ArrayList.clear()的同时,其中有一个对象正在被其他线程调用,这个时候会出现什么情况?
ArrayList中放的是对象的"引用",如果对象还被其他地方"引用",你即使clear()一万次,对象还在.



晕,感觉大家都太依赖gc了!

为什么java程序总是那么占内存,而且越占越多,包括eclipse之类的软件,个人觉得其中肯定有gc处理不完善的原因


GC确实有它不完善的地方
以后的JVM会改进的



studying



GC 受先天条件制约,必然存在效率问题(相对于“程序主动释放”而言),因为它不可避免地是一个“发现-清除”的过程。无非是某个算法在某些情况下性能表现更好一点而已。

不过,好像目前还没有关于 GC 在“正确性”方面的 BUG 报告。至于“java程序总是那么占内存,而且越占越多,包括eclipse之类的软件”,应该跟 GC 的“正确性”关系不大,倒是有可能跟 GC 的“性能优化算法”有关系。


finalize


好象在java中有一个析构函数吧。finalize()


↑返回目录
前一篇: String变量是不是不能更改其内部的具体部分,而可以整体被赋值、修改?
后一篇: 分享-类似VB的DateDiff的函数