欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

托管代碼中的垃圾收集控制的制作方法

文檔序號:11519472閱讀:287來源:國知局
托管代碼中的垃圾收集控制的制造方法與工藝



背景技術(shù):

計算機和計算系統(tǒng)幾乎已經(jīng)影響了現(xiàn)代生活的各個方面。計算機一般在工作、休閑、醫(yī)療、交通、娛樂、家庭管理等中被涉及到。

一些計算機程序使用所謂的托管代碼來編寫。托管代碼是需要公共語言運行時(clr)虛擬機的管理并且僅在公共語言運行時(clr)虛擬機的管理下才執(zhí)行的計算機程序源代碼。例如,托管代碼可以在能夠從華盛頓州雷德蒙德微軟公司獲得的.netframework下執(zhí)行。

托管代碼通常具有各種工具和管理特征以幫助開發(fā)應(yīng)用。特別地,clr將處理許多代碼管理功能,以防止諸如變量沖突或存儲器沖突等沖突。通過使用托管代碼并在托管執(zhí)行環(huán)境中編譯,開發(fā)人員可以避免導致安全漏洞和不穩(wěn)定的應(yīng)用的許多典型的編程錯誤。此外,許多非生產(chǎn)性編程任務(wù)(諸如類型安全檢查、存儲器管理、和不需要的對象的破壞)被自動處理。因此,開發(fā)人員可以專注于應(yīng)用的業(yè)務(wù)邏輯,并且使用較少的代碼行來編寫它們。

在托管代碼環(huán)境中,被稱為垃圾收集的過程是可以用于破壞不需要的對象的一種形式的自動存儲器管理。垃圾收集器(gc)嘗試回收由不再被任何程序使用的對象所占用的存儲器。在垃圾收集過程中,由于不再使用的對象被丟棄,并且包含這些對象的存儲器被回收以用于其他對象,因此過程線程將因為垃圾收集的全部或部分而被暫停。

然而,某些性能敏感的應(yīng)用可能希望在沒有來自gc的干擾的情況下運行。例如,一些用戶已經(jīng)表示他們不愿意他們的用戶線程被暫停超過1ms。例如,在市場交易行業(yè),即使很短的中斷也可以使得交易無法進行,從而導致?lián)p失。然而,不幸的是,1ms可能不足以在可能是若干gb大小的存儲器堆上執(zhí)行垃圾收集。

之前,用戶已經(jīng)被建議在存儲器中預分配他們在過程期間預期使用的所有對象,以防止垃圾收集操作被執(zhí)行。然而,這可能是不切實際的。特別地,托管代碼的一個優(yōu)點是生產(chǎn)力。如果開發(fā)人員需要花費大量時間來預分配預期的存儲器對象,則他們可能認為使用托管代碼的回報被減少。另外,如果開發(fā)人員不進行預期并且因此預分配對象,則當對象在運行時被分配時,垃圾收集可能會被觸發(fā)。事實上,對象的分配通常是觸發(fā)垃圾收集操作的原因。此外,一些庫可能并不允許用戶預分配對象。

本文中所要求保護的主題不限于解決只在諸如上述環(huán)境中的任何缺點或只在諸如上述環(huán)境中運行的實施例。相反,提供該背景技術(shù)以僅說明可以實踐本文中描述的一些實施例的一個示例性技術(shù)領(lǐng)域。



技術(shù)實現(xiàn)要素:

本文中說明的一個實施例包括可以在實施垃圾收集的托管代碼計算環(huán)境中實踐的方法。該方法包括用于控制垃圾收集操作的動作。該方法包括建立垃圾收集以收集在托管代碼環(huán)境中不再使用的對象。該方法還包括接收指定期望的量的托管代碼輸入,在該期望的量內(nèi)期望垃圾收集不被執(zhí)行。該方法還包括執(zhí)行計算操作以確定很可能被滿足的期望的量。該方法還包括在該量內(nèi)運行存儲器操作而不運行初始化的垃圾收集。

另一實施例包括計算環(huán)境中的計算機可讀存儲設(shè)備。計算機可讀存儲設(shè)備包括計算機可執(zhí)行指令,該計算機執(zhí)行指令在由一個或多個處理器執(zhí)行時使得用于控制垃圾收集的托管代碼應(yīng)用編程接口(api)被實施。api包括一個或多個字段的第一集合,該一個或多個字段的第一集合允許用戶指定要被預提交用以于稍后的對象分配的存儲器的量。一個或多個字段的第一集合允許用戶指定要提交的總存儲器大小、針對小對象堆要提交的存儲器大小以及針對大對象堆要提交的存儲器大小,使得至少總存儲器大小在大對象堆和小對象堆的組合之間被提交。api還包括一個或多個字段的第二集合,該一個或多個字段的第二集合允許用戶指定是否在預提交存儲器的量之前阻塞垃圾收集。

提供本發(fā)明內(nèi)容以便以簡化的形式介紹在下面的具體實施方式中進一步描述的概念的選集。本發(fā)明內(nèi)容不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。

附加特征和優(yōu)點將在下面的描述中闡述,并且部分地將從描述中顯而易見,或者可以通過對本文中的教導的實踐來了解。本發(fā)明的特征和優(yōu)點可以通過所附權(quán)利要求中特別指出的儀器和組合來實現(xiàn)和獲得。本發(fā)明的特征從下面的描述和所附權(quán)利要求中將變得更加顯而易見,或者可以通過對下文中闡述的發(fā)明的實踐來了解。

附圖說明

為了描述可以獲得以上記載和其它的優(yōu)點和特征的方式,將通過參考在附圖中圖示的具體實施例來呈現(xiàn)上面簡要描述的主題的更具體的描述。應(yīng)當理解,這些附圖僅描繪了典型的實施例,并且因此不應(yīng)當被認為是在范圍上的限制,將通過使用附圖結(jié)合附加特征和細節(jié)來描述和解釋實施例,在附圖中:

圖1圖示了在托管代碼環(huán)境中實施的系統(tǒng),其包括垃圾收集器并且被配置為預提交存儲器以防止發(fā)生垃圾收集;

圖2圖示了每個都具有預提交的部分的小對象堆和大對象堆;以及

圖3圖示了控制垃圾收集操作的方法。

具體實施方式

本文中的實施例可以實施針對托管代碼應(yīng)用的功能,以防止(或至少嘗試防止)發(fā)生針對某些用戶指定的量的垃圾收集。因此,例如,用戶可以指定垃圾收集在某一給定時間段內(nèi)不應(yīng)當發(fā)生。實施例可以執(zhí)行某些操作以確定垃圾收集是否能夠針對指定的時間段而被暫停。這樣的操作例如可以包括確定存儲器中很可能存在足夠空閑的存儲器以暫停垃圾收集、預提交存儲器的部分以滿足用戶指定的量、和/或簡單地針對指定的時間段而關(guān)閉垃圾收集。在其他實施例中,用戶可以指定其希望在不中斷垃圾收集的情況下使用的存儲器的量。此外,作為響應(yīng),系統(tǒng)可以執(zhí)行各種操作,諸如確定存儲器中很可能存在足夠空閑的存儲器以暫停垃圾收集、預提交存儲器的部分以滿足用戶指定的量、和/或簡單地針對指定的存儲器訪問量而關(guān)閉垃圾收集。

該功能可以用于在性能關(guān)鍵時間期間提高系統(tǒng)性能。通過防止資源密集型垃圾收集操作被執(zhí)行,系統(tǒng)的整體性能可以被顯著改善。

現(xiàn)在參考圖1,其圖示了系統(tǒng)102。系統(tǒng)102包括托管代碼應(yīng)用104。托管代碼應(yīng)用104是使用托管代碼平臺運行的應(yīng)用。例如,托管代碼應(yīng)用104可以使用可用與.netframework一起使用的多個不同的高級編程語言之一來編寫,其包括多種語言,諸如c#、j#、microsoftvisualbasic.net、microsoftjscript.net和托管c++。這些語言共享統(tǒng)一的一組類庫,并且可以被編碼為中間語言(il)。運行時感知的編譯器將il編譯為托管執(zhí)行環(huán)境內(nèi)的本地可執(zhí)行代碼,托管執(zhí)行環(huán)境確保類型安全、數(shù)組綁定和索引檢查、異常處理、以及垃圾收集。

圖1還圖示了對象堆106。對象堆106包括存儲器,諸如系統(tǒng)ram、使用系統(tǒng)存儲器的虛擬存儲器、或可以用于存儲對象的其他存儲器。對象堆106包括多個分段。系統(tǒng)102的操作系統(tǒng)可以指派分段以用于存儲托管對象。分段是對象堆106的一部分,其已經(jīng)由操作系統(tǒng)分配以將對象存儲在用于在操作系統(tǒng)環(huán)境中運行的代碼(諸如,托管代碼應(yīng)用)的存儲器空間中。多個對象可以被存儲在分段中。

對象可以包括隨對象而變化的附加部分。例如,對象可以包括首部,首部包括關(guān)于對象的信息(包括諸如類類型、大小等信息)。對象可以包括對其他對象106的引用。另外,對象可以包括數(shù)據(jù)成員。數(shù)據(jù)成員可以包括原始低級數(shù)據(jù),諸如整數(shù)、布爾值、浮點數(shù)、字符或字符串。

圖1還圖示了垃圾收集器(gc)108。gc可以游歷堆106以標識不再需要的對象,使得用于那些對象的存儲器可以被取回。當托管代碼操作環(huán)境被啟動時,gc通常會隨托管代碼操作環(huán)境被啟動以執(zhí)行垃圾收集活動。

如上所述,可能期望在一段時間內(nèi)暫?;虿贿\行垃圾收集以防止用戶線程的暫停。然而,傳統(tǒng)的想法是垃圾收集不應(yīng)當被暫停。因此,本文中描述的各種實施例可以實施嘗試防止垃圾收集在用戶指定的某些量期間被執(zhí)行的功能。

圖1以虛線圖示了開發(fā)人員自己可能嘗試以防止垃圾收集操作被執(zhí)行的在先實施的措施。特別地,圖1圖示了堆106中可能已經(jīng)被預分配的特定對象的集合110。然而,這需要開發(fā)人員事先知道需要被分配的對象以便對它們進行分配,如果開發(fā)人員出錯并且新對象需要被分配,則垃圾收集活動可能已經(jīng)被執(zhí)行,這違反了用戶的意愿。此外,這可能使編程更加復雜和繁瑣。

相反,本文中的實施例可以允許開發(fā)人員預提交堆106的一部分112。特別地,開發(fā)人員可以預提交具有用以防止垃圾收集活動被執(zhí)行的尺寸的堆106的一部分112,可選地連同,用以設(shè)法確保垃圾收集活動不會啟動的某些安全因素一起。例如,假設(shè)開發(fā)人員知道,在托管代碼應(yīng)用(諸如,集合110中的對象)的執(zhí)行期間,將需要大約500mb的存儲器用于對象分配。開發(fā)人員可以預提交堆106中的700mb的部分112,以提供安全因素。然而,在其他實施例中,系統(tǒng)102可以僅分配用戶請求的500mb。用戶可以負責請求附加的預提交的存儲器數(shù)量。然后,應(yīng)用可以根據(jù)需要為對象分配預提交的部分112中的空間。只要應(yīng)用不需要向?qū)ο蠓峙涑^700mb,系統(tǒng)就可以保證垃圾收集活動不會被執(zhí)行。雖然以上一般地說明了堆106,但是應(yīng)當理解,諸如圖2所示,堆106通常將被分成大對象堆(loh)和小對象堆(soh),圖2中示出了小對象堆106-1和大對象堆106-2。如本文中使用的,小對象堆簡言之是用于未在大對象堆中維持的其他對象的堆。因此,小對象只是其他對象,諸如那些沒有足夠大到被分類為大對象的對象。

實施例可以包括用于允許在loh和soh中的任一個或兩個上預提交存儲器的功能。附加地,實施例可以包括允許執(zhí)行完全阻塞垃圾收集操作的功能。完全阻塞垃圾收集是收集整個堆的非并發(fā)收集。它是垃圾收集的一種形式,其可以丟棄托管堆中的所有可能的垃圾。在一代垃圾收集中,由于有時不在整個堆上執(zhí)行垃圾收集,因而使用完全阻塞垃圾收集。在某些系統(tǒng)中,垃圾收集操作不是一代的(generational),這意味著所有垃圾收集操作都在所有堆上執(zhí)行。實施例可以期望垃圾收集回收盡可能多的存儲器,以增加在“無垃圾收集區(qū)域”開始之前具有足夠的存儲器以預提交用戶所請求的內(nèi)容的機會。在用戶選擇進行完全阻塞垃圾收集操作的情況下,一些實施例可以允許在預提交空間之前執(zhí)行最少數(shù)量的垃圾收集,以在存儲器中創(chuàng)建空間。例如,在一些實施例中,可以在soh上執(zhí)行最小垃圾收集操作以為soh分配新的分段。這可以在soh中提供足夠的存儲器的數(shù)量以執(zhí)行預提交。在一些實施例中,可以調(diào)節(jié)分段大小以確保足夠的存儲器可用于預提交。然而,如果即使在如本文中描述的最小垃圾收集操作之后,仍沒有足夠的存儲器可用,則實施例可以簡單地返回存儲器不能被預提交的指示。

下面說明可以用于實施該功能的應(yīng)用編程接口(api)的細節(jié)。當實施用于預提交堆的多個部分的api時,可以考慮若干因素。這樣的因素可以包括預提交的部分的大小、預提交的部分應(yīng)當在哪里被提交(例如,loh、soh或兩者)、以及是否應(yīng)當執(zhí)行完全阻塞垃圾收集操作。

實施例可以包括允許開發(fā)人員指定預提交的部分的總大小的api。下面說明示例api調(diào)用:

publicstaticbooltrystartnogcregion(longtotalsize);

在該示例中,totalsize是開發(fā)人員在不觸發(fā)任何垃圾收集的情況下所期望分配的大小。注意,該大小包括在此期間發(fā)生的所有分配,即其包括框架代表用戶所做出的分配。對于gc,框架分配和終端用戶代碼分配之間沒有區(qū)別。

垃圾收集器通常區(qū)分大對象和其他較小對象。大對象被特別處理。如果是這樣,api可以給用戶選擇以指定大對象堆和小對象堆上的分配。以下是提交不執(zhí)行垃圾收集的區(qū)域的起點的api示例:

publicstaticbooltrystartnogcregion(longtotalsize,longlohsize);

在該示例中,開發(fā)人員可以指示總提交以提交總大小中總共有多少個字節(jié)將是loh提交。系統(tǒng)可以確保為loh預提交了那么多字節(jié),并且其余字節(jié)用于soh。在上面的示例中,開發(fā)人員通過在lohsize中指定loh預提交字節(jié)來實現(xiàn)。

在一些實施例中,如果沒有指定lohsize,則實施例可以實施保守的方法,并且將通過提交用于soh分配的totalsize以及用于loh分配的totalsize來提交(2*totalsize)總大小,以確保足夠量的存儲器。

在一些實施例中,如果沒有足夠的存儲器可用于提交期望的存儲器量,則默認行為是執(zhí)行完全阻塞gc以獲得更多的存儲器。但是,如果開發(fā)人員不想完全阻塞垃圾收集引發(fā)的中斷,由于這樣的操作可能需要大量的時間,開發(fā)人員可以規(guī)應(yīng)當不允許完全阻塞垃圾收集操作。考慮以下兩個示例api調(diào)用:

publicstaticbooltrystartnogcregion(longtotalsize,booldisallowfullblockinggc);

publicstaticbooltrystartnogcregion(longtotalsize,longlohsize,booldisallowfullblockinggc);

在這些示例中,通過指定disallowfullblockinggc為true,將不執(zhí)行完全阻塞gc操作。相反,如果需要更多存儲器,實施例可以嘗試提交所請求的存儲器而不使用gc阻塞操作或者使用最小阻塞gc操作。這例如對于負載平衡場景可能是有用的,其中如果api返回成功(指示所請求的提交已經(jīng)被執(zhí)行而無需執(zhí)行完全阻塞gc操作),則一個機器(例如,系統(tǒng)102(當被實施在多個這樣的系統(tǒng)之間時))可以適時地調(diào)用該api并且報告自己已經(jīng)準備好接受請求。備選地,如果api沒有返回成功,則機器可以具有對于其他機器的負載平衡器重定向請求。在這種情況下,機器可以在不處理請求時自行執(zhí)行完全阻塞gc。

如上所述,實施例可以允許api提供一個或多個返回值。在所示示例中,以下表示api可以返回的一些可能的返回值:

true-該返回值指示系統(tǒng)成功提交所需要的存儲器量,并且如果用戶使用小于或等于他們指定的量來分配對象,則他們不會被gc中斷。

false-該返回值指示沒有足夠的存儲器以提交指定的存儲器量。

argumentoutofrangeexception-該返回值指示系統(tǒng)無法允許用戶為soh請求多于一個分段大小的存儲器。

invalidoperationexception-該返回值指示過程已經(jīng)處于該模式,即某人已經(jīng)調(diào)用了startnogcregion。注意,在所示示例中,該調(diào)用不能嵌套。

api的實施例還可以包括用于結(jié)束不執(zhí)行垃圾收集的模式的功能。例如,api可以允許以下調(diào)用(或類似的調(diào)用)使得垃圾收集恢復為最初為針對環(huán)境的最初初始化狀態(tài):

publicstaticvoidendnogcregion();

api可以允許各種異常。以下說明了其可以在本文中作為invalidoperationexception而被提供和說明的異常的樣本。如果無gc區(qū)域模式?jīng)]有生效(例如,在所示示例中,如果startnogcregion未被調(diào)用或未成功),則可能會觸發(fā)此異常。備選地或附加地,當在調(diào)用endnogcregion(其結(jié)束無垃圾收集區(qū)域模式)之前引發(fā)垃圾收集操作時,可能會觸發(fā)此異常。備選地或附加地,當分配給對象的存儲器的量超過調(diào)用api時所指定的量時,可能會觸發(fā)此異常。

現(xiàn)在說明api的一個示例使用情況,用戶可以測試他們的場景,以計算出要在性能關(guān)鍵路徑上分配多少存儲器。當他們要進入這個路徑時,他們調(diào)用啟動api以使用他們需要分配的字節(jié)數(shù)來啟動“無gc區(qū)域”。在完成之后,他們調(diào)用結(jié)束api以結(jié)束此區(qū)域。在這個區(qū)域期間,如果用戶沒有超過他們指定的分配量,則垃圾收集操作將不會發(fā)生。

以下討論現(xiàn)在參考可以被執(zhí)行的多種方法和方法動作。盡管方法動作可以按照特定順序進行討論或者在流程圖中被圖示為以特定順序發(fā)生,但是除非因為動作取決于在該動作被執(zhí)行之前的另一動作被完成而具體地說明或需求,否則不需要特別的順序。

現(xiàn)在參考圖3,其圖示了方法300。該方法可以在實施垃圾收集的托管代碼計算環(huán)境中實踐。方法300包括用于控制垃圾收集操作的動作。

方法300包括建立垃圾收集以收集托管代碼環(huán)境中不再使用的對象(動作300)。例如,圖1圖示了垃圾收集器108。由于系統(tǒng)102運行諸如托管代碼應(yīng)用104等托管代碼應(yīng)用這一事實,垃圾收集器108可以被包括在系統(tǒng)102中。因此,由于系統(tǒng)102具有被建立并且初始化以在系統(tǒng)102上運行的垃圾收集器,因此系統(tǒng)102可以被配置為執(zhí)行垃圾收集活動。在沒有另外的干預的情況下,垃圾收集器108將嘗試根據(jù)需要(例如,當嘗試對象分配,并且在堆106中需要更多的存儲器空間以滿足嘗試的分配時)回收堆106中的存儲器。

方法300還包括接收指定期望的量的托管代碼輸入,在期望的量內(nèi)期望垃圾收集不被執(zhí)行(動作304)。如本文之前所說明的,這可以以很多不同的方式來實現(xiàn)。例如,在一些實施例中,可以指定要預提交的存儲器的數(shù)量。在備選環(huán)境中,用戶可以指定用戶希望不執(zhí)行垃圾收集活動的時間量。在這種情況下,系統(tǒng)可以嘗試提交一定數(shù)量的存儲器,這些存儲器應(yīng)當足夠在用戶指定的時間段內(nèi)分配對象。這可以基于歷史、統(tǒng)計、啟發(fā)式等分析,這些分析基于預期要由系統(tǒng)執(zhí)行的操作類型。注意,不同的實施例具有不同的保證級別。例如,當存儲器被預提交時,系統(tǒng)可以保證只要不超出預提交來分配對象,就不會發(fā)生垃圾收集。相反,當實施例僅做出基于啟發(fā)的猜測時,這將不是保證。

方法300還可以包括執(zhí)行計算操作以確定期望的量很可能能夠被滿足(動作306)。例如,這可以包括分析可用的存儲器并且確定在不執(zhí)行垃圾收集操作的情況下量很可能被滿足。附加地或備選地,這可以包括系統(tǒng)提交經(jīng)確定的存儲器數(shù)量來確保在不執(zhí)行垃圾收集操作的情況下運行操作的能力。如果用戶指定了在不運行垃圾收集操作的情況下應(yīng)當運行的存儲器分配的量,則實施例可以預提交一定數(shù)量的存儲器,并且因此可以保證只要對象分配保持低于指定的存儲器量,則垃圾收集操作將不會運行。

方法300還包括在量內(nèi)運行存儲器操作而不運行初始化的垃圾收集。

方法300可以在計算操作包括完全停用經(jīng)建立的垃圾收集的情況下被實踐。因此,例如,系統(tǒng)102中的垃圾收集器108可以被完全停用,使得無論存儲器堆106中發(fā)生什么,垃圾收集都將不會發(fā)生。盡管這可能導致存儲堆106中的錯誤,但是實施例可以允許這樣的功能被實施。

方法300還可以包括接收指定垃圾收集可以運行的輸入,并且因此按照所建立的垃圾收集執(zhí)行垃圾收集操作。因此,例如,在一些實施例中,如果垃圾收集器108已經(jīng)被停用,則可以重新啟用垃圾收集器108?;蛘?,因為用戶指定的量已經(jīng)被滿足,垃圾收集器108可以運行。

如上所述,方法300可以被實踐,其中用于確定期望的量很可能能夠被滿足的操作包括:對存儲器執(zhí)行啟發(fā)式分析以基于對存儲器的過去的操作來確定期望的量很可能被滿足。因此,例如,實施例可以歷史上地分析在托管應(yīng)用的實例運行時發(fā)生了什么,并且基于該歷史來確定量是否很可能能夠被滿足。

方法300可以被實踐,其中用于確定期望的量很可能能夠被滿足的操作包括:提交用于稍后的對象分配的一個或多個存儲器區(qū)域來滿足期望的量。例如,本文中之前描述的api可以用于提交該量大小的堆106的部分。下面將說明各種備選方案。

因此,方法300可以被實踐,其中輸入指定要提交的存儲器大小。在該實施例的一些這樣的示例中,方法300還可以包括:基于輸入,提交至少在大對象堆中指定的存儲器大小以及至少在小對象堆中指定的存儲器大小。因此,至少兩倍于輸入中指定的存儲器大小的量在大對象堆和小對象堆的組合之間被提交。這在圖2中被圖示。圖2圖示了堆106。堆106包括小對象堆106-1和大對象堆106-2。由于在用戶輸入中僅指定了總存儲器大小,所以系統(tǒng)102不知道大對象堆或小對象堆中的存儲器是否應(yīng)當被提交。因此,系統(tǒng)可以提交小對象堆106-1中的部分112-1和大對象堆106-2中的部分112-2。

在備選實施例中,輸入指定可以用于標識要提交的總存儲器大小、針對小對象堆要提交的存儲器大小、和針對大對象堆要提交的存儲器大小的信息。在上面的api示例中,這是通過指定在存儲器(特別是堆)中提交的總大小和在大對象堆中提交的大小來完成的,從中可以通過簡單的減法來計算要在小對象堆中提交的大小。然而,各種備選方案可以被使用。例如,實施例可以允許用戶指定要在存儲器中提交的總大小以及要在小對象堆中提交的大小。在另一備選方案中,實施例可以允許用戶指定要在大對象堆中提交的大小以及要在小對象堆中提交的大小。在任何情況下,指定可以被用于表示要提交的總存儲器大小、針對小對象堆要提交的存儲器大小、和針對大對象堆要提交的存儲器大小的信息的輸入被執(zhí)行,使得至少在輸入中的信息中指定的總存儲器大小在大對象堆和小對象堆的組合之間被提交。

在方法300的一些實施例中,方法可以被實踐,其中輸入指定在提交所指定的存儲器大小時應(yīng)當停用完全阻塞垃圾收集。這可以針對非常時間敏感的應(yīng)用來被執(zhí)行,該應(yīng)用期望執(zhí)行完全垃圾收集操作的昂貴的操作不應(yīng)當被執(zhí)行。

在其中接收到指定在提交所指定的存儲器大小時應(yīng)當停用完全阻塞垃圾收集的輸入的一些這樣的實施例中,方法300還可以包括:確定存在足夠的存儲器空間來用于在提交空間之前不運行任何垃圾收集的情況下提交所指定的存儲器大小,并且因此至少提交存儲器中指定的存儲器大小。

備選地,在其中接收到指定在提交所指定的存儲器大小時應(yīng)當停用完全阻塞垃圾收集的輸入的一些這樣的實施例中,方法300可以確定在不運行任何垃圾收集的情況下,沒有足夠的空間來提交所指定的存儲器大??;因此,執(zhí)行最小阻塞垃圾收集以獲取小對象堆中的連續(xù)的存儲器區(qū)域;確定連續(xù)的存儲器區(qū)域足以提交所指定的存儲器大??;因此,至少提交所指定的存儲器大小。在備選示例中,系統(tǒng)可以執(zhí)行年輕一代(younggeneration)收集以收集堆的部分。各種其他備選方案可以在備選或附加實施例中被實施。

方法300可以確定沒有足夠的存儲器空間來提交所指定的存儲器大小,并且因此返回指示未提交存儲器的指示符。這可以在各種備選方案中被執(zhí)行。例如,在一些實施例中,這可以在完全阻塞被停用并且不嘗試最小垃圾收集的情況下被執(zhí)行。備選地,這可以在執(zhí)行完全阻塞或最小垃圾收集并且確定仍然沒有足夠的存儲器來提交所請求的大小之后發(fā)生。

在方法300的一些實施例中,根據(jù)權(quán)利要求6所述的方法還包括:返回指示所指定的存儲器大小在存儲器中被提交的指示符。例如,如上所述,當用戶指定的存儲器的量能夠被提交時,將從調(diào)用api返回true值。

此外,該方法可以由包括一個或多個處理器和諸如計算機存儲器等計算機可讀介質(zhì)的計算機系統(tǒng)來實踐。特別地,計算機存儲器可以存儲當被一個或多個處理器執(zhí)行時使得各種功能(諸如實施例中描述的動作)被執(zhí)行的計算機可執(zhí)行指令。

如下面更詳細地討論的,本發(fā)明的實施例可以包括或利用包括計算機硬件的專用或通用計算機。在本發(fā)明范圍內(nèi)的實施例還包括用于攜帶或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。這樣的計算機可讀介質(zhì)能夠是由通用或?qū)S糜嬎銠C系統(tǒng)可訪問的任何可用介質(zhì)。存儲計算機可執(zhí)行指令的計算機可讀介質(zhì)是物理存儲介質(zhì)。攜帶計算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。因此,作為示例而非限制,本發(fā)明的實施例可以包括至少兩種明顯不同類型的計算機可讀介質(zhì):物理計算機可讀存儲介質(zhì)和傳輸計算機可讀介質(zhì)。

物理計算機可讀存儲介質(zhì)包括ram、rom、eeprom、cd-rom或其他光盤存儲器(諸如cd、dvd等)、磁盤存儲裝置或其他磁存儲設(shè)備、或者可以用于以計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的形式來存儲期望的程序代碼手段并且能夠由通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)。

“網(wǎng)絡(luò)”被定義為使得能夠在計算機系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳送電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡(luò)或另一通信連接(硬連線、無線、或者硬連線或無線的組合)被傳輸或提供給計算機時,計算機將連接正確地視為傳輸介質(zhì)。傳輸介質(zhì)可以包括網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路,網(wǎng)絡(luò)或數(shù)據(jù)鏈路可以被用于以計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的形式攜帶或存儲期望的程序代碼裝置,并且其可以由通用或?qū)S糜嬎銠C訪問。以上的組合也被包括在計算機可讀介質(zhì)的范圍內(nèi)。

此外,在到達各種計算機系統(tǒng)部件時,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼手段被自動地從傳輸計算機可讀介質(zhì)傳送到物理計算機可讀存儲介質(zhì)(反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可以被緩沖在網(wǎng)絡(luò)接口模塊(例如,“nic”)內(nèi)的ram中,并且然后最終被傳送到計算機系統(tǒng)ram和/或計算機系統(tǒng)處的較低易失性計算機可讀物理存儲介質(zhì)。因此,計算機可讀物理存儲介質(zhì)可以被包括在也(或甚至主要)利用傳輸介質(zhì)的計算機系統(tǒng)部件中。

計算機可執(zhí)行指令包括例如使得通用計算機、專用計算機或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或功能組的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制文件、中間格式指令(諸如匯編語言)、或者甚至源代碼。雖然主題已經(jīng)用特定于結(jié)構(gòu)特征和/或方法動作的語言被描述,但是應(yīng)當理解,所附權(quán)利要求中限定的主題不必限于以上描述的特征或動作。相反,所描述的特征和動作作為實現(xiàn)權(quán)利要求的示例形式被公開。

本領(lǐng)域技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡(luò)計算環(huán)境中實踐,包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費電子產(chǎn)品、網(wǎng)絡(luò)pc、小型計算機、大型計算機、移動電話、pda、尋呼機、路由器、交換機等。本發(fā)明還可以在分布式系統(tǒng)環(huán)境中被實踐,其中通過網(wǎng)絡(luò)鏈接(通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路、或通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠程計算機系統(tǒng)都執(zhí)行任務(wù)。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠程存儲設(shè)備二者中。

備選地或附加地,本文中描述的功能可以至少部分地由一個或多個硬件邏輯部件來執(zhí)行。作為示例而非限制,可以使用的說明性類型的硬件邏輯部件包括現(xiàn)場可編程門陣列(fpga)、特定應(yīng)用集成電路(asic)、特定應(yīng)用標準產(chǎn)品(assp)、片上系統(tǒng)(soc)、復雜可編程邏輯器件(cpld)等。

在不脫離本發(fā)明的精神或特征的情況下,本發(fā)明可以以其他具體形式來實施。所描述的實施例在所有方面被認為僅是說明性的而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求而不是之前的描述來指示。在權(quán)利要求的等同的含義和范圍內(nèi)的所有變化都將被包括在其范圍內(nèi)。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
龙里县| 政和县| 禄劝| 潼关县| 青川县| 沙坪坝区| 宽城| 平江县| 瓦房店市| 海伦市| 来宾市| 清水县| 邢台县| 衡南县| 义马市| 贡觉县| 和田市| 大荔县| 乐陵市| 松阳县| 苏尼特左旗| 惠水县| 漾濞| 进贤县| 格尔木市| 呈贡县| 根河市| 龙州县| 湄潭县| 昌吉市| 探索| 东乡| 重庆市| 浑源县| 土默特右旗| 出国| 鹤山市| 太湖县| 石阡县| 马龙县| 灌阳县|