我剛剛開始使用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