问题描述
如题,需要吗?.......还是要看不同的情况?
解决方案
解决方案二:
怎么finalize都出来了?
解决方案三:
建议你设置一下
解决方案四:
引用2楼bdmh的回复:
建议你设置一下
为何?
解决方案五:
引用3楼decs87的回复:
Quote: 引用2楼bdmh的回复:
建议你设置一下为何?
设置为nul,明确告诉gc,head中这个对象没有被引用。
解决方案六:
引用4楼smthgdin的回复:
Quote: 引用3楼decs87的回复:
Quote: 引用2楼bdmh的回复:
建议你设置一下为何?
设置为nul,明确告诉gc,head中这个对象没有被引用。
或者更明确说,设置为null,就等于将stack中指向该对象的指针去掉,没有了指向这个对象的引用就可以被垃圾回收了。
解决方案七:
除非是静态变量不用了要设null,那些局部变量都不需要多此一举了吧
解决方案八:
finalize既然都被执行了,那么GC已经回收它了。无论如何也不需要设置什么null了。“皮都不在了”,你还去拔毛干什么呢?至于说dispose,你所说的finalize方法中几乎无一例外地、基本上都会调用自动dispose,并不需要手动调用dispose。而代码手动调用dispose跟GC无关,例如说及时调用DbConnection对象的dispose的目的是为了避免出现“连接池满”的异常所以在使用完之后不等它子弟自动finalize而手动调用dispose(因为dispose中会自动调用其Close方法)。调用dispose跟什么内存释放无关。你知道dispose里边有什么其它的原因,才需要调用它。否则过早地调用dispose不但是多余的,而且是减慢了程序速度的(虽然减慢的微乎其微)。一些学过一点c语言的人动不动就纠结什么“内存释放”问题,这在.net和java中很少用这类问题来消磨时光。而通常直接研发讨论高级的技术设计问题。
解决方案九:
如果说“什么都做一下,没功劳也有苦劳啊!”这种观点,我觉得是个悲催的悖论。比如说如果你的程序发生产生内存泄露,而以在某些地方需要将变量赋值null,那么我的观点是你要学习正规的自动化测试方法,你的测试程序每天跑上万个单元测试,其中有一些就是用来检测疑似内存泄露的。然后发现了,再设置null。而“不管又没用都设置null”的编程习惯,我认为是个逃避问题从而也不能了解问题的办法。