LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 997|回复: 4

新手的不解(关于垃圾回收的条件)

[复制链接]
发表于 2005-10-9 13:40:30 | 显示全部楼层 |阅读模式
...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle(point,20,20);
point=NULL
...

小弟初学JAVA,对于书中所讲之处,有一些不明白,想在此请教大虾,原是是问执行这段代码之后,存在多少指向这些对向的引用,这此对象是否符合拉圾回收的条件?

JAVA的网上说的是没有一个符合回收的条件,但我总觉得point被置空值后,就应当已经符合了回收的条件了呀,谢谢。
发表于 2005-10-9 15:33:12 | 显示全部楼层
Point point = new Point(2,4)//具体的实例 point是这个实例的一个句柄
Rectangle rectangle = new Rectangle(point,20,20);
//举个例子
Point point1=point;
point Point2=point;
point=NULL//你把 point设置为null但是 point1,point2依然有这个实例的句柄在你的例子中是rectangle 还有 你new的对象的句柄

你对java 的机制还不了解   每个对象不过是一个句柄而已
你在下边把point设置为null 但是在rectangle  内部还有这个个 point对象实例的句柄 所以这个point对象的实例不不会被垃圾收集。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-9 21:20:46 | 显示全部楼层
嗯,谢谢您的解答。
原来Rectangle.origin也同样是一个句柄。
看来还要认真看书。
回复 支持 反对

使用道具 举报

发表于 2005-10-9 21:58:03 | 显示全部楼层
抱歉 那个point对象是否 被收集 可能还要看new Rectangle(point,20,20);内部的代码
比如如果在new Rectangle(point,20,20);
方法内部是这样写的
new Rectangle(Point point,x,y)
{
     LocPoint=new Point(point.x,point.y);//可以收集
     LocPoint=point;//不可以;
}
上边的可以收集是因为
这个point还是可以垃圾收集的因为在Rectangle中只是做了个值的拷贝;
抱歉啊 其实我基础也不怎么样如果有错误大家要指出。平时工作中不会想这么多呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-10 22:49:59 | 显示全部楼层
THX,YOU ARE SO KIND.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表