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

vivanboy 2006-11-22 01:44:51
1.如何手工销毁一个对象,释放其占用的内存空间
2.如果一个对象容器中,比如ArrayList,其中存放了很多对象,这些对象在什么情况下会自动销毁?容器对象销毁了,这些对象会自动销毁吗?调用ArrayList.clear()方法以后,这些对象会自动销毁吗?
...全文
691 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinqinxiatiao 2006-11-23
  • 打赏
  • 举报
回复
finalize
maquan 2006-11-23
  • 打赏
  • 举报
回复
GC 受先天条件制约,必然存在效率问题(相对于“程序主动释放”而言),因为它不可避免地是一个“发现-清除”的过程。无非是某个算法在某些情况下性能表现更好一点而已。

不过,好像目前还没有关于 GC 在“正确性”方面的 BUG 报告。至于“java程序总是那么占内存,而且越占越多,包括eclipse之类的软件”,应该跟 GC 的“正确性”关系不大,倒是有可能跟 GC 的“性能优化算法”有关系。
jifei0611 2006-11-23
  • 打赏
  • 举报
回复
studying
千里冰封820 2006-11-23
  • 打赏
  • 举报
回复
GC确实有它不完善的地方
以后的JVM会改进的
vivanboy 2006-11-23
  • 打赏
  • 举报
回复
晕,感觉大家都太依赖gc了!

为什么java程序总是那么占内存,而且越占越多,包括eclipse之类的软件,个人觉得其中肯定有gc处理不完善的原因
powerpretty 2006-11-23
  • 打赏
  • 举报
回复
好象在java中有一个析构函数吧。finalize()
cutcutcutcut 2006-11-22
  • 打赏
  • 举报
回复
如果在调用ArrayList.clear()的同时,其中有一个对象正在被其他线程调用,这个时候会出现什么情况?
ArrayList中放的是对象的"引用",如果对象还被其他地方"引用",你即使clear()一万次,对象还在.
persevere 2006-11-22
  • 打赏
  • 举报
回复
JAVA自带了回收机制,它是当达到一定的程度,自动会去回收
LexChen 2006-11-22
  • 打赏
  • 举报
回复
析构函数是有的,就是所谓的 finalize ,但是调用该方法并不能保证对象本身会立刻
被gc回收
jicken_woo 2006-11-22
  • 打赏
  • 举报
回复
似乎很遥远的东西。。。、
bushuang 2006-11-22
  • 打赏
  • 举报
回复
在你用JNI的时候使用c或者c++手动在栈上分配对象空间时要手动回收
wangtong408 2006-11-22
  • 打赏
  • 举报
回复
java语言自带gc回收机制,这些东西,让系统自己做去吧,咱们不用考虑了
loveyuxi 2006-11-22
  • 打赏
  • 举报
回复
同意楼上的,java语言中并没有析构函数。自身的垃圾回收机制就很强,所以释放的问题一般可以不用考虑的。当然特殊的情况除外,不过我还没有遇到过。:)
malligator 2006-11-22
  • 打赏
  • 举报
回复
根本不用理这些东西——除非是高高手——平时稍微注意就可以了
如果你明白第3个问题的a=new A()分配的内存没有用到(好玩?),避免这么写不就可以了——实际上是被回收的

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

如果还想进一步了解,百度或google一下吧,好多东西,我都看不过来~
vivanboy 2006-11-22
  • 打赏
  • 举报
回复
如果在调用ArrayList.clear()的同时,其中有一个对象正在被其他线程调用,这个时候会出现什么情况?
vivanboy 2006-11-22
  • 打赏
  • 举报
回复
晕,如果真是这样,那真不敢相信JAVAR虚拟机能做到这么牛
wanguanghai 2006-11-22
  • 打赏
  • 举报
回复
同意楼上的
buyaowen 2006-11-22
  • 打赏
  • 举报
回复
1。手工好像不可以
2。应该是告诉虚拟机这个ArrayList没用了,但是虚拟机不一定马上销毁它
3。会
hua820101 2006-11-22
  • 打赏
  • 举报
回复
1、通常情况不用自己动手来清理!
2、调用ArrayList.clear()方法以后,会被清理掉。
3、第一次创建的A的实例肯定会自动销毁
healer_kx 2006-11-22
  • 打赏
  • 举报
回复
Java某些版本的语法是支持C++方式的手工释放的.
这样我觉得比较好一些,但是不是Java标准.

至于他们甚么时候被销毁,不是我们可以控制的,那是gc的事情.
我们写代码只能保证gc能不能删除他们.
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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