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