專利名稱:一種用于實現(xiàn)應(yīng)用程序的細(xì)粒度性能配置的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及應(yīng)用程序配置,尤其涉及一種用于實現(xiàn)應(yīng)用程序的細(xì)粒度性能配置的方法和系統(tǒng)。
背景技術(shù):
面向?qū)ο蟮某绦蛟O(shè)計(Object-oriented programming,縮寫00P)是一種程序設(shè)計范型,同時也是一種程序開發(fā)的方法論。面向?qū)ο蟮某绦蛟O(shè)計的一條基本原則是,計算機程序是由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成,它將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴展性。為了實現(xiàn)整體運算,每個對象都能夠接收信息、處理數(shù)據(jù)和向其他對象發(fā)送信息。在面向?qū)ο蟮某绦蛟O(shè)計中,常常使用類(class)來封裝特定函數(shù)。類是一種面向?qū)ο笥嬎銠C編程語言的構(gòu)造,是創(chuàng)建對象的藍圖,描述了所創(chuàng)建的對象共同的屬性和方法。 一個對象所包含的所有數(shù)據(jù)和代碼可以通過類來構(gòu)造。類的更為嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。它描述了一些對象的行為規(guī)則,而這些對象就被稱為該類的實例。類有接口和結(jié)構(gòu)。接口描述了如何通過方法與類及其實例互操作,而結(jié)構(gòu)描述了一個實例中數(shù)據(jù)如何劃分為多個屬性。類是與某個層的對象的最具體的類型。類還可以有運行時表示形式(元對象),它為操作與類相關(guān)的元數(shù)據(jù)提供了運行時支持。在這些類中,存在著一些性能敏感的類,例如收集工具類(collection utility classes),對于這些性能敏感的類,其配置不同,所導(dǎo)致的運行時的性能行為也很不同。一些配置可以使類運行得更快,但會消耗更多的存儲器,一些配置可以使類消耗更少的存儲器,但會運行得較慢。這些配置的一部分可以通過類的某些API (應(yīng)用編程接口)顯示出來, 而另一些配置對于開發(fā)人員來說通常是隱藏的。以 Java 中的 ArrayList 為例,其具有構(gòu)造器ArrayList (intialCapacity),該構(gòu)造器允許開發(fā)人員清楚地指定其內(nèi)部數(shù)據(jù)結(jié)構(gòu)的初始尺寸。然而,還有一些隱藏的配置,也能夠影響ArrayList的性能行為、例如尺寸增長策略和伴隨的參數(shù),即,其可以以固定步調(diào)增長,在保守情況下增長10,而在激進情況下增長100 ;其也可以以倍數(shù)方式增長,在保守情況下增長1. 1倍,在激進情況下增長2倍。而這些對于開發(fā)人員來說是不可見的。而根據(jù)應(yīng)用程序所運行的場景不同,對于應(yīng)用程序代碼的性能會有不同的要求, 例如,當(dāng)開發(fā)人員知道一個HashMap實例要用到一個熱點寄存器中時,他希望它即使在消耗更多存儲器的情況下也能夠運行得更快。而在ClassA (類A)是一個Daemon類的情況下, 他希望它消耗盡可能少的存儲器,即使這會使其運行得更慢?;蛘?,有時候我們希望能夠讓這個應(yīng)用程序快速啟動。然而,當(dāng)前并沒有一種簡單統(tǒng)一的方法來對應(yīng)用程序進行細(xì)粒度的性能配置,從而滿足上述場景的需求。
發(fā)明內(nèi)容
鑒于已有技術(shù)的不足,在此提出了本發(fā)明的各項實施例。本發(fā)明的核心思想是要提供一種簡單、靈活并且統(tǒng)一的方法來實現(xiàn)應(yīng)用程序代碼的細(xì)粒度的性能配置。首先,類庫可以是性能知曉的(performance-aware),即,其對于不同的性能策略,可以具有不同的行為,例如速度優(yōu)先、存儲器優(yōu)先,等等。然后,應(yīng)用程序開發(fā)人員可以在不同范圍指定性能偏好,包括全局范圍、單個類范圍、單個方法范圍和單個實例范圍,等等。在運行時,該偏好在指定范圍內(nèi)傳播,例如,在該范圍內(nèi)執(zhí)行的所有代碼都可以查詢當(dāng)前的性能偏好并相應(yīng)地按照該性能偏好執(zhí)行。根據(jù)本發(fā)明的一個實施例,提供了一種用于實現(xiàn)應(yīng)用程序的細(xì)粒度性能配置的方法。該方法包括對于應(yīng)用程序中性能敏感的類,設(shè)置至少一個性能偏好;基于所設(shè)置的至少一個性能偏好,指定所述類在所述應(yīng)用程序中的性能偏好傳播策略;以及,根據(jù)所述性能偏好傳播策略調(diào)用所述類來對應(yīng)用程序進行性能配置。其中,根據(jù)本發(fā)明的另一個實施例, 對于所設(shè)置的至少一個性能偏好,進一步設(shè)置用于所述至少一個性能偏好的傳播范圍,從而基于用于所述至少一個性能偏好的傳播范圍來指定所述類在所述應(yīng)用程序中的性能偏好傳播策略。依據(jù)本發(fā)明的另一個實施例,可以將所述性能偏好傳播策略與所述應(yīng)用程序運行時所處的性能環(huán)境相關(guān)聯(lián)。并且,根據(jù)所述應(yīng)用程序所處的性能環(huán)境,確定所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略,以及,基于所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略,調(diào)用所述類。根據(jù)本發(fā)明的另一個實施例,提供了一種用于實現(xiàn)應(yīng)用程序的細(xì)粒度性能配置的系統(tǒng),包括性能偏好設(shè)置裝置,用于對于應(yīng)用程序中性能敏感的類,設(shè)置至少一個性能偏好;性能偏好傳播策略指定裝置,用于基于所設(shè)置的至少一個性能偏好,指定所述類在所述應(yīng)用程序中的性能偏好傳播策略;以及,性能配置裝置,用于根據(jù)所述性能偏好傳播策略調(diào)用所述類來對應(yīng)用程序進行性能配置。通過根據(jù)本發(fā)明的各個具體實施例的方法和系統(tǒng),可以使得開發(fā)人員能夠細(xì)粒度地配置應(yīng)用程序代碼的性能偏好,簡單、靈活地以不同粒度配置性能,并且不需要對單個類進行復(fù)雜的配置。
通過對附圖中本發(fā)明示例實施例方式的更詳細(xì)描述,本發(fā)明的上述、以及其它目的、特征和優(yōu)勢將變得更加明顯。圖1顯示了依據(jù)本發(fā)明的一個實施例的用于實現(xiàn)應(yīng)用程序代碼的細(xì)粒度性能配置的方法;圖2顯示了依據(jù)本發(fā)明的另一個實施例的用于實現(xiàn)應(yīng)用程序代碼的細(xì)粒度性能配置的方法;以及圖3示出了依據(jù)本發(fā)明的一個實施例的用于實現(xiàn)應(yīng)用程序代碼的細(xì)粒度性能配置的系統(tǒng)。
具體實施方式
以下參照按照本發(fā)明實施例的方法、系統(tǒng)描述本發(fā)明。其中,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器, 從而生產(chǎn)出一種機器,使得通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行的這些指令,產(chǎn)生實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置(means)。也可以把這些計算機程序指令存儲在能指令計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令產(chǎn)生一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instruction means) 的制造品。還可以把計算機程序指令加載到計算機或其它可編程數(shù)據(jù)處理裝置上,使得在計算機或其它可編程數(shù)據(jù)處理裝置上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而在計算機或其它可編程裝置上執(zhí)行的指令就提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。雖然在說明書中以Java的工具類ArrayList為例進行了描述,然而,本領(lǐng)域技術(shù)人員應(yīng)該認(rèn)識到,本發(fā)明的各個實施方式不僅可以運用在一切Java類庫和Java類之中,也可以使用在C++,C#等面向?qū)ο笳Z言類庫和開發(fā)包中,而不僅限于這里所描述的 ArrayList0下面將針對附圖具體描述依據(jù)本發(fā)明的實施例。圖1顯示了依據(jù)本發(fā)明的一個實施例的用于實現(xiàn)應(yīng)用程序代碼的細(xì)粒度性能配置的方法。該方法開始于步驟S110。在步驟S120,對于應(yīng)用程序中性能敏感的類,設(shè)置至少一個性能偏好。該性能敏感的類可以由類庫開發(fā)者識別和指定,也可以通過程序自動檢測來識別。例如,類庫開發(fā)者通過觀察測試或者實踐經(jīng)驗,發(fā)現(xiàn)ArrayList類在大規(guī)模應(yīng)用中占有巨大比例,它的性能對整個程序的性能影響較大,可以將其認(rèn)為是性能敏感的類。對于該性能敏感的類,所設(shè)置的性能偏好使得所識別出的類是性能知曉的 (performance-aware),這些性能偏好的例子可以包括“強烈偏好速度(Aggressively Prefer Speed) ”、“偏好速度(I^referSpeed) ”、“正常(Normal) ”、“偏好較少存儲器 O^refer Memory)”、“強烈偏好較少存儲器(Aggressively Prefer Memory)”,等等。這些性能敏感的類可以通過設(shè)置不同的參數(shù)值來設(shè)置不同的性能偏好。在運行時,則使用對應(yīng)于當(dāng)前有效偏好設(shè)置的值,從而以開發(fā)人員所偏好的方式來運行。通常這些參數(shù)值僅僅影響實例構(gòu)造,但也不僅限于實例構(gòu)造。例如,對于類ArrayList,可以找到ArrayList中影響性能和內(nèi)存占用的配置信息,定義一套適合于不同性能環(huán)境的參數(shù)。比如在ArrayList中有一個默認(rèn)數(shù)組大小,初始值為16。我們可以進一步將其定義為Default-size = 16(缺省-尺寸=16)Prefer Speed-size = 1 (偏好速度-尺寸=128)Prefer Memory-size = 2 (偏好較少存儲器 _ 尺寸=2)從而在偏好速度的場景下,將該數(shù)組大小設(shè)置為128,在偏好較少存儲器的場景下,將該數(shù)據(jù)大小設(shè)置為2。
一個性能知曉的類可以具有一個缺省偏好和一個或多個可配置的偏好選項。每個偏好選項代表一個類在運行時的一個特別的策略。一種典型的實現(xiàn)方式是采用如下的配置文件??梢杂深悗扉_發(fā)人員負(fù)責(zé)生成配置文件,從而使得該配置文件對于應(yīng)用程序開發(fā)人員來說是透明的。
權(quán)利要求
1.一種用于實現(xiàn)應(yīng)用程序的性能配置的方法,包括對于應(yīng)用程序中性能敏感的類,設(shè)置至少一個性能偏好;基于所設(shè)置的至少一個性能偏好,指定所述類在所述應(yīng)用程序中的性能偏好傳播策略;以及根據(jù)所述性能偏好傳播策略調(diào)用所述類來對應(yīng)用程序進行性能配置。
2.如權(quán)利要求1所述的方法,所述設(shè)置至少一個性能偏好包括通過設(shè)置不同的參數(shù)值來設(shè)置所述至少一個性能偏好。
3.如權(quán)利要求1所述的方法,進一步包括 對于所設(shè)置的至少一個性能偏好,設(shè)置所述至少一個性能偏好的傳播范圍;其中,所述基于所設(shè)置的至少一個性能偏好,指定所述類在所述應(yīng)用程序中的性能偏好傳播策略進一步包括基于所述至少一個性能偏好的傳播范圍來指定所述類在所述應(yīng)用程序中的性能偏好傳播策略。
4.如權(quán)利要求1至3中任何一個所述的方法,其中,所述性能偏好傳播策略與所述應(yīng)用程序運行時所處的性能環(huán)境相關(guān)聯(lián)。
5.如權(quán)利要求4所述的方法,其中,根據(jù)所述性能偏好傳播策略調(diào)用所述類來對應(yīng)用程序進行性能配置進一步包括根據(jù)所述應(yīng)用程序所處的性能環(huán)境,確定所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略,以及,基于所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略,調(diào)用所述類。
6.如權(quán)利要求1所述的方法,其中,所述指定所述類在所述應(yīng)用程序中的性能偏好傳播策略包括將所述性能偏好傳播策略寫入所述類的一個策略配置文件。
7.如權(quán)利要求1所述的方法,其中,所述指定所述類在所述應(yīng)用程序中的性能偏好傳播策略包括將所述性能偏好傳播策略寫入所述應(yīng)用程序的代碼注釋部分。
8.如權(quán)利要求1所述的方法,其中,所述指定所述類在所述應(yīng)用程序中的性能偏好傳播策略包括在預(yù)先定義好的API中設(shè)置所述性能偏好傳播策略。
9.如權(quán)利要求3所述的方法,其中,所述性能偏好的傳播范圍包括下列中的至少一種 全局范圍,類范圍,方法范圍,實例范圍。
10.一種用于實現(xiàn)應(yīng)用程序的性能配置的系統(tǒng),包括性能偏好設(shè)置裝置,用于對于應(yīng)用程序中性能敏感的類,設(shè)置至少一個性能偏好;性能偏好傳播策略指定裝置,用于基于所設(shè)置的至少一個性能偏好,指定所述類在所述應(yīng)用程序中的性能偏好傳播策略;以及性能配置裝置,用于根據(jù)所述性能偏好傳播策略調(diào)用所述類來對應(yīng)用程序進行性能配置。
11.如權(quán)利要求10所述的系統(tǒng),其中,所述性能偏好設(shè)置裝置通過設(shè)置不同的參數(shù)值來設(shè)置所述至少一個性能偏好。
12.如權(quán)利要求10所述的系統(tǒng),其中,性能偏好設(shè)置裝置對于所設(shè)置的至少一個性能偏好,進一步設(shè)置所述至少一個性能偏好的傳播范圍;其中,所述性能偏好傳播策略指定裝置還基于所述至少一個性能偏好的傳播范圍來指定所述類在所述應(yīng)用程序中的性能偏好傳播策略。
13.如權(quán)利要求10至12中任何一個所述的系統(tǒng),其中,所述性能偏好傳播策略與所述應(yīng)用程序運行時所處的性能環(huán)境相關(guān)聯(lián)。
14.如權(quán)利要求13所述的系統(tǒng),其中,所述性能配置裝置進一步包括用于根據(jù)所述應(yīng)用程序所處的性能環(huán)境,確定所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略的裝置,以及,基于所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略,調(diào)用所述類基于所述與性能環(huán)境相關(guān)聯(lián)的性能偏好傳播策略調(diào)用所述類的裝置。
15.如權(quán)利要求10所述的系統(tǒng),其中,所述性能偏好傳播策略指定裝置將所述性能偏好傳播策略寫入所述類的一個策略配置文件。
16.如權(quán)利要求10所述的系統(tǒng),其中,所述性能偏好傳播策略指定裝置將所述性能偏好傳播策略寫入所述應(yīng)用程序的代碼注釋部分。
17.如權(quán)利要求10所述的系統(tǒng),其中,所述性能偏好傳播策略指定裝置在預(yù)先定義好的API中設(shè)置所述性能偏好傳播策略。
18.如權(quán)利要求12所述的系統(tǒng),其中,所述性能偏好的傳播范圍包括下列中的至少一種全局范圍,類范圍,方法范圍,實例范圍。
全文摘要
本發(fā)明涉及一種用于實現(xiàn)應(yīng)用程序的細(xì)粒度性能配置的方法和系統(tǒng)。該方法對于應(yīng)用程序中性能敏感的類,設(shè)置至少一個性能偏好;基于所設(shè)置的至少一個性能偏好,指定所述類在所述應(yīng)用程序中的性能偏好傳播策略;以及,根據(jù)所述性能偏好傳播策略調(diào)用所述類來對應(yīng)用程序進行性能配置。通過根據(jù)本發(fā)明的實施例的方法和系統(tǒng),使得開發(fā)人員能夠細(xì)粒度地配置應(yīng)用程序代碼的性能偏好。
文檔編號G06F9/44GK102446092SQ201010506468
公開日2012年5月9日 申請日期2010年9月30日 優(yōu)先權(quán)日2010年9月30日
發(fā)明者呂晶, 吳玥顥, 徐睿智, 蔡俊杰 申請人:國際商業(yè)機器公司