C# 静态方法里面的变量是一开始就初始化还是在方法第一次调用的时候初始化?

标签 c# garbage-collection static-methods

在 C# 3.5 的一个类中,我有一些带有一些变量的静态方法。即使我不初始化类,也会首先初始化静态方法。

那么静态方法中的变量是否也在一开始就被初始化并且没有被垃圾收集?

我想知道 - 即使我不调用该方法或我调用该方法一次并且该方法退出,是否会为此类方法变量分配内存?或者每次方法被调用并退出时 - 方法内的变量都被垃圾回收了?

最佳答案

Static methods are initialized first

不,静态方法不是这样“初始化”的;它们(在标准实现中)在第一次使用时进行了 JIT,但这与内存分配无关。

So are the variables inside the static methods also initialized in the beginning and not garbage collected ?

方法变量每次调用(在堆栈上)——不是全局的;堆栈空间是在您输入方法时分配的。如果您有引用类型变量,它们将在方法退出时超出范围(假设这些变量没有“捕获”到比方法生命周期更长的委托(delegate)或 lambda 表达式中)。

只有对象被垃圾回收;不是变量。引用类型变量只是持有对象的引用。

关于C# 静态方法里面的变量是一开始就初始化还是在方法第一次调用的时候初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10647720/

相关文章:

c# - C#中的同步任务执行

c# - 枚举中的 "&"?

.net - .net 中的固定 block

java - 如何让 JVM 在给定时间段内挂起?

python exec,将静态方法添加到类中

c# - 如何评估这两个哈希函数?

c# - 在 Visual Studio 中从 C# 调用 Python 函数 Python 支持 VS 2017

Java 无法及时收集垃圾

java - Java 的 Arrays.asList() 是否违反了 OOP?

java 带字符串参数的调用方法