我定义一个数组或者别的对象像这样:
           int[] values = {1,2,3,4}; 
     问题:当我不需要这个数组的时候,我这样values = null 这会在垃圾回收的时候加快回收这个数组占用的内存吗吗?
    如果回收的快的话我是不是当每次实例化一个对象后都要显式的 XXXX = null 呢?

解决方案 »

  1.   

    int[] values = {1,2,3,4}; 
    只要你不重新赋值或者程序退出,它就一直占内存
      

  2.   

    values=null 会释放内存中的{1,2,3,4}; 
    但是变量VALUES不会被释放
      

  3.   

    是马上吗,那不就间接控制GC了?那我每个实例使用完就 XXXX = null 那我怀疑还自己定义一些方法来回收有什么用啊
      

  4.   

    GC不会马上回收,除非你的内存紧缺。GC会自动会在一个最佳时机去回收那些没有被引用的对象。
    而最佳时机是CLR根据操作系统的运行状态动态决定的.
      

  5.   

    不会快的,你前面的赋值已经在内存中了,=null 没有意义
      

  6.   

    =null
    然后
    GC.Collect()
    就会强制垃圾收集器回收
      

  7.   

    ////GC.Collect()
    不要经常这么操作,浪费资源,请先读一些有关的书!!!!!
      

  8.   


    当不用的东西,C#会回收,但不是遇到了 }  或 return 后立即就回收了。
    C# 垃圾回收机制 不是这样工作的.看来你要看看C# 垃圾回收机制 相关的资料.话说回来.
    现在编程不比过去,现在都好了,内存随便就是几个G, 而编程人的工资却比以前高.
    没有必要太在意这个,因为节约这个时间是值得的
      

  9.   

    =NULL,只是表示它指向的相关内存可以被当成垃圾了;
    具体什么时间回收,这是CLR说了算的。
    另外,即使你不写xxx=null这行代码,系统会照样自动没收这些内存,甚至会更有效。
      

  10.   

    没用,微软的垃圾回收机制是三级的,只有当资源级别为最低时gc才会回收资源。
    资源=null后,级别不是高级就是中级,这个时候gc回收列表里肯定没用该资源。
    所以该操作无效,但是该语句在循环中,能将上次的资源回收。
      

  11.   

    =null之后,使这个数组不再有引用,可以让他有更多的回收机会。
    如果想彻底回收,使用GC.Collect(3)
    其中参数3表示三代资源一起回收
      

  12.   

    如果gc回收的时候发现数组资源存在引用,于是把他放入第二代,回收的效率就慢了。
    如果及时的设置了空引用,这个时候gc检查第一代资源的时候,直接就回收掉了。回收的时机目前未知(ms不肯开源)。但是第一带的回收频度最大,速度最快(只占用L2Cache)以上,个人理解。错误的话请楼下更正,免得误人子弟。
      

  13.   

    印象中好像是当L2Cache满了之后就执行第一带回收
      

  14.   

        假设回收会加快,那是不是这样在方法体内所有局部变量我都可以用xxxx= null来使回收加快,但是到现在我也没看见过谁这么写的,
    难道是为的代码好看,抑或是这样的方法根本就不会管用!望牛人解答