zoukankan      html  css  js  c++  java
  • C# 给对象赋null值会释放内存吗?

    C# 给对象赋null值会释放内存吗?

    转载欢香Love 发布于2015-11-03 13:16:41 阅读数 6327  收藏

    展开

    比如A a=new A();
    a=null;
    这时候a所占用的内存会释放掉吗?还是只是将a的指针改变为null,而new A();产生的数据仍在内存中?
    另外请问string a="";和string a=string.Empty;是一样的吗?

    不一定,这个涉及到GC 垃圾回收机制,具体的回收是由.NET运行时决定的,但是只有对象不再执行任何引用时才会释放,也就是说你的a=null;只是一个必要条件
    当对象一定不再有用的时候GC就可以将对象回收了,判断一个对象是否一定不再有用的标准就是没有任何的变量指向它。当一个变量设置为null的时候。
    Person p1=new Person(“aa”);            //在内存中创建了Person对象
    Person p2 = p1;                                     //把p2指向p1指向的对象!这一刻p1指向着aa,p2就顺着p1找到了lilei
    p1=null;                                                   //p1不再指向aa。aa不能回收,因此p2还在指着它
    p2= new Person(“gaga”);                    //aa可以回收,因为没有任何变量指着它。
    当没有任何变量指向aa的时候,就没法再顺着任何的变量把p3指向lilei了。
    当一个对象一旦被最后一个指向它的变量抛弃的时候(=null或者变量出了作用域),不可能再有任何变量指向它,它就像断了线的风筝,再也飞不回来了,因此就可以被回收了。当一个对象找不回来的时候就可以被GC了。
    GC类中提供了对GC进行控制、监测的方法,比如GC.Collect()可以强制立即开始进行GC,但是一般不要去手动干预GC。没有特殊理由,不要去调用GC.Collect(),让.net自己决定什么时候去回收内存。

  • 相关阅读:
    FineReport实现java报表报表展示的效果图
    Android开发最佳学习路线图
    void及void指针含义的深刻解析
    7个最好的免费杀毒软件下载
    linux-socket
    java实现第四届蓝桥杯逆波兰表达式
    java实现第四届蓝桥杯逆波兰表达式
    java实现第四届蓝桥杯逆波兰表达式
    java实现第四届蓝桥杯逆波兰表达式
    java实现第四届蓝桥杯有理数类
  • 原文地址:https://www.cnblogs.com/grj001/p/12222992.html
Copyright © 2011-2022 走看看