关于垃圾回收机制

来源:百度知道 编辑:UC知道 时间:2024/06/15 03:31:51
比方我定义了一个Student对象,

Student s=new Student();

如果我不写上 s=null;那么gc是不会对他回收的,但是这个对象确实在后面的代码里不会在调用了,但是在实际编程中,没有人把所有的引用都显示赋空啊(除了关闭资源的时候)。

那么所谓的垃圾自动回收是不是这么个意思,如果你显示把引用赋空,那么就回收,否则当全部程序执行完后,再把未回收的全部对象回收?

请大家看看我的理解对不对。

如果你创建的对象还有引用,那么垃圾回收机制是不会回收的,因为它不是豌豆能的,它不知道你这个对象是否需要,但是如果赋予null后,原来的变量指向的的对象就不存在引用了,所以垃圾回收可以自动回收的。所以,垃圾回收机制只能回收他认为是垃圾的对象的空间。
如果:
Student s=new Student();
实在某个方法中定义的,当方法执行完返回时,则s复合垃圾回收机制(前提是没有变量指向此对象)。

我理解是:不是你写不写null。而看程序到底还有没有引用s的这个对象。如果,没有。那回收。

这个建议你好好读一读tinking in java的第四章
如果你不撤销你的句柄,那么gc会认为任然有东西
在调用这部分内存空间,所以他不会回首这部分空间

垃圾回收只能回收句柄连接不到的资源,如果你不显示声明为null,那么的确不会被回收,除非它的父资源被回收了,不过一般这种情况不太重要。一般重要都会被说明要显示回收。
或者你不要申明为全局变量就可以了,局部变量在这个方法块执行完后会自动回收。