当前位置: 代码迷 >> C# >> 问个垃圾回收GC的有关问题,包含静态字段的类是否不能被回收
  详细解决方案

问个垃圾回收GC的有关问题,包含静态字段的类是否不能被回收

热度:305   发布时间:2016-04-28 08:40:22.0
问个垃圾回收GC的问题,包含静态字段的类是否不能被回收?
下面的这个Food类是否会因为有一个静态Spoon字段而导致无法被回收?如果是这样的话是否应该避免使用静态字段?


    public class Food
    {
        static Spoon spoon = new Spoon();

        public void Eat()
        {
            spoon.Eat();
        }
    }

------解决思路----------------------
static变量在软件整个生命周期内都存在,是不会被GC回收的。
不是类不被回收,类本身不占用内存,是类对象、静态类成员占用内存空间。
------解决思路----------------------
引用:
我是担心包含了静态字段Spoon的Food类如果也不能被回收,那么Food类被大量实例化的话会一直占用大量内存。


什么叫做 Food类被回收?被回收的都是对象而不是类。既然你知道Spoon类包含Food“类”而Spoon对象并不包含,结果就很清楚了。
------解决思路----------------------
能够被回收的是Food的对象
你所担心的那个spoon属性是静态的,静态属性属于的是Food类
对象和类的区别你总明白吧
  相关解决方案