在 C# 3.5 的一个类中,我有一些带有一些变量的静态方法。即使我没有初始化类,也会首先初始化静态方法。
那么静态方法中的变量是否也在开始时初始化而不是垃圾收集?
我想知道-即使我不调用该方法或者我调用该方法一次并且该方法退出,是否会为此类方法变量分配内存?或者每次调用该方法并退出时 - 方法内的变量都会被垃圾收集?
在 C# 3.5 的一个类中,我有一些带有一些变量的静态方法。即使我没有初始化类,也会首先初始化静态方法。
那么静态方法中的变量是否也在开始时初始化而不是垃圾收集?
我想知道-即使我不调用该方法或者我调用该方法一次并且该方法退出,是否会为此类方法变量分配内存?或者每次调用该方法并退出时 - 方法内的变量都会被垃圾收集?
首先初始化静态方法
不,静态方法不是这样“初始化”的;它们(在标准实现中)在第一次使用时是 JITted,但这与内存分配无关。
那么静态方法中的变量是否也在开始时初始化而不是垃圾收集?
方法变量是每次调用(在堆栈上) - 不是全局的;堆栈空间是在您输入方法时分配的。如果您有引用类型的变量,它们将在方法退出时超出范围(假设这些变量没有“捕获”到比方法寿命更长的委托或 lambda 表达式中)。
只有对象被垃圾收集;不是变量。引用类型变量只保存对对象的引用。
静态方法变量在方法被调用时创建,当方法执行结束时将超出范围,它们准备好被垃圾收集。