[發(fā)明專利]高速緩存運(yùn)行時(shí)生成的代碼有效
| 申請(qǐng)?zhí)枺?/td> | 200980141635.0 | 申請(qǐng)日: | 2009-09-30 |
| 公開(公告)號(hào): | CN102187313A | 公開(公告)日: | 2011-09-14 |
| 發(fā)明(設(shè)計(jì))人: | N·赫林;D·C·賴頓 | 申請(qǐng)(專利權(quán))人: | 微軟公司 |
| 主分類號(hào): | G06F9/30 | 分類號(hào): | G06F9/30;G06F9/06;G06F9/44 |
| 代理公司: | 上海專利商標(biāo)事務(wù)所有限公司 31100 | 代理人: | 黃嵩泉 |
| 地址: | 美國(guó)華*** | 國(guó)省代碼: | 美國(guó);US |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 高速緩存 運(yùn)行 生成 代碼 | ||
背景
傳統(tǒng)上,軟件編譯器產(chǎn)生本機(jī)代碼,即,對(duì)代碼將在其上運(yùn)行的機(jī)器來說是專用的二進(jìn)制代碼。由傳統(tǒng)的編譯器生成的本機(jī)(非托管)代碼通常包括操作系統(tǒng)運(yùn)行代碼所需要的所有事物,除此之外很少有別的。相比之下,在虛擬機(jī)環(huán)境中,源代碼被編譯成對(duì)任何特定的機(jī)器來說不是專用的中間字節(jié)代碼表示。另外,托管代碼編譯器的輸出通常包括比僅二進(jìn)制代碼多得多的信息。該附加信息描述二進(jìn)制代碼的特性,且有時(shí)被稱為元數(shù)據(jù):用于描述其他數(shù)據(jù)的數(shù)據(jù)的通用術(shù)語(yǔ),其中在此情況中,所描述的數(shù)據(jù)是二進(jìn)制代碼。包含中間字節(jié)代碼和元數(shù)據(jù)的容器有時(shí)被稱為托管匯編件。這些容器還可以被稱為類文件、Java檔案或Java模塊。在此所使用的術(shù)語(yǔ)“匯編件”或“托管匯編件”是指任何這樣的字節(jié)代碼和元數(shù)據(jù)的容器。
在非托管環(huán)境中,在運(yùn)行時(shí),預(yù)先存在的本機(jī)指令被加載到存儲(chǔ)器并被執(zhí)行。在托管環(huán)境中,在運(yùn)行時(shí),托管匯編件可以就在執(zhí)行之前被編譯或被翻譯成本機(jī)二進(jìn)制指令。即,托管匯編件可以被加載到存儲(chǔ)器并被即時(shí)(just-in-time,JIT)編譯器或運(yùn)行中(on-the-fly)編譯器編譯成機(jī)器專用的和運(yùn)行時(shí)專用的指令,然后執(zhí)行該指令。盡管托管環(huán)境的編譯/翻譯階段涉及可以影響性能的另外的處理,但另一方面,JIT/運(yùn)行中編譯器可以進(jìn)行非托管環(huán)境所不能利用的環(huán)境專用的優(yōu)化。例如,如果JIT/運(yùn)行中編譯器知道正在執(zhí)行的代碼完全可信任地運(yùn)行,則它可以跳過在非托管環(huán)境中不能跳過的某些昂貴的安全檢查。
在托管環(huán)境中,代替就在執(zhí)行托管匯編件之前編譯托管匯編件,源代碼或中間字節(jié)代碼可以由優(yōu)化編譯器編譯成本機(jī)二進(jìn)制代碼并在宿主系統(tǒng)上運(yùn)行之前被存儲(chǔ)(被高速緩存)。例如,諸如NGEN等的本機(jī)映像生成器可以通過在接收到執(zhí)行該匯編件之前將中間字節(jié)代碼轉(zhuǎn)換成二進(jìn)制的本機(jī)機(jī)器指令來產(chǎn)生用于該環(huán)境的本機(jī)二進(jìn)制映像。以此方式,在運(yùn)行時(shí),以類似于傳統(tǒng)的本機(jī)代碼環(huán)境的方式,預(yù)先存在的可執(zhí)行代碼可以無需第二編譯/翻譯階段就被加載和運(yùn)行。盡管高速緩存旨在通過移除在運(yùn)行時(shí)的JIT/運(yùn)行中編譯/翻譯過程來使得該匯編件執(zhí)行得更快,但可能不改善性能,這是因?yàn)樵陬A(yù)先高速緩存匯編件時(shí)不能進(jìn)行由JIT/運(yùn)行中編譯器進(jìn)行的環(huán)境專用的優(yōu)化。
如上面所說明的,大多數(shù)本機(jī)語(yǔ)言不跟蹤關(guān)于源代碼的內(nèi)部結(jié)構(gòu)的信息。相反,由于在托管環(huán)境中產(chǎn)生的中間字節(jié)代碼中所包括的元數(shù)據(jù),可以容易地在運(yùn)行時(shí)生成利用當(dāng)前現(xiàn)有的對(duì)象、創(chuàng)建新的對(duì)象、從現(xiàn)有的對(duì)象繼承等等的代碼。運(yùn)行時(shí)生成的代碼可以要求使用專用的機(jī)制以便無需從長(zhǎng)期存儲(chǔ)介質(zhì)(例如,硬盤)加載運(yùn)行時(shí)生成的代碼就創(chuàng)建或加載動(dòng)態(tài)代碼。這樣的機(jī)制在本文檔的其余部分中被稱為反射發(fā)出(Reflection?Emit)。也被稱為動(dòng)態(tài)地生成的代碼的在運(yùn)行時(shí)生成的代碼通常在每一進(jìn)程實(shí)例期間被編譯成中間字節(jié)代碼,且然后,被JIT/運(yùn)行時(shí)編譯器處理。這是并非微不足道的每進(jìn)程成本。
概述
如果諸如托管匯編件或托管匯編件的部分(例如方法或函數(shù))等的實(shí)體在運(yùn)行時(shí)生成另外的代碼,如果該方法或函數(shù)是純的,則高速緩存另外的運(yùn)行時(shí)生成的代碼,以使得在該實(shí)體的隨后的執(zhí)行時(shí)可以通過從緩存查找經(jīng)高速緩存的運(yùn)行時(shí)生成的代碼的標(biāo)識(shí)符并從高速緩存檢索所標(biāo)識(shí)的代碼來從高速緩存檢索該代碼,這旁路了代碼生成的一個(gè)或多個(gè)階段。此外,所高速緩存的代碼可以由編譯器預(yù)先編譯和/或可以作為額外的數(shù)據(jù)而被添加到源匯編件的元數(shù)據(jù)。因此,運(yùn)行時(shí)生成的代碼可以被高速緩存并跨越程序的各實(shí)例而被重用。在運(yùn)行時(shí),檢查一個(gè)或多個(gè)運(yùn)行時(shí)生成的代碼高速緩存,且如果所標(biāo)識(shí)的實(shí)體存在于高速緩存中,則加載和使用該實(shí)體,這消除了中間字節(jié)代碼生成階段、編譯/翻譯階段或中間字節(jié)代碼生成階段和編譯/翻譯階段兩者。
提供本概述以便以簡(jiǎn)化形式介紹下面在詳細(xì)描述中進(jìn)一步描述的概念的選集。本概述不旨在標(biāo)識(shí)所要求保護(hù)的本主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)的本主題的范圍。
附圖簡(jiǎn)述
各圖中:
圖1是根據(jù)在此公開的本主題的各方面的用于高速緩存運(yùn)行時(shí)生成的代碼的系統(tǒng)的示例的框圖;
圖2a是本領(lǐng)域中已知的用于執(zhí)行動(dòng)態(tài)程序的方法;
圖2b是根據(jù)在此公開的本主題的各方面的用于高速緩存運(yùn)行時(shí)生成的代碼的方法的示例;
圖2c是根據(jù)在此公開的本主題的各方面的用于高速緩存運(yùn)行時(shí)生成的代碼的方法的另一示例;
圖3是闡釋在此公開的本主題的各方面可以在其中實(shí)現(xiàn)的計(jì)算環(huán)境的示例的框圖;和
圖4是根據(jù)在此公開的本主題的各方面的集成開發(fā)環(huán)境的示例的框圖。
詳細(xì)描述
概覽
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于微軟公司,未經(jīng)微軟公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200980141635.0/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 重新配置高速緩存以支持多態(tài)性的元數(shù)據(jù)的方法以及電路
- 逐出高速緩存的行的電路布置、數(shù)據(jù)處理系統(tǒng)和方法
- 用于響應(yīng)輸出高速緩存的多高速緩存協(xié)作
- 用于在多核系統(tǒng)中管理大型高速緩存服務(wù)的系統(tǒng)和方法
- 使用分開的讀和寫高速緩存的動(dòng)態(tài)高速緩存配置
- 高速緩存存儲(chǔ)器裝置、高速緩存控制方法和微處理器系統(tǒng)
- 非對(duì)稱集組合的高速緩存
- 用于共享系統(tǒng)高速緩存的虛擬化控制的方法和裝置
- 一種高速緩存異常的處理方法及裝置
- 適應(yīng)于大高速緩存大小的基于區(qū)域的目錄方案
- 運(yùn)行控制裝置及運(yùn)行控制方法
- 運(yùn)行支援裝置、運(yùn)行支援系統(tǒng)以及運(yùn)行支援程序
- 列車運(yùn)行處理方法、運(yùn)行處理裝置和運(yùn)行調(diào)度系統(tǒng)
- 運(yùn)行監(jiān)測(cè)系統(tǒng)及運(yùn)行監(jiān)測(cè)方法
- 運(yùn)行控制裝置及運(yùn)行控制方法
- 運(yùn)行曲線制作裝置、運(yùn)行輔助裝置以及運(yùn)行控制裝置
- 運(yùn)行支持裝置、車輛、運(yùn)行管理裝置和運(yùn)行支持方法
- 運(yùn)行計(jì)劃方法、運(yùn)行控制裝置和運(yùn)行計(jì)劃系統(tǒng)
- 運(yùn)行控制裝置、運(yùn)行管理系統(tǒng)、運(yùn)行控制方法以及車輛
- 自動(dòng)建模運(yùn)行系統(tǒng)及運(yùn)行方法
- 遙控器代碼格式結(jié)構(gòu)及其收發(fā)信方法及裝置
- 在虛擬機(jī)中驗(yàn)證代碼模塊的方法及裝置
- 一種用于代碼的管理方法及裝置
- 虛擬代碼提供系統(tǒng)、生成裝置、驗(yàn)證裝置、提供方法
- 一種自動(dòng)化代碼質(zhì)量檢查方法及系統(tǒng)
- 代碼掃描方法、裝置、計(jì)算設(shè)備及計(jì)算機(jī)存儲(chǔ)介質(zhì)
- 用于更新代碼的方法和裝置
- 前端代碼打包方法、裝置、電子設(shè)備及存儲(chǔ)介質(zhì)
- 一種代碼審查服務(wù)同步方法、裝置及計(jì)算機(jī)設(shè)備
- 一種高效智能源代碼安全管理平臺(tái)





