|
微軟研究部項目Snowflake將手動記憶管理和垃圾回收整合在一起,為開發商提供“兩個世界最好的”Microsoft在.Net中探索“安全”手動內存管理
1.jpg (40.39 KB, 下載次數: 816)
下載附件
監控軟件
2017-7-29 20:15 上傳
Microsoft Research一直在.Net運行時集成安全的手動內存管理與垃圾收集(GC)。目標是為開發人員提供自動內存管理的便利性和安全性,并通過手動釋放內存來提高性能的機會。
這項稱為Project Snowflake的工作是本周由微軟研究院和劍橋大學和普林斯頓大學的合著者發表的論文的主題。使用Snowflake,程序員可以在GC堆或手動堆中分配對象之間進行選擇。 Snowflake將開源.Net運行時與手動管理內存的功能結合在一起,而不會影響性能或安全性。
現有應用程序使用GC堆未修改運行,而不會降低性能。
研究人員說:“我們的.Net CoreCLR實現在實際應用中的實驗結果顯示出顯著的性能提升,特別是在多線程情況下:峰值工作組節省3倍,運行時間提高2倍。
Microsoft的手動內存管理模型基于手動對象的唯一所有者的概念,堆棧或堆中的位置僅包含對分配在手動堆上的對象的引用。引入屏蔽的概念,以實現手動對象​​的安全并發共享。屏蔽在本地線程存儲中創建狀態,以防止在使用對象時進行解除分配。
研究人員說,盡管垃圾收集器(如.Net GC)通過快速線程局部碰撞分配和年輕物體的收集來提供高吞吐量,但研究表明,與手動內存管理相比,GC可以引入性能開銷。他們解釋說,這些開銷在大數據分析和實時流處理應用中被放大,部分原因是需要追蹤大堆。
研究人員指出,“隨著現代服務器利用更大的記憶,這種趨勢可能會持續下去,數千吉字節甚至幾兆字節的大小已經很普遍了。手動內存管理通過避免跟蹤對象圖來釋放對象來解決問題,并允許程序員使用自己的對象生命周期知識來釋放對象在程序中的特定位置。根據研究人員的說法,這提高了吞吐量和內存使用率。但手動內存管理“通常不安全”,可能導致崩潰和漏洞。它也取消了GC的生產效益。
Project Snowflake在Microsoft的開源.NET實現(稱為.Net Core)中修改CoreCLR運行時,并使用手動內存的API擴展了標準庫。靈活的編程模型被用于手動存儲器管理,允許在任意程序位置分配和釋放對象,并且在多個線程之間并發和安全地共享對象。
微軟的設計不會對垃圾收集或寫入障礙等操作造成任何開銷。要優化應用程序的程序員必須逐步更改代碼以在手動堆中分配對象并顯式地釋放它們。手動管理的對象保證完整的類型和時間安全性,包括在并發訪問的情況下。根據報告,開發人員可以獲得動態受管理的異常情況,但不會出現任何崩潰或安全​​漏洞。
|
|