我定义一个数组或者别的对象像这样:
int[] values = {1,2,3,4};
问题:当我不需要这个数组的时候,我这样values = null 这会在垃圾回收的时候加快回收这个数组占用的内存吗吗?
如果回收的快的话我是不是当每次实例化一个对象后都要显式的 XXXX = null 呢?
int[] values = {1,2,3,4};
问题:当我不需要这个数组的时候,我这样values = null 这会在垃圾回收的时候加快回收这个数组占用的内存吗吗?
如果回收的快的话我是不是当每次实例化一个对象后都要显式的 XXXX = null 呢?
只要你不重新赋值或者程序退出,它就一直占内存
但是变量VALUES不会被释放
而最佳时机是CLR根据操作系统的运行状态动态决定的.
然后
GC.Collect()
就会强制垃圾收集器回收
不要经常这么操作,浪费资源,请先读一些有关的书!!!!!
当不用的东西,C#会回收,但不是遇到了 } 或 return 后立即就回收了。
C# 垃圾回收机制 不是这样工作的.看来你要看看C# 垃圾回收机制 相关的资料.话说回来.
现在编程不比过去,现在都好了,内存随便就是几个G, 而编程人的工资却比以前高.
没有必要太在意这个,因为节约这个时间是值得的
具体什么时间回收,这是CLR说了算的。
另外,即使你不写xxx=null这行代码,系统会照样自动没收这些内存,甚至会更有效。
资源=null后,级别不是高级就是中级,这个时候gc回收列表里肯定没用该资源。
所以该操作无效,但是该语句在循环中,能将上次的资源回收。
如果想彻底回收,使用GC.Collect(3)
其中参数3表示三代资源一起回收
如果及时的设置了空引用,这个时候gc检查第一代资源的时候,直接就回收掉了。回收的时机目前未知(ms不肯开源)。但是第一带的回收频度最大,速度最快(只占用L2Cache)以上,个人理解。错误的话请楼下更正,免得误人子弟。
难道是为的代码好看,抑或是这样的方法根本就不会管用!望牛人解答