專利名稱:用于縮短java程序中的類加載處理的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于縮短Java程序中的類加載處理的系統(tǒng)和方法。具體地說,本發(fā)明涉及一種用于縮短Java程序中的類加載處理的系統(tǒng)和方法,其中,在執(zhí)行Java程序中的類加載處理所產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)被以圖像的形式存儲(chǔ),然后在日后執(zhí)行所述Java程序時(shí)檢索并執(zhí)行所存儲(chǔ)的運(yùn)行時(shí)數(shù)據(jù),借此縮短所述的類加載時(shí)間。
背景技術(shù):
最近,隨著移動(dòng)終端使用的逐漸增加,運(yùn)行于移動(dòng)終端的Java程序(例如游戲、軟件包(messenger)等)的規(guī)模變得較大。
但是,為了執(zhí)行一個(gè)Java程序,應(yīng)當(dāng)首先在Java虛擬機(jī)(JVM)中執(zhí)行類加載處理。另外,為了完成所述的類加載處理,還應(yīng)當(dāng)執(zhí)行包括加載、鏈接、初始化等的處理。此外,所述鏈接處理包括認(rèn)證、準(zhǔn)備、分解等處理。因此,存在大量的時(shí)間被花費(fèi)在執(zhí)行所述的類加載處理上的問題。
特別是,對(duì)于相同字節(jié)的代碼,可以只在最初執(zhí)行所述Java程序時(shí)才執(zhí)行所述類加載處理當(dāng)中的認(rèn)證處理。但是,當(dāng)前的類加載處理被設(shè)計(jì)成無論在什么時(shí)候執(zhí)行所述Java程序都要執(zhí)行所述認(rèn)證處理。由此,傳統(tǒng)的類加載處理存在下述問題,即,在諸如具有低性能CPU和低容量電池的移動(dòng)終端的系統(tǒng)中,系統(tǒng)的響應(yīng)時(shí)間增加并且電池被很快的耗盡。
另外,隨著Java程序的規(guī)模變得更大時(shí),加載該程序所花費(fèi)的時(shí)間逐步地增加。因此,在這種情況下,與系統(tǒng)響應(yīng)時(shí)間和電池壽命相關(guān)的上述問題變得更加嚴(yán)重。
發(fā)明內(nèi)容
本發(fā)明試圖解決上述問題。本發(fā)明的一個(gè)目的是提供一種用于縮短Java程序中的類加載處理的系統(tǒng)和方法,其中,在執(zhí)行Java程序中的類加載處理所產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)被以圖像的形式存儲(chǔ),并且在日后執(zhí)行所述Java程序時(shí)檢索和執(zhí)行所存儲(chǔ)的運(yùn)行時(shí)數(shù)據(jù),借此以縮短類加載的時(shí)間。
本發(fā)明的另一個(gè)目的是提供一種用于縮短Java程序中的類加載處理的系統(tǒng)和方法,其中,改善了在裝備有低性能CPU和/或低容量電池的情況下,所述Java程序的處理速度,借此,減少了對(duì)用戶的響應(yīng)時(shí)間和節(jié)省了電池能量。
根據(jù)用于實(shí)現(xiàn)所述目的的本發(fā)明的一個(gè)方面,提供了一種用于縮短Java程序中的類加載處理的系統(tǒng),包括類加載器單元,用于從輔助存儲(chǔ)器加載Java程序的類文件,執(zhí)行鏈接和初始化處理并產(chǎn)生運(yùn)行時(shí)數(shù)據(jù);第一存儲(chǔ)器單元,用于將由所述的類加載器單元產(chǎn)生的所述運(yùn)行時(shí)數(shù)據(jù)保持在可訪問狀態(tài);第二存儲(chǔ)器單元,用于存儲(chǔ)已經(jīng)加載到所述第一存儲(chǔ)器單元中、處于可訪問狀態(tài)的所述運(yùn)行時(shí)數(shù)據(jù);運(yùn)行時(shí)數(shù)據(jù)搜索單元,用于根據(jù)所述的類加載器單元的請(qǐng)求將已經(jīng)以圖像的形式存儲(chǔ)在所述第二存儲(chǔ)器單元中的所述運(yùn)行時(shí)數(shù)據(jù)加載到所述第一存儲(chǔ)器單元中;和執(zhí)行單元,用于執(zhí)行已經(jīng)加載到所述第一存儲(chǔ)器單元中、處于可訪問狀態(tài)的運(yùn)行時(shí)數(shù)據(jù)。
附圖簡(jiǎn)述通過下面結(jié)合附圖對(duì)本發(fā)明最佳實(shí)施例的描述,本發(fā)明的上述和其它目的和特性將變得明顯。其中
圖1簡(jiǎn)要示出了根據(jù)本發(fā)明用于縮短Java程序中所述類加載處理的系統(tǒng)的方框圖;圖2簡(jiǎn)要示出了根據(jù)本發(fā)明用于縮短Java程序中所述類加載處理的方法的流程圖;和圖3特別示出了圖2中所示的產(chǎn)生運(yùn)行時(shí)數(shù)據(jù)的處理的流程圖。
具體實(shí)施例方式
下面將結(jié)合附圖詳細(xì)描述本發(fā)明的最佳實(shí)施例。
圖1簡(jiǎn)要示出了用于縮短Java程序中所述類加載處理的系統(tǒng)的方框圖。該系統(tǒng)包括類加載器單元100、第一存儲(chǔ)器單元200、運(yùn)行時(shí)數(shù)據(jù)搜索單元300、第二存儲(chǔ)器單元400、執(zhí)行單元500和無用數(shù)據(jù)收集器單元600。
類加載器單元100加載來自一個(gè)輔助存儲(chǔ)器的Java程序的類文件,執(zhí)行鏈接和初始化處理,然后產(chǎn)生運(yùn)行時(shí)數(shù)據(jù)。這里,所述加載處理是指將位于所述輔助存儲(chǔ)器中的所述類文件加載到一個(gè)Java虛擬機(jī)中的處理。另外,所述鏈接處理是指使得所加載的類文件被處理成它們能夠被所述Java虛擬機(jī)執(zhí)行的狀態(tài),并且包括認(rèn)證、準(zhǔn)備和分解等處理。所述運(yùn)行時(shí)數(shù)據(jù)被加載到第一存儲(chǔ)器單元200中并用于執(zhí)行所述Java程序。所述運(yùn)行時(shí)數(shù)據(jù)可以被理解為常數(shù)池、方法表和字段表等。
第一存儲(chǔ)器單元200將由類加載器單元100產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)保持在可訪問狀態(tài)。即,由所述類加載器單元100產(chǎn)生的所述運(yùn)行時(shí)數(shù)據(jù)被存儲(chǔ)在預(yù)定存儲(chǔ)區(qū)域內(nèi),從而使下面將要描述的執(zhí)行單元500能夠訪問所存儲(chǔ)的運(yùn)行時(shí)數(shù)據(jù)。
第二存儲(chǔ)器單元400以圖像的形式存儲(chǔ)已經(jīng)以可訪問狀態(tài)存儲(chǔ)在第一存儲(chǔ)器單元200中的所述運(yùn)行時(shí)數(shù)據(jù)。
運(yùn)行時(shí)數(shù)據(jù)搜索單元300根據(jù)類加載器單元100的請(qǐng)求將存儲(chǔ)在第二存儲(chǔ)器單元400中的所述運(yùn)行時(shí)數(shù)據(jù)加載到第一存儲(chǔ)器單元200中。另外,運(yùn)行時(shí)數(shù)據(jù)搜索單元300將已經(jīng)由類加載器單元100產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)以圖像的形式存儲(chǔ)到第二存儲(chǔ)器單元400中。另外,運(yùn)行時(shí)數(shù)據(jù)搜索單元300通過使用最近最少使用的(LRU)方法管理已經(jīng)以圖像形式存儲(chǔ)在第二存儲(chǔ)器單元400中的所述運(yùn)行時(shí)數(shù)據(jù)。這里,根據(jù)所述LRU方法,按照較少使用的順序檢查并刪除所存儲(chǔ)數(shù)據(jù)當(dāng)中很少使用的數(shù)據(jù)。
執(zhí)行單元500執(zhí)行以可訪問狀態(tài)加載到第一存儲(chǔ)器單元200中的所述運(yùn)行時(shí)數(shù)據(jù)。
無用數(shù)據(jù)收集器單元600收集在第一存儲(chǔ)器單元200中未使用的存儲(chǔ)區(qū)域,以便允許所述未使用的區(qū)域被再次使用,借此確保第一存儲(chǔ)器單元200中更多的可用區(qū)域。
圖2簡(jiǎn)要示出了根據(jù)本發(fā)明用于縮短Java程序中所述類加載處理的方法的流程圖。
首先,類加載器單元100請(qǐng)求運(yùn)行時(shí)數(shù)據(jù)搜索單元300搜索執(zhí)行一個(gè)Java程序所需的運(yùn)行時(shí)數(shù)據(jù)(S100),然后,運(yùn)行時(shí)數(shù)據(jù)搜索單元300在第二存儲(chǔ)器單元400中搜索是否存在所述運(yùn)行時(shí)數(shù)據(jù)(S110)。
如果在第二存儲(chǔ)器單元400中發(fā)現(xiàn)相關(guān)的運(yùn)行時(shí)數(shù)據(jù)(S120),則搜索到的運(yùn)行時(shí)數(shù)據(jù)被發(fā)送給第一存儲(chǔ)器單元200(S125)。然后,執(zhí)行單元500執(zhí)行發(fā)送給第一存儲(chǔ)器單元200的所述運(yùn)行時(shí)數(shù)據(jù)(S160)。這里,存儲(chǔ)在第二存儲(chǔ)器單元400中的所述運(yùn)行時(shí)數(shù)據(jù)可以是圖像文件,即在其中以圖像形式存儲(chǔ)了執(zhí)行各種Java程序所產(chǎn)生的所述運(yùn)行時(shí)數(shù)據(jù)的文件。
同時(shí),根據(jù)本發(fā)明,在前已經(jīng)產(chǎn)生和存儲(chǔ)在第二存儲(chǔ)器單元400中的所述運(yùn)行時(shí)數(shù)據(jù)被簡(jiǎn)單地加載到第一存儲(chǔ)器單元200中并被執(zhí)行。由此,不必在任何執(zhí)行所述Java程序的時(shí)候產(chǎn)生所述運(yùn)行時(shí)數(shù)據(jù),借此,消除了產(chǎn)生所述運(yùn)行時(shí)數(shù)據(jù)所需的復(fù)雜的加載處理。因此,可以減少類加載時(shí)間。
另外,如果作為由運(yùn)行時(shí)數(shù)據(jù)搜索單元300進(jìn)行的第二存儲(chǔ)器單元400的搜索的結(jié)果是不存在相關(guān)的運(yùn)行時(shí)數(shù)據(jù),則類加載器單元100產(chǎn)生執(zhí)行所述Java程序所需的運(yùn)行時(shí)數(shù)據(jù)(S130)。
下面結(jié)合圖3討論產(chǎn)生運(yùn)行時(shí)數(shù)據(jù)的處理。首先,從輔助存儲(chǔ)器加載所述Java程序的類文件(S132),通過對(duì)所加載的類文件進(jìn)行鏈接和初始化處理產(chǎn)生所述運(yùn)行時(shí)數(shù)據(jù)(S134到S138)。這里,所述加載處理是指將位于所述輔助存儲(chǔ)器中的所述類文件加載到所述Java虛擬機(jī)中的處理;所述類文件鏈接處理是指使得所加載的類文件被處理成它們能夠被所述Java虛擬機(jī)執(zhí)行的狀態(tài)的處理。具體地說,所述鏈接處理包括用于認(rèn)證所加載的類文件是否包含正確的類格式的認(rèn)證處理、分配存儲(chǔ)器區(qū)域的準(zhǔn)備處理、和將所述的類文件轉(zhuǎn)換為可執(zhí)行文件的分解處理。
在執(zhí)行鏈接處理之后,所述類文件被初始化并產(chǎn)生所述運(yùn)行時(shí)數(shù)據(jù)。運(yùn)行時(shí)數(shù)據(jù)搜索單元300將所產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)以圖像的形式存儲(chǔ)在第二存儲(chǔ)器單元400中(S140)。此時(shí),運(yùn)行時(shí)數(shù)據(jù)搜索單元300根據(jù)所述LRU方法管理存儲(chǔ)在第二存儲(chǔ)器單元400中的圖像數(shù)據(jù)。即,由于第二存儲(chǔ)器單元400的存儲(chǔ)區(qū)域是有限的,所以,使用所述LRU方法來管理所存儲(chǔ)的數(shù)據(jù)。
然后,運(yùn)行時(shí)數(shù)據(jù)搜索單元300將以圖像形式存儲(chǔ)的所述運(yùn)行時(shí)數(shù)據(jù)發(fā)送給第一存儲(chǔ)器單元200(S150),和執(zhí)行單元500執(zhí)行發(fā)送給第一存儲(chǔ)器單元200的所述運(yùn)行時(shí)圖像數(shù)據(jù)(S160)。這里,如果第一存儲(chǔ)器單元300缺少用于數(shù)據(jù)加載的空間,那么,無用數(shù)據(jù)收集器單元600收集第一存儲(chǔ)器單元200中未使用的空間,并允許所收集的空間被再次使用,借此,確保在第一存儲(chǔ)器單元200中的更多的空間。
或者,可以在步驟S160之后執(zhí)行步驟S140。即,當(dāng)產(chǎn)生所述運(yùn)行時(shí)數(shù)據(jù)時(shí)(S130),將所產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)發(fā)送給第一存儲(chǔ)器單元200(S150)并執(zhí)行所發(fā)送的運(yùn)行時(shí)數(shù)據(jù)(S160)。然后,在所述Java程序被執(zhí)行完畢之后,所述運(yùn)行時(shí)數(shù)據(jù)可以被存儲(chǔ)在第二存儲(chǔ)器單元400中。
根據(jù)本發(fā)明,在執(zhí)行Java程序中所述類加載處理產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)被以圖像的形式存儲(chǔ),并在日后執(zhí)行所述Java程序時(shí)檢索并執(zhí)行所存儲(chǔ)的運(yùn)行時(shí)數(shù)據(jù),借此,可以在不執(zhí)行復(fù)雜的類加載處理的情況下執(zhí)行所述Java程序。由此,存在一個(gè)優(yōu)點(diǎn),即在執(zhí)行一個(gè)Java程序時(shí)可以縮短類加載時(shí)間。
另外,改善了在裝備有低性能CPU和/或低容量電池的情形下Java程序的處理速度,借此,減少了對(duì)用戶的響應(yīng)時(shí)間并節(jié)省了電池能量。
雖然已經(jīng)結(jié)合附圖中所示的實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但它們僅僅是本發(fā)明的一些例子。本領(lǐng)域的普通技術(shù)人員可以理解,在不脫離由權(quán)利要求書所限定的本發(fā)明的范圍和精神的前提下,可以對(duì)其進(jìn)行各種改變和修改。因此,對(duì)本發(fā)明實(shí)施例的簡(jiǎn)單的改變?cè)诒景l(fā)明的范圍之內(nèi)。
權(quán)利要求
1.一種用于縮短Java程序中的類加載處理的系統(tǒng),包括類加載器單元,用于從輔助存儲(chǔ)器加載Java程序的類文件,執(zhí)行鏈接和初始化處理并產(chǎn)生運(yùn)行時(shí)數(shù)據(jù);第一存儲(chǔ)器單元,用于將由所述的類加載器單元產(chǎn)生的所述運(yùn)行時(shí)數(shù)據(jù)保持在可訪問狀態(tài);第二存儲(chǔ)器單元,用于以圖像的形式存儲(chǔ)已經(jīng)加載到所述第一存儲(chǔ)器單元中、處于可訪問狀態(tài)的所述運(yùn)行時(shí)數(shù)據(jù);運(yùn)行時(shí)數(shù)據(jù)搜索單元,用于根據(jù)所述的類加載器單元的請(qǐng)求將已經(jīng)被以圖像形式存儲(chǔ)在所述第二存儲(chǔ)器單元中的所述運(yùn)行時(shí)數(shù)據(jù)加載到所述第一存儲(chǔ)器單元中;和執(zhí)行單元,用于執(zhí)行已經(jīng)加載到所述第一存儲(chǔ)器單元中、處于可訪問狀態(tài)的所述運(yùn)行時(shí)數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),還包括一個(gè)無用數(shù)據(jù)收集器單元,用于收集所述第一存儲(chǔ)器單元中未使用的空間,并允許所述未使用的空間被再次使用。
3.根據(jù)權(quán)利要求1所述的系統(tǒng),其中,所述運(yùn)行時(shí)數(shù)據(jù)搜索單元使得由所述的類加載器單元產(chǎn)生的所述運(yùn)行時(shí)數(shù)據(jù)以圖像的形式被存儲(chǔ)在所述第二存儲(chǔ)器單元中。
4.根據(jù)權(quán)利要求1所述的系統(tǒng),其中,所述運(yùn)行時(shí)數(shù)據(jù)搜索單元通過使用最近最少使用(LRU)方法管理已經(jīng)以圖像形式存儲(chǔ)在所述第二存儲(chǔ)器單元中的所述運(yùn)行時(shí)數(shù)據(jù)。
5.根據(jù)權(quán)利要求3所述的系統(tǒng),其中,所述運(yùn)行時(shí)數(shù)據(jù)搜索單元通過使用最近最少使用(LRU)方法管理已經(jīng)以圖像形式存儲(chǔ)在所述第二存儲(chǔ)器單元中的所述運(yùn)行時(shí)數(shù)據(jù)。
6.一種用于縮短Java程序中的類加載處理的方法,包括下述步驟類加載器單元請(qǐng)求運(yùn)行時(shí)數(shù)據(jù)搜索單元搜索執(zhí)行所述Java程序所需的運(yùn)行時(shí)數(shù)據(jù);運(yùn)行時(shí)數(shù)據(jù)搜索單元搜索所請(qǐng)求的用于所述Java程序的運(yùn)行時(shí)數(shù)據(jù);將搜索到的運(yùn)行時(shí)數(shù)據(jù)發(fā)送給第一存儲(chǔ)器單元;和執(zhí)行發(fā)送給所述第一存儲(chǔ)器單元的所述運(yùn)行時(shí)數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的方法,其中,所述搜索到的運(yùn)行時(shí)數(shù)據(jù)以圖像的形式存儲(chǔ)在第二存儲(chǔ)器單元中。
8.根據(jù)權(quán)利要求7所述的方法,其中,所述運(yùn)行時(shí)數(shù)據(jù)搜索單元根據(jù)最近最少使用(LRU)方法管理存儲(chǔ)在所述第二存儲(chǔ)器單元中的所述運(yùn)行時(shí)數(shù)據(jù)。
9.根據(jù)權(quán)利要求6所述的方法,還包括下述步驟如果從所請(qǐng)求的用于所述Java程序的運(yùn)行時(shí)數(shù)據(jù)的搜索結(jié)果確定不存在相關(guān)的運(yùn)行時(shí)數(shù)據(jù),則從一個(gè)輔助存儲(chǔ)器加載Java程序的類文件;通過執(zhí)行所加載的Java程序類文件的鏈接和初始化處理產(chǎn)生運(yùn)行時(shí)數(shù)據(jù);以圖像的形式存儲(chǔ)所產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù);和將所述運(yùn)行時(shí)圖像數(shù)據(jù)發(fā)送給所述第一存儲(chǔ)器單元。
10.根據(jù)權(quán)利要求9所述的方法,其中,在執(zhí)行發(fā)送到所述第一存儲(chǔ)器單元的所述運(yùn)行時(shí)數(shù)據(jù)之后,執(zhí)行以圖像形式存儲(chǔ)所產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)的步驟。
11.根據(jù)權(quán)利要求9所述的方法,其中,所述運(yùn)行時(shí)搜索單元根據(jù)最近最少使用(LRU)方法管理所存儲(chǔ)的運(yùn)行時(shí)圖像數(shù)據(jù)。
全文摘要
一種根據(jù)本發(fā)明的用于縮短Java程序中的類加載處理的系統(tǒng),其包括類加載器單元,用于從輔助存儲(chǔ)器加載Java程序的類文件,執(zhí)行鏈接和初始化處理并產(chǎn)生運(yùn)行時(shí)數(shù)據(jù);第一存儲(chǔ)器單元,用于將由所述類加載器單元產(chǎn)生的運(yùn)行時(shí)數(shù)據(jù)保持在可訪問狀態(tài);第二存儲(chǔ)器單元,用于以圖像的形式存儲(chǔ)已經(jīng)被加載到第一存儲(chǔ)器單元中的、處于可訪問狀態(tài)的運(yùn)行時(shí)數(shù)據(jù);運(yùn)行時(shí)數(shù)據(jù)搜索單元,用于根據(jù)類加載器單元的請(qǐng)求將已經(jīng)以圖像形式存儲(chǔ)在第二存儲(chǔ)器單元中的運(yùn)行時(shí)數(shù)據(jù)加載到第一存儲(chǔ)器單元中;和執(zhí)行單元,用于執(zhí)行已經(jīng)加載到第一存儲(chǔ)器單元中、處于可訪問狀態(tài)的運(yùn)行時(shí)數(shù)據(jù)。
文檔編號(hào)G06F9/44GK1519709SQ200410003658
公開日2004年8月11日 申請(qǐng)日期2004年2月5日 優(yōu)先權(quán)日2003年2月7日
發(fā)明者崔智暎, 宋孝晶, 樸正圭, 崔智 申請(qǐng)人:三星電子株式會(huì)社