public static class Helper { public static userInfo currentUserInfo { get { return new userInfo() { name = "张三", age = 10 }; } set { } } } public class userInfo { public string name { get; set; } public int age { get; set; } } class Program { static void Main(string[] args) { userInfo usre = Helper.currentUserInfo; } }
usre 对象使用完后能回收吗,多长时间回收
当前的user对象不会回收,如果在调用一次currentUserInfo属性。那之前的那个user对象就能被GC回收掉
public static userInfo currentUserInfo { get { return new userInfo() { name = "张三", age = 10 }; } set { } }
可以这样理解
static userinfo _userinfo;
public static userinfo get_currentuserinfo(){
return _usrinfo=new userinfo();
//第一次执行的时候,前面的一次对象就没有引用根了(就是野对象了),也就能被GC回收了
}
然后GC的回收启动规则和你电脑有关。达到触发条件才会启动GC线程。比如分配大对象的时候内存不足了
GC回收的是没有被引用指向的对象.
这个能理解不.只要没有被指向就能被回收.而且没有静态实例对象这个东西.
是一个是静态引用变量指向一个对象.
假设你来内存管理你会怎么做?——动态分配做标记——怎么做标记?——对象引用计数器。
引用地址明显是在栈上的,栈能理解吗——有开始和结尾的这个数据结构能够简单解决,因此结束计数-1;而静态你可以当作结构root[成员],那么这个东西永远存在(相对进程生命),除非这个引用和对象内存关系解除,解除后需要马上回收资源吗?——那么这样设计会影响效能,因此可以这么设计——合适的时候回收.那什么时候合适呢 —— 微软因此为对象回收,设计了代...