问题描述
自动垃圾收集怎么知道我的内存还用不用?被他删了,我又突然要用怎么办?他判断为垃圾的原则是什么?msdn中也没有说清楚啊
解决方案
解决方案二:
那你程序终止了嘛那就会自动垃圾收集了啊!呵呵,随便说说的!
解决方案三:
一般来说对象出了它的作用域之后GC就会自动将其释放掉了吧
解决方案四:
自动垃圾收集怎么知道我的内存还用不用?被他删了,我又突然要用怎么办?他判断为垃圾的原则是什么?msdn中也没有说清楚啊==CLR会检查每一个托管堆中的对象,在栈中是否还有指向它的引用,如果没有,则这个对象可以回收,只要栈中有一个指向此对象的引用,此对象就不能被回收
解决方案五:
这个问题其实是很有意思的,怎么样回收这些垃圾是某些公司的面试题现在流行的算法记得是"分代收集算法",楼主有兴趣可以google下
解决方案六:
.netframework有引用计数器,增加一个引用,引用计数起就加一,减少就减一.垃圾收集时就会处理引用计数器为0的变量
解决方案七:
一两句话好像很难形容吧,其中针对托管代码的资源管理和针对不安全代码资源的处理有很大的差异,如果直接编写一些托管代码的话,我们其实也可以选择手动来释放资源的,并非是没有办法。垃圾收集器的算法其实还是相当复杂的,从程序员上看一篇对微软负责垃圾收集器架构师的访谈,其中有所介绍,其中也提到了虽然目前可能还有一些性能和算法方面的问题,但是,其工作仍在继续……so,如果楼主想深入学习这方面知识的话,可能资料还不是很多吧
解决方案八:
维护每一个对象的引用,发现如果没有引用了,就删除回收.Net内存管理和垃圾回收.NET框架下的自动内存管理深入理解.NET内存回收机制
解决方案九:
记得有什么“弱应用”不知道对你有没有用?
解决方案十:
引用3楼amandag的回复:
自动垃圾收集怎么知道我的内存还用不用?被他删了,我又突然要用怎么办?他判断为垃圾的原则是什么?msdn中也没有说清楚啊==CLR会检查每一个托管堆中的对象,在栈中是否还有指向它的引用,如果没有,则这个对象可以回收,只要栈中有一个指向此对象的引用,此对象就不能被回收
解决方案十一:
就是说,我只要保证有引用存在,就一定不会被垃圾回收吧,要不然太可怕了!我的程序要用的时候突然被他干掉了,那,,,,,
解决方案十二:
引用2楼ojlovecd的回复:
一般来说对象出了它的作用域之后GC就会自动将其释放掉了吧
new产生的对象作用域是全局的呀!
解决方案十三:
就是说,我只要保证有引用存在,就一定不会被垃圾回收吧,==正确
解决方案十四:
回收是分代的,一般是分三代,在内存不够的时候,回收一批不被引用的内存,回收了还不够的就回收第二代的,否则,不回收所以出了作用域未必就会释放了资源
解决方案十五:
c#垃圾收集器是一个按标记进行清除的垃圾收集系统,它工作时需要扫描C#对象的动态内存区,标记被引用的存储空间;当一个对象运行结束后,则自动地将标记清除。通过这种标记方法,当C#垃圾收集器扫描了所有可能被对象利用的空间后,那些没有被标记的对象(即没有被引用的)即作为垃圾被收集。------摘自《C#应用程序开发标准教程》希望对楼主有帮助。^0^
解决方案:
一般来说对象出了它的作用域之后GC就会自动将其释放掉了吧
解决方案:
引用10楼yueyeli的回复:
就是说,我只要保证有引用存在,就一定不会被垃圾回收吧,要不然太可怕了!我的程序要用的时候突然被他干掉了,那,,,,,
被回收的都是已经没有引用的。也就是说,即使程序想要再用这个对象,也没法通过任何引用来找到它了。这样的对象被回收掉,没有什么危险。反过来说,如果某个对象还有可能通过某个引用被程序使用,那么它就不会被回收
解决方案:
学习了!!帮你顶!!
解决方案:
生命周期结束就想用都用不了呗,这就回收
解决方案:
一般来说,对于托管代码,对象若不存在任何引用的话,C#会自己释放掉不过,我还是喜欢自己写代码释放
解决方案:
引用11楼yueyeli的回复:
引用2楼ojlovecd的回复:一般来说对象出了它的作用域之后GC就会自动将其释放掉了吧new产生的对象作用域是全局的呀!
错,当然不是全局,在定义作用域之内.static才是全局
解决方案:
出了作用域不一定会回收,一定要等到对象的引用计数为0了才会回收。
解决方案:
引用7楼virusplayer的回复:
维护每一个对象的引用,发现如果没有引用了,就删除回收.Net内存管理和垃圾回收http://www.cppblog.com/mzty/archive/2006/04/30/6486.html.NET框架下的自动内存管理http://dev.21tx.com/2002/10/11/10058.html深入理解.NET内存回收机制http://www.yesky.com/20030311/1656401.shtml