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