2010-10-04 48 views
0

這是一個學術問題。如果我有一個恆定數量的變量,對象等,並且我們假設GC不會啓動,並且沒有瓶頸。其他一些因素是否會迫使我的應用程序內存出現波動?在這種情況下,我的進程內存將保持不變?我的進程內存不變嗎?

回答

1

您可以使用互操作調用非託管函數,從而修改可用內存量。此外,JIT編譯器可能隨時啓動將IL轉換爲機器碼,並可能消耗內存。另外假設GC不會啓動不是實際上你可以使用.NET假設假設,所以你從錯誤的假設開始繪製的任何結論都是錯誤的。所以要回答你的問題,你不能假設內存將保持不變。

1

你的情況是人爲的,不現實:

我們假設GC不會

踢嗯,會的。您的應用程序在執行過程中可能採取不同的路徑如果是這樣,比狀態可能會有所不同,對堆上的對象的引用可能會保持更長的時間,等等。我真的沒有看到這個問題的目的。

+1

如果系統上有可用的內存,GC爲什麼要啓動? – kofucii 2010-10-04 19:12:53

+1

@kofucii:GC可以處理不同的數據集大小。最近分配的數據被安裝在一個非常小的緩衝區中,當這個緩衝區用完時,GC運行,清理一些分配,並將其他人移動到較大的堆中以便處理較舊的對象。所以即使你有足夠的內存,一旦你分配了相當少量的內存,.NET GC就會運行,不管你有多少內存。 – jalf 2010-10-04 19:24:42

+0

雖然這仍然是一個很好的問題。這只是.NET GC所遵循的策略。 :) – jalf 2010-10-04 19:24:59

1

這是可能的,因爲在How do these people avoid creating any garbage?在問題中提到把一個系統進入它正在與一個常量內存設置的狀態的那種情況下,沒有GC正在發生的事情(因爲沒有被分配,這將需要它收集和它消失到沒有)。這篇文章甚至有一個實用(但高度專業化)的案例。

請注意,他們有大量的方法和類,他們不使用,我們大多數人每天都會使用它們。