這是一個學術問題。如果我有一個恆定數量的變量,對象等,並且我們假設GC不會啓動,並且沒有瓶頸。其他一些因素是否會迫使我的應用程序內存出現波動?在這種情況下,我的進程內存將保持不變?我的進程內存不變嗎?
0
A
回答
1
您可以使用互操作調用非託管函數,從而修改可用內存量。此外,JIT編譯器可能隨時啓動將IL轉換爲機器碼,並可能消耗內存。另外假設GC不會啓動不是實際上你可以使用.NET假設假設,所以你從錯誤的假設開始繪製的任何結論都是錯誤的。所以要回答你的問題,你不能假設內存將保持不變。
1
你的情況是人爲的,不現實:
我們假設GC不會
踢嗯,會的。您的應用程序在執行過程中可能採取不同的路徑如果是這樣,比狀態可能會有所不同,對堆上的對象的引用可能會保持更長的時間,等等。我真的沒有看到這個問題的目的。
1
這是可能的,因爲在How do these people avoid creating any garbage?在問題中提到把一個系統進入它正在與一個常量內存設置的狀態的那種情況下,沒有GC正在發生的事情(因爲沒有被分配,這將需要它收集和它消失到沒有)。這篇文章甚至有一個實用(但高度專業化)的案例。
請注意,他們有大量的方法和類,他們不使用,我們大多數人每天都會使用它們。
相關問題
- 1. 我可以將內存分配給特定的java進程(jms listener進程)嗎?
- 2. Rose :: DB :: Object ::緩存的內存是通過不同的進程緩存的嗎?
- 3. 我可以告訴Linux不要換出特定進程的內存嗎?
- 4. 後臺進程不會清除內存。在Android上殺死我自己的進程是一個好主意嗎?
- 5. Lua中的進程內存
- 6. 進程的內存細節
- 7. 進程的內存分配
- 8. 進程的可用內存
- 9. 轉儲內存的進程
- 10. 進程內存v.s. AppDomain內存分配
- 11. 節點JS進程內存不足
- 12. Python進程不釋放內存
- 13. Windows進程何時內存不足?
- 14. 進程和子進程信息(內存)
- 15. 我可以在PHP進程之間共享內存中的大數組嗎?
- 16. 內核會改變進程的價值嗎?
- 17. 內存中的變量是以C++存儲的變量嗎?
- 18. 是zend引擎全局變量在進程間共享內存嗎?
- 19. 可以兩個進程共享相同的GPU內存嗎? (CUDA)
- 20. 多個JVM進程可以共享公共類的內存嗎?
- 21. 內核驅動程序從進程ID讀取進程內存
- 22. 兩個進程可以同時訪問內存中(:內存:) sqlite數據庫嗎?
- 23. 進程的線程級內存消耗
- 24. 進程內存vs堆 - JVM
- 25. asp.net進程內存中,sqlite?
- 26. 跨進程內存管理
- 27. 內存管理和進程
- 28. C#讀取進程內存
- 29. 進程內存大小solaris
- 30. Linux進程內存方案
如果系統上有可用的內存,GC爲什麼要啓動? – kofucii 2010-10-04 19:12:53
@kofucii:GC可以處理不同的數據集大小。最近分配的數據被安裝在一個非常小的緩衝區中,當這個緩衝區用完時,GC運行,清理一些分配,並將其他人移動到較大的堆中以便處理較舊的對象。所以即使你有足夠的內存,一旦你分配了相當少量的內存,.NET GC就會運行,不管你有多少內存。 – jalf 2010-10-04 19:24:42
雖然這仍然是一個很好的問題。這只是.NET GC所遵循的策略。 :) – jalf 2010-10-04 19:24:59