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

用于在爪哇程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng)和方法

文檔序號(hào):6380635閱讀:205來源:國(guó)知局
專利名稱:用于在爪哇程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種用于在Java(爪哇)程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng)和方法,特別涉及一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng)和方法,其中當(dāng)執(zhí)行Java程序時(shí)頻繁使用的字節(jié)代碼就被編譯,并且當(dāng)在將來使用到該Java程序時(shí),所得的本機(jī)代碼就被重新得到并運(yùn)行,因而縮短了該本機(jī)代碼的編譯時(shí)間。
背景技術(shù)
一般來講,由Java程序源代碼的編譯過程產(chǎn)生的字節(jié)代碼是由Java虛擬機(jī)(JVM)執(zhí)行的。最近,為了增強(qiáng)Java虛擬機(jī)的執(zhí)行速度,用CPU將字節(jié)代碼解譯為可直接運(yùn)行的本機(jī)代碼的方法已經(jīng)被廣泛地使用。
在這些方法中,在動(dòng)態(tài)自適應(yīng)編譯(DAC)中,字節(jié)代碼被解譯而那些被頻繁使用的、被分類為瓶頸字節(jié)代碼的字節(jié)代碼,被編譯為本機(jī)代碼以執(zhí)行。即,DAC方法只將頻繁使用的字節(jié)代碼編譯為本機(jī)代碼,而不是程序中的所有字節(jié)代碼。
然而,這里的問題是,一旦缺少內(nèi)存,在字節(jié)代碼執(zhí)行期間所產(chǎn)生的本機(jī)代碼就會(huì)被垃圾收集器收集,而且,由于在Java程序被完全運(yùn)行以后所有的本機(jī)代碼都被刪除,而不能在將來的執(zhí)行中再次使用。
因?yàn)榇蟛糠衷?jīng)被編譯為本機(jī)代碼的字節(jié)代碼傾向于為將來的運(yùn)行而被重復(fù)編譯,這里的問題是刪除本機(jī)代碼導(dǎo)致了在將來的運(yùn)行中所用的本機(jī)代碼的重復(fù)產(chǎn)生。因此,在譬如具有低性能CPU和低容量電池的移動(dòng)終端的系統(tǒng)中,傳統(tǒng)方法的問題在于系統(tǒng)的響應(yīng)時(shí)間增加和電池迅速地消耗。

發(fā)明內(nèi)容
本發(fā)明就是用來解決上述問題的。本發(fā)明的一個(gè)目的是提供一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng)和方法,其中當(dāng)運(yùn)行Java程序時(shí)對(duì)頻繁使用的相關(guān)字節(jié)代碼進(jìn)行編譯,并且所得本機(jī)代碼被存儲(chǔ),因而,當(dāng)將來運(yùn)行該Java程序,時(shí)相關(guān)字節(jié)代碼的本機(jī)代碼就能被重新獲得和執(zhí)行。
本發(fā)明的另一個(gè)目的是提供一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng)和方法,縮短了在具有低性能CPU和低容量電池的設(shè)備中Java程序的編譯時(shí)間和執(zhí)行時(shí)間,因此減少了對(duì)用戶的響應(yīng)時(shí)間并保存了電池能量。
根據(jù)本發(fā)明的一個(gè)示例方面,為了達(dá)到上述目的,提供了一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng),該系統(tǒng)包括類裝載器單元,用于裝載通過編譯Java程序源代碼所產(chǎn)生的字節(jié)代碼;第一存儲(chǔ)器單元,用于在可訪問狀態(tài)下保持由類裝載器單元裝載的字節(jié)代碼和通過編譯該字節(jié)代碼所產(chǎn)生的本機(jī)代碼;第二存儲(chǔ)器單元,用于在可訪問狀態(tài)下存儲(chǔ)裝載在第一存儲(chǔ)器單元中的本機(jī)代碼;本機(jī)代碼管理器單元,用于根據(jù)類裝載器單元的請(qǐng)求,搜索存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼,并將搜索到的本機(jī)代碼裝載在第一存儲(chǔ)器單元中;以及執(zhí)行單元,用于在可訪問狀態(tài)下執(zhí)行裝載在第一存儲(chǔ)器單元中的本機(jī)代碼。
另外,根據(jù)本發(fā)明的另一個(gè)示例方面,提供了一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的方法,該方法包括步驟由類裝載器單元裝載編譯的字節(jié)代碼;請(qǐng)求本機(jī)代碼管理器單元搜索對(duì)應(yīng)于裝載的字節(jié)代碼的本機(jī)代碼;在第二存儲(chǔ)器單元中搜索請(qǐng)求的本機(jī)代碼;將搜索到的本機(jī)代碼發(fā)送到第一存儲(chǔ)器單元;以及,由代碼執(zhí)行單元執(zhí)行發(fā)送的本機(jī)代碼。


通過對(duì)下面結(jié)合了附圖的說明性、非限定實(shí)施例的說明,本發(fā)明的以上和其它目的和特征將變得更加清楚,其中圖1是示意地說明用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的示例系統(tǒng)的方框圖;以及圖2是示意地說明用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的示例方法的流程圖。
具體實(shí)施例方式
下面,將結(jié)合附圖對(duì)本發(fā)明的說明性、非限定實(shí)施例進(jìn)行詳細(xì)的說明。
圖1是示意地說明用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的示例系統(tǒng)的方框圖。該系統(tǒng)包括類裝載單元100;第一存儲(chǔ)器單元200;本機(jī)代碼管理器單元300;第二存儲(chǔ)器單元400;執(zhí)行單元500和垃圾收集單元600。
類裝載器單元100裝載通過編譯Java程序源代碼產(chǎn)生的字節(jié)代碼。這里,最初位于輔助存儲(chǔ)器單元中的字節(jié)代碼被裝載在Java虛擬機(jī)中。
第一存儲(chǔ)器單元200在可訪問狀態(tài)下保持由類裝載器單元100裝載的字節(jié)代碼和通過編譯該字節(jié)代碼所產(chǎn)生的本機(jī)代碼。即,由類裝載器單元100裝載的字節(jié)代碼和通過編譯該字節(jié)代碼所產(chǎn)生的本機(jī)代碼被存儲(chǔ)在預(yù)定的存儲(chǔ)區(qū)域,所以隨后描述的執(zhí)行單元500能夠訪問存儲(chǔ)的本機(jī)代碼。
第二存儲(chǔ)器單元400在可訪問狀態(tài)下存儲(chǔ)裝載在第一存儲(chǔ)器單元200中的本機(jī)代碼。
本機(jī)代碼管理器單元300將已經(jīng)存儲(chǔ)在第一存儲(chǔ)器單元200中的本機(jī)代碼存儲(chǔ)到第二存儲(chǔ)器單元400。本機(jī)代碼管理器單元300根據(jù)類裝載器單元100的請(qǐng)求搜索存儲(chǔ)在第二存儲(chǔ)器單元400中的本機(jī)代碼,并將搜索到的本機(jī)代碼裝載在第一存儲(chǔ)器單元200中。本機(jī)代碼管理器單元300通過使用最近最少使用的(least recently used,LRU)方法管理存儲(chǔ)在第二存儲(chǔ)器單元400的本機(jī)代碼。在LRU方法中,在存儲(chǔ)的本機(jī)代碼中很少使用的本機(jī)代碼按照它們罕有使用的順序被檢驗(yàn)并刪除。這里,很少使用的本機(jī)代碼被刪除,例如基于當(dāng)它們被存儲(chǔ)時(shí)的存儲(chǔ)大小和時(shí)間。
執(zhí)行單元500在可訪問的狀態(tài)下運(yùn)行裝載在第一存儲(chǔ)器單元200中的本機(jī)代碼和字節(jié)代碼,執(zhí)行單元500包括字節(jié)解譯器510;運(yùn)行時(shí)間解析器520;本機(jī)代碼編譯器530和本機(jī)代碼執(zhí)行器540。
字節(jié)代碼解譯器510在可訪問的狀態(tài)下對(duì)裝載在第一存儲(chǔ)器單元200中的字節(jié)代碼進(jìn)行解譯并執(zhí)行解譯的字節(jié)代碼。
運(yùn)行時(shí)間解析器520檢驗(yàn)由字節(jié)代碼解譯器510解譯的字節(jié)代碼是否是頻繁使用的字節(jié)代碼,并將檢驗(yàn)結(jié)果報(bào)告給本機(jī)代碼編譯器530。本機(jī)代碼編譯器530通過對(duì)解譯的字節(jié)代碼進(jìn)行編譯產(chǎn)生本機(jī)代碼。此外,如果運(yùn)行時(shí)間解析器520確認(rèn)該字節(jié)代碼是頻繁使用的字節(jié)代碼,則本機(jī)代碼編譯器530將編譯的本機(jī)代碼裝載在第一存儲(chǔ)器單元200中。
本機(jī)代碼運(yùn)行器540執(zhí)行由本機(jī)代碼管理器單元300裝載在第一存儲(chǔ)器單元中的本機(jī)代碼。
垃圾收集單元600在第一存儲(chǔ)器單元200中自動(dòng)地收集被不用的代碼占用的空間以在第一存儲(chǔ)器單元200中獲得更多的空間。如果即使在垃圾收集單元600收集了被不用的代碼占用的空間之后在第一存儲(chǔ)器單元200中還是發(fā)生了空間短缺,垃圾收集單元600請(qǐng)求本機(jī)代碼管理單元300將本機(jī)代碼存儲(chǔ)到第二存儲(chǔ)器單元400中。
圖2是根據(jù)本發(fā)明的示意地說明用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的示例方法的流程圖。
首先,類裝載器單元100裝載由編譯Java程序源代碼所產(chǎn)生的字節(jié)代碼(S100)并請(qǐng)求本機(jī)代碼管理器單元300搜索對(duì)應(yīng)裝載的字節(jié)代碼的本機(jī)代碼(S110)。然后,本機(jī)代碼管理器單元300在第二存儲(chǔ)器單元400中搜索請(qǐng)求的本機(jī)代碼(S120)。
當(dāng)在第二存儲(chǔ)器單元400中找到對(duì)應(yīng)的本機(jī)代碼時(shí)(S130),搜索到的本機(jī)代碼發(fā)送到第一存儲(chǔ)器單元200(S132)。然后,本機(jī)代碼運(yùn)行器540運(yùn)行發(fā)送到第一存儲(chǔ)器單元200的本機(jī)代碼(S134)。這里,存儲(chǔ)在第二存儲(chǔ)器單元400中的本機(jī)代碼就是在Java程序中通過對(duì)頻繁使用的字節(jié)代碼進(jìn)行編譯所產(chǎn)生的本機(jī)代碼。
在本發(fā)明,存儲(chǔ)在第二存儲(chǔ)器單元400中的本機(jī)代碼僅僅是被裝載在第一存儲(chǔ)器單元中并在第一存儲(chǔ)器單元中執(zhí)行。因此,這樣的優(yōu)點(diǎn)就是不必每次都對(duì)頻繁使用的字節(jié)代碼進(jìn)行解譯,因而除去了字節(jié)解譯過程。
同時(shí),如果由本機(jī)代碼管理器單元在第二存儲(chǔ)器單元400中進(jìn)行搜索的結(jié)果是沒有對(duì)應(yīng)相關(guān)字節(jié)代碼的本機(jī)代碼,則類裝載器單元100發(fā)送裝載的字節(jié)代碼到第一存儲(chǔ)器單元200(S140)。
當(dāng)字節(jié)代碼被裝載在第一存儲(chǔ)器單元200中時(shí),字節(jié)代碼解譯器510對(duì)裝載的字節(jié)代碼進(jìn)行解譯以便執(zhí)行(S150)。
在字節(jié)代碼解譯器510解譯字節(jié)代碼的同時(shí),運(yùn)行時(shí)間解析器520檢驗(yàn)解譯的字節(jié)代碼是否是頻繁使用的字節(jié)代碼(S160)。然后,檢驗(yàn)結(jié)果被發(fā)送到本機(jī)代碼編譯器530。
如果確定檢驗(yàn)過程的結(jié)果是字節(jié)代碼是頻繁使用的字節(jié)代碼(S170),解譯的字節(jié)代碼被發(fā)送到本機(jī)代碼編譯器530并進(jìn)行編譯以產(chǎn)生對(duì)應(yīng)的本機(jī)代碼(S172)。這里,本機(jī)代碼被發(fā)送到第一存儲(chǔ)器單元200然后由本機(jī)代碼管理器單元300存儲(chǔ)在第二存儲(chǔ)器單元400中(S174)。此時(shí),存儲(chǔ)在第二存儲(chǔ)器單元400中的本機(jī)代碼由本機(jī)代碼管理器單元300根據(jù)LRU方法進(jìn)行管理。即,由于第二存儲(chǔ)器單元400存儲(chǔ)區(qū)域的限制,使用LRU方法來管理存儲(chǔ)的本機(jī)代碼。
然而,不是頻繁使用的或在以前已經(jīng)被定義為不用的字節(jié)代碼,則將由字節(jié)腹面解譯器510進(jìn)行解譯以便運(yùn)行(S180)。
垃圾收集單元600在第一存儲(chǔ)器單元200中自動(dòng)地收集被不用的代碼占用的空間以在第一存儲(chǔ)器單元200中獲得更多的空間。另外,如果即使在處理了不用的代碼之后第一存儲(chǔ)器單元200還是缺乏空間,本機(jī)代碼管理單元300被請(qǐng)求存儲(chǔ)已經(jīng)裝載在第一存儲(chǔ)器單元200中的本機(jī)代碼,因此在第一存儲(chǔ)器單元200中獲得了更多的空間。
根據(jù)本發(fā)明,當(dāng)運(yùn)行Java程序時(shí),頻繁使用的相關(guān)字節(jié)代碼就被編譯并被存儲(chǔ),因而,當(dāng)將來運(yùn)行該Java程序時(shí),相關(guān)字節(jié)代碼的本機(jī)代碼就被重新得到并運(yùn)行。因此,這里的優(yōu)點(diǎn)就是縮短了通過編譯字節(jié)代碼產(chǎn)生本機(jī)代碼所需的時(shí)間。
此外,這里的優(yōu)點(diǎn)就是在具有低性能CPU和低容量電池的譬如蜂窩電話的設(shè)備中縮短了Java程序的編譯時(shí)間和運(yùn)行時(shí)間,因此減少了對(duì)用戶的響應(yīng)時(shí)間并保存了電池能量。
已經(jīng)結(jié)合在附圖中所示的并僅僅是本發(fā)明的例子的說明性、非限定實(shí)施例,對(duì)本發(fā)明進(jìn)行了說明。本領(lǐng)域的技術(shù)人員能夠理解,在不脫離權(quán)利要求書所定義的本發(fā)明的范圍和精神的情況下,可以對(duì)其進(jìn)行各種變化和改動(dòng)。因此,實(shí)施例的簡(jiǎn)單改動(dòng)應(yīng)當(dāng)屬于本發(fā)明的范圍之內(nèi)。
權(quán)利要求
1.一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的系統(tǒng),包括類裝載器單元,用于裝載通過編譯Java程序源代碼所產(chǎn)生的字節(jié)代碼;第一存儲(chǔ)器單元,用于在可訪問狀態(tài)下保持由類裝載器單元裝載的字節(jié)代碼和通過編譯該字節(jié)代碼所產(chǎn)生的本機(jī)代碼;第二存儲(chǔ)器單元,用于在可訪問狀態(tài)下存儲(chǔ)裝載在第一存儲(chǔ)器單元中的本機(jī)代碼;本機(jī)代碼管理器單元,用于按照類裝載器單元的請(qǐng)求,搜索存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼,并將搜索到的本機(jī)代碼裝載在第一存儲(chǔ)器單元中;以及執(zhí)行單元,用于在可訪問狀態(tài)下執(zhí)行裝載在第一存儲(chǔ)器單元中的本機(jī)代碼。
2.權(quán)利要求1所述的系統(tǒng),還包括垃圾收集單元,用于在第一存儲(chǔ)器單元自動(dòng)地收集被不用的代碼所占用的空間。
3.權(quán)利要求2所述的系統(tǒng),其中如果在第一存儲(chǔ)器單元中發(fā)生了空間短缺,垃圾收集單元請(qǐng)求本機(jī)代碼管理單元將已經(jīng)裝載在第一存儲(chǔ)器單元中的本機(jī)代碼存儲(chǔ)到第二存儲(chǔ)器單元中。
4.權(quán)利要求1所述的系統(tǒng),其中本機(jī)代碼管理單元將已經(jīng)裝載在第一存儲(chǔ)器單元中的本機(jī)代碼存儲(chǔ)到第二存儲(chǔ)器單元中。
5.權(quán)利要求1所述的系統(tǒng),其中本機(jī)代碼管理單元使用LRU(最近最少使用的)方法來管理存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼。
6.權(quán)利要求4所述的系統(tǒng),其中本機(jī)代碼管理單元使用LRU(最近最少使用的)方法來管理存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼。
7.權(quán)利要求1所述的系統(tǒng),其中執(zhí)行單元包括字節(jié)代碼解譯器,用于在可訪問的狀態(tài)下對(duì)裝載在第一存儲(chǔ)器單元中的字節(jié)代碼進(jìn)行解譯以便執(zhí)行;運(yùn)行時(shí)間解析器,用于檢驗(yàn)由字節(jié)代碼解譯器解譯的字節(jié)代碼是否是頻繁使用的字節(jié)代碼;以及本機(jī)代碼編譯器,用于如果檢驗(yàn)的字節(jié)代碼被運(yùn)行時(shí)間解析器確定為頻繁使用的字節(jié)代碼,則將檢驗(yàn)的字節(jié)代碼編譯為本機(jī)代碼。
8.一種用于在Java程序中縮短字節(jié)代碼的編譯時(shí)間的方法,包括步驟(a1)由類裝載器單元裝載編譯的字節(jié)代碼;(a2)請(qǐng)求本機(jī)代碼管理器單元搜索對(duì)應(yīng)于裝載的字節(jié)代碼的本機(jī)代碼;(a3)在第二存儲(chǔ)器單元中搜索請(qǐng)求的本機(jī)代碼;(a4)將請(qǐng)求的本機(jī)代碼發(fā)送到第一存儲(chǔ)器單元;以及(a5)由代碼執(zhí)行單元執(zhí)行發(fā)送的本機(jī)代碼。
9.權(quán)利要求8所述的方法,其中存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼由本機(jī)代碼管理器單元根據(jù)LRU(最近最少使用的)方法進(jìn)行管理。
10.權(quán)利要求8所述的方法,還包括步驟如果搜索結(jié)果確定在第二存儲(chǔ)器單元中沒有對(duì)應(yīng)的本機(jī)代碼,則(a6)發(fā)送由類裝載單元裝載的字節(jié)代碼到第一存儲(chǔ)器單元;以及(a7)由字節(jié)代碼解譯器對(duì)發(fā)送到第一存儲(chǔ)器單元的字節(jié)代碼進(jìn)行解譯并執(zhí)行。
11.權(quán)利要求10所述的方法,其中步驟(a7)包括步驟由運(yùn)行時(shí)間解析器檢驗(yàn)由字節(jié)代碼解譯器解譯的字節(jié)代碼是否是頻繁使用的字節(jié)代碼。
12.權(quán)利要求11所述的方法,還包括步驟如果根據(jù)檢驗(yàn)結(jié)果該字節(jié)代碼被確定為頻繁使用的字節(jié)代碼,則(a8)通過對(duì)由字節(jié)代碼解譯器解譯的字節(jié)代碼進(jìn)行編譯,由本機(jī)代碼編譯器產(chǎn)生對(duì)應(yīng)于頻繁使用的字節(jié)代碼的本機(jī)代碼;(a9)將產(chǎn)生的本機(jī)代碼裝載在第一存儲(chǔ)器單元中;以及(a10)由本機(jī)代碼管理器單元將裝載的本機(jī)代碼存儲(chǔ)在第二存儲(chǔ)器單元中。
13.權(quán)利要求8所述的方法,其中如果Java程序的執(zhí)行終止或在第一存儲(chǔ)器單元中發(fā)生空間短缺,則裝載在第一存儲(chǔ)器單元中的本機(jī)代碼被存儲(chǔ)在第二存儲(chǔ)器單元中。
14.權(quán)利要求10所述的方法,其中存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼由本機(jī)代碼管理器單元根據(jù)LRU(最近最少使用的)方法進(jìn)行管理。
15.權(quán)利要求13所述的方法,其中存儲(chǔ)在第二存儲(chǔ)器單元中的本機(jī)代碼由本機(jī)代碼管理器單元根據(jù)LRU(最近最少使用的)方法進(jìn)行管理。
全文摘要
提供了一種系統(tǒng)和方法,其中當(dāng)執(zhí)行Java程序時(shí),頻繁使用的字節(jié)代碼被編譯為對(duì)應(yīng)的本機(jī)代碼,并且存儲(chǔ)所得的本機(jī)代碼,因而當(dāng)將來執(zhí)行該Java程序時(shí),相關(guān)字節(jié)代碼的本機(jī)代碼就能被重新獲得和執(zhí)行,因此縮短了通過對(duì)該字節(jié)代碼進(jìn)行編譯以產(chǎn)生本機(jī)代碼所需的時(shí)間。
文檔編號(hào)G06F9/44GK1525321SQ200410002968
公開日2004年9月1日 申請(qǐng)日期2004年1月21日 優(yōu)先權(quán)日2003年2月24日
發(fā)明者樸正圭, 宋孝晶 申請(qǐng)人:三星電子株式會(huì)社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
商洛市| 岳阳市| 西林县| 哈巴河县| 桂阳县| 逊克县| 苏尼特右旗| 思茅市| 贵阳市| 靖州| 贵港市| 黑山县| 绥滨县| 红河县| 乌兰县| 布尔津县| 桂东县| 文水县| 云龙县| 古蔺县| 湾仔区| 铜山县| 巩留县| 分宜县| 保定市| 霍城县| 抚顺市| 济宁市| 津市市| 岑巩县| 喜德县| 安国市| 咸丰县| 麻栗坡县| 尉犁县| 景宁| 伽师县| 永城市| 鹤壁市| 马公市| 正镶白旗|