我刚刚开始使用C#作为我的语言。我有点理解Java中GC的概念,并且今天在.NET中重新讨论了相同的概念。垃圾收集是否影响堆栈?
在C#中,值类型被放到堆栈上(与Java的情况相同,其中局部变量放入堆栈)。但在C#中,即使struct
也包含在值类型中。所以,即使struct
被放置在堆栈上。在最糟糕的情况下,如果有很多方法调用,并且堆栈使用很多方法大量填充,并且每种方法都有许多本地值类型,并且许多本身有许多本地值类型的垃圾收集器会影响堆栈?从我研究的内容(部分是我被教的内容),我明白它不会这样做。主要是因为操作堆栈内容会涉及很多开销,而且GC只会参考堆栈来查找引用 - 除此之外无非就是如此。
只是要添加另一个相关主题相关的问题:强制调用GC(如Java中的System.gc()
,不确定C#等价物),并不能确保GC例程在那里被调用。那么我应该在哪里发出这样的电话 - 我希望我需要GC运行,或任何随机的地方,因为不能保证我的电话会立即触发GC?或者我应该把这些东西放到运行环境中而不用担心呢?
注:我添加了Java标记,因为我试图从那里链接概念。我知道GC在两个独立的运行时环境中的内部功能肯定会有所不同,但我想基本概念是一样的。
感谢您的回答。阅读更多内容后我会回来。 – 2012-07-26 14:58:34