一種Java虛擬機裝載程序的處理方法
【專利摘要】本發(fā)明涉及通信【技術領域】,具體涉及一種Java虛擬機裝載程序的處理方法。一種Java虛擬機裝載程序的處理方法,啟動類裝載器后,將待裝載類加入一待裝載隊列;判斷待裝載隊列是否為空,如果不為空,從待裝載隊列獲取當前運行應用程序需要的類名,依據(jù)獲取的類名,通過一第一裝載單元和/或一第二裝載單元執(zhí)行裝載類步驟;第一裝載單元用于對待裝載隊列中的第一種待裝載類進行裝載;第二裝載單元用于對待裝載隊列中的第二種待裝載類進行裝載。如果為空,裝載結(jié)束;本發(fā)明從裝載器并行角度去考慮裝載相應的應用程序,將待裝載類中的常用應用程序要引用的類與普通應用程序要引用的類分開裝載,從系統(tǒng)結(jié)構(gòu)上將優(yōu)化處理方法引入虛擬機系統(tǒng)裝載領域。
【專利說明】一種Java虛擬機裝載程序的處理方法
【技術領域】
[0001]本發(fā)明涉及電子通信【技術領域】,具體涉及一種Java虛擬機裝載程序的處理方法。【背景技術】
[0002]隨著手機終端國際化進程的推進,市場規(guī)模的不斷擴大及技術的不斷更新,使得手機在種類、外觀、功能等方面有了前所未有的突破,同時在操作系統(tǒng)、芯片、無線傳輸制式等方面也有了擴展和深入。與此同時,手機市場對Java也產(chǎn)生了巨大的需求增長,支持Java虛擬機的功能顯得尤為重要,基于嵌入式平臺的Java虛擬機已經(jīng)成為了多數(shù)主流運營商對手機,特別是定制手機的強制性要求。廣大的消費者、運營商、服務/內(nèi)容提供商以及手機制造商強烈渴望手機的Java性能更加強勁,支持更多更復雜的應用,為產(chǎn)業(yè)鏈各方帶來更多商機和收入,同時也為用戶帶來更豐富多彩的增值應用。眾所周知,Java虛擬機的跨平臺性,使得手機的能力得到了不斷的提升,但Java虛擬機如何在不斷為運營商擴展新業(yè)務,為用戶帶來更豐富的增值業(yè)務的同時,提升自身的性能,也是需要深入考慮的問題。
[0003]目前市場上有很多針對虛擬機進行優(yōu)化的專利與方法,現(xiàn)有技術中申請?zhí)枮?01010265244.4的專利公開了一種Java虛擬機圖片資源加載的終端,其考慮到移動智能終端有很多的圖片資源需要加載,針對傳統(tǒng)的圖片加載資源方法,提出了新的圖片資源加載速度與改進方法。
[0004]現(xiàn)有技術中申請?zhí)枮?01010588216.6的專利公開了一種基于嵌入式實時Java虛擬機的預先類加載方法及裝置,通過修改類加載器的Java類文件,設置用于根據(jù)類的列表進行類加載的加載方法;修改虛擬機內(nèi)核的jni類,設置用于調(diào)用所述加載方法以預先加載應用程序所需的全部類的預先類加載方法;獲取包含應用程序所需的全部類的類列表。
[0005]第一種系統(tǒng)調(diào)用方法:系統(tǒng)首先調(diào)用相應的應用程序(app),dalvik虛擬機裝載相應的應用程序進入虛擬機,系統(tǒng)先裝載應用程序所需的核心內(nèi)庫,接著裝載相應的本地內(nèi)裝載器。第二種系統(tǒng)調(diào)用方法:系統(tǒng)中的應用程序,在裝載相應的系統(tǒng)資源中,采用利用寄存器和片上的RAM實現(xiàn)Java棧的功能,部分功能用硬件模擬實現(xiàn),這樣速度得到了相應的提升,但是成本也隨著上升,不適合快速發(fā)展的手持智能終端行業(yè)。
[0006]綜上,上述現(xiàn)有技術中智能終端通用的加載方法的優(yōu)點是,比較通用,虛擬機先來先服務原則,響應加載最新發(fā)生的應用程序。但是缺點也很明顯,沒有充分考慮智能手機的操作中,資源的分配不平衡,一些應用程序不使用了還占據(jù)著系統(tǒng)的資源,垃圾回收期(GC,Garbage Collection)沒有及時回收。而對于用戶經(jīng)常使用的應用,比如電話,聯(lián)系人,短信,彩信,網(wǎng)絡信息等應用來不及響應,雖然芯片處理器的處理速度一再上升,但是隨著智能手機的使用,還是感覺系統(tǒng)越來越慢的感覺。
【發(fā)明內(nèi)容】
[0007]本發(fā)明的目的在于,提供一種Java虛擬機裝載程序的處理方法,解決以上技術問題。[0008]本發(fā)明所解決的技術問題可以采用以下技術方案來實現(xiàn):
[0009]—種Java虛擬機裝載程序的處理方法,其中,所述方法包括:
[0010]步驟Sll:啟動類裝載器后,將待裝載類加入一待裝載隊列;
[0011]步驟sl2:判斷所述待裝載隊列是否為空,如果不為空,從所述待裝載隊列獲取當前運行應用程序需要的類名,進入步驟sl3 ;如果為空,裝載結(jié)束,啟動解析字節(jié)碼的步驟;
[0012]步驟sl3:所述類裝載器包括一第一裝載單元和一第二裝載單元,依據(jù)獲取的所述類名,通過所述第一裝載單元和/或所述第二裝載單元執(zhí)行裝載類步驟;所述第一裝載單元用于對所述待裝載隊列中的第一種待裝載類進行裝載;所述第二裝載單元用于對所述待裝載隊列中的第二種待裝載類進行裝載。
[0013]優(yōu)選地,還包括步驟sl4,步驟sl3過程中生成有裝載類的常量池,所述常量池中包括裝載類要引用的類,將所述要引用的類添加入待裝載隊列,并跳轉(zhuǎn)至步驟sl2。
[0014]優(yōu)選地,所述第一裝載單元與所述第二裝載單元分別設有單獨的工作區(qū)間,單獨的對象堆與Java工作棧,所述第一裝載單元與所述第二裝載單元之間相互訪問。
[0015]優(yōu)選地,所述第一種待裝載類為常用應用程序要引用的類,所述第二種待裝載類為普通應用程序要引用的類,所述第一種待裝載類的被操作的頻率高于所述第二種待裝載類被操作的頻率。
[0016]優(yōu)選地,所述第一種待裝載類為應用程序類,所述第二種待裝載類為Java應用程序編程接口類。
[0017]優(yōu)選地,步驟sl3中,所述第一裝載單元對所述待裝載隊列中的第一種待裝載類進行裝載的過程中;同一時間內(nèi),所述第二裝載單元對所述待裝載隊列中的第二種待裝載類進行裝載。
[0018]優(yōu)選地,裝載結(jié)束后,經(jīng)過解析的字節(jié)碼進入Java執(zhí)行引擎進行處理。
[0019]優(yōu)選地,所述第一裝載單元對所述待裝載隊列中的第一種待裝載類進行裝載的方法如下:進行預處理將所述第一種待裝載類的字節(jié)碼解析后在虛擬機中單獨進行處理,獨立加載所述第一種待裝載類所用到的庫函數(shù),直到所述第一種待裝載類的閉包不再增加。
[0020]優(yōu)選地,應用于智能手機系統(tǒng)裝載領域。
[0021]優(yōu)選地,包括兩個所述類裝載器,通過兩個所述類裝載器并行處理所述待裝載類。
[0022]有益效果:由于采用以上技術方案,本發(fā)明從類裝載器并行角度去考慮裝載相應的應用程序,將待裝載類中的常用應用程序要引用的類與普通應用程序要引用的類分開裝載,從系統(tǒng)結(jié)構(gòu)上將優(yōu)化處理方法引入虛擬機系統(tǒng)裝載領域。
【專利附圖】
【附圖說明】
[0023]圖1為Java虛擬機體系結(jié)構(gòu)示意圖;
[0024]圖2為本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖;
[0025]圖3為本發(fā)明的方法流程圖。
【具體實施方式】
[0026]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0027]需要說明的是,在不沖突的情況下,本發(fā)明中的實施例及實施例中的特征可以相
互組合。
[0028]下面結(jié)合附圖和具體實施例對本發(fā)明作進一步說明,但不作為本發(fā)明的限定。
[0029]參照圖1,整個Java虛擬機體系結(jié)構(gòu),可以分為二個子系統(tǒng):類裝載器I和Java執(zhí)行引擎2,Java執(zhí)行引擎2是Java的處理器內(nèi)核,是Java虛擬機的核心,負責執(zhí)行所有已經(jīng)解析的Java字節(jié)碼;類裝載器I為Java執(zhí)行引擎2創(chuàng)建合適的數(shù)據(jù)結(jié)構(gòu),基于這個數(shù)據(jù)結(jié)構(gòu),Java執(zhí)行引擎2提供有效的算法來執(zhí)行每條Java字節(jié)碼指令。Java虛擬機的類裝載就是將包含在類文件中的字節(jié)碼裝載到Java虛擬機中,具體通過將類文件中的內(nèi)容轉(zhuǎn)換成Java虛擬機使用的類字節(jié)碼,通過類裝載器I裝載到Java虛擬機中的字節(jié)碼數(shù)據(jù),從而成為可執(zhí)行的代碼。類文件包括應用程序類3,還包括Java應用程序編程接口類(Application Programming Interface, API 類)4。
[0030]傳統(tǒng)情況下,手機慢慢變慢是由于手機內(nèi)存逐步被占用來不及收集不用對象,內(nèi)存碎片的增多。同時在應用程序的使用中,頻繁的使用某項應用,當突然來了電話,短信的時候,主要進程被應用程序占據(jù)了,而常規(guī)的應用一時間得不到系統(tǒng)資源。本發(fā)明從Java虛擬機裝載應用程序入口進行裝載,改變虛擬機傳統(tǒng)的裝載方法,在類裝載器I中將應用程序中二進制形式的字節(jié)碼數(shù)據(jù)讀入Java虛擬機中。
[0031]由于嵌入式智能機應用中的資源限制嚴格,而對實時性要求卻比較高,如果像傳統(tǒng)Java虛擬機一樣,在運行時發(fā)覺某個需要的類未被裝載時才啟動類裝載器進行裝載,則可能導致程序運行時長時間暫停。因此本文的類裝載器將一次性把Java應用程序的類裝載進來。
[0032]參照圖2、圖3,本發(fā)明提供的一種Java虛擬機裝載程序的處理方法,
[0033]其中,方法包括:
[0034]步驟sll:啟動類裝載器I后,將待裝載類加入一待裝載隊列;
[0035]步驟sl2:判斷待裝載隊列是否為空,如果不為空,從待裝載隊列獲取當前運行應用程序需要的類名,進入步驟sl3 ;如果為空,裝載結(jié)束,啟動解析字節(jié)碼的步驟,經(jīng)過解析的字節(jié)碼進入Java執(zhí)行引擎2進行處理;
[0036]步驟sl3:類裝載器I包括一第一裝載單元11和一第二裝載單元12,依據(jù)獲取的類名,通過第一裝載單元11和/或第二裝載單元12執(zhí)行裝載類步驟;第一裝載單元11用于對待裝載隊列中的第一種待裝載類進行裝載;第二裝載單元12用于對待裝載隊列中的第二種待裝載類進行裝載。
[0037]優(yōu)選地,還包括步驟sl4,步驟sl3過程中生成有裝載類的常量池,常量池中包括裝載類要引用的類,分析裝載類的常量池,將要引用的類添加入待裝載隊列,并跳轉(zhuǎn)至步驟sl20
[0038]優(yōu)選地,步驟sl3中,第一裝載單元11對待裝載隊列中的第一種待裝載類進行裝載的過程中;同一時間內(nèi),第二裝載單元12對待裝載隊列中的第二種待裝載類進行裝載。
[0039]本發(fā)明可以主要應用于智能手機系統(tǒng)裝載,解決智能手機的軟件裝載問題,待裝載類包括應用程序類3,待裝載類還包括Java應用程序編程接口類4。人們使用手機的時候,從功能上說可以分為常用聯(lián)系應用和普通應用。比如一個智能手機,用到最常用的有電話,聯(lián)系人,短信,彩信功能。而對于游戲,秒表,日歷,不同的應用不同的使用人使用頻率也不一樣。比如對于愛玩游戲的,除了基本應用外,用的最多的是游戲應用。對于愛看電子書的,除了基本應用外,使用頻率比較多的就是電子書應用程序。由日常用戶的行為分析來看,基本上常用模塊的操作比較多,頻率也較高,是系統(tǒng)中運行最頻繁,后臺進程調(diào)度最大的。
[0040]一種優(yōu)選的實施例,第一種待裝載類為應用程序類3,第二種待裝載類為Java應用程序編程接口類(Application Programming Interface, API 類)4。
[0041]另一種優(yōu)選的實施例,第一種待裝載類為常用應用程序要引用的類,第二種待裝載類為普通應用程序要引用的類,第一種待裝載類的被操作的頻率高于第二種待裝載類被操作的頻率。
[0042]類裝載器I把一個類裝入Java虛擬機中,要經(jīng)過三個步驟來完成,裝載、鏈接和初始化,其中,鏈接又可以分為校驗、準備和解析三步,除了解析外,其他步驟是嚴格按照順序完成的。本發(fā)明在類裝載器I進行裝載的時候,考慮智能手機的特點,充分修改了智能手機虛擬機加載模塊方法,將智能機常用模塊的應用程序進行特別的裝載處理,將常用模塊與普通模塊分開,分別進行加載,經(jīng)過裝載,連接,初始化后,這樣系統(tǒng)就有區(qū)別對待保證了有條理的處理,同時常用模塊和普通模塊之間也可以實現(xiàn)并發(fā)訪問,重點突出。
[0043]作為本發(fā)明的進一步改進,第一裝載單元11對待裝載隊列中的第一種待裝載類進行裝載的方法如下:進行預處理將第一種待裝載類的字節(jié)碼解析后在虛擬機中單獨進行處理,獨立加載第一種待裝載類所用到的庫函數(shù),直到第一種待裝載類的閉包不再增加。待裝載類的閉包不再增加,意味著要引用的類已加載完畢。
[0044]第二裝載單元12對待裝載隊列中的第二種待裝載類依照傳統(tǒng)的方法進行加載。由于傳統(tǒng)的方法屬于現(xiàn)有技術,在此不再贅述。
[0045]智能設備由于版權將傳統(tǒng)的Java進行了一定程度的修改,在Java運行時內(nèi)存空間中邏輯上可以被分為三部分:方法區(qū),Java工作棧和對象堆;方法區(qū),也稱為工作區(qū)間,存儲所有與Java類相關的信息,包括方法、類靜態(tài)域以及用于表示類內(nèi)部或類之間的關系的數(shù)據(jù)結(jié)構(gòu),其中最重要的是所有可能被執(zhí)行的Java方法都在方法區(qū)中。Java執(zhí)行引擎從這里讀取執(zhí)行代碼。因此,Java虛擬機必須有效的組織這些方法,在盡可能保持小巧緊湊的同時,使得執(zhí)行代碼能夠迅速的被定位和讀取,這正是類裝載器子系統(tǒng)的職能。
[0046]作為本發(fā)明的進一步改進,第一裝載單元11與第二裝載單元12分別設有單獨的工作區(qū)間,單獨的對象堆與Java工作棧,第一裝載單元11與第二裝載單元12之間相互訪問。第一裝載單元11與第二裝載單元12之可以并行處理,并且可以訪問對方的數(shù)據(jù)結(jié)構(gòu),從虛擬機加載的結(jié)構(gòu)方面將類裝載器結(jié)構(gòu)進行修改,常用應用程序要引用的類加載與普通應用程序要引用的類加載,每個加載類都可以實現(xiàn)自己的對字節(jié)碼進行獨立的分析,對應自己的數(shù)據(jù)區(qū),局部變量,返回值。
[0047]一種優(yōu)選的實施例,包括兩個類裝載器1,通過兩個類裝載器I并行處理待裝載類。本發(fā)明從類裝載器并行角度去考慮裝載相應的應用程序,將待裝載類中的常用應用程序要引用的類與普通應用程序要引用的類分開裝載,從系統(tǒng)結(jié)構(gòu)上將優(yōu)化處理方法引入虛擬機系統(tǒng)裝載領域。[0048] 以上所述僅為本發(fā)明較佳的實施例,并非因此限制本發(fā)明的實施方式及保護范圍,對于本領域技術人員而言,應當能夠意識到凡運用本發(fā)明說明書及圖示內(nèi)容所作出的等同替換和顯而易見的變化所得到的方案,均應當包含在本發(fā)明的保護范圍內(nèi)。
【權利要求】
1.一種Java虛擬機裝載程序的處理方法,其特征在于,所述方法包括: 步驟sll:啟動類裝載器后,將待裝載類加入一待裝載隊列; 步驟sl2:判斷所述待裝載隊列是否為空,如果不為空,從所述待裝載隊列獲取當前運行應用程序需要的類名,進入步驟sl3 ;如果為空,裝載結(jié)束,啟動解析字節(jié)碼的步驟; 步驟sl3:所述類裝載器包括一第一裝載單元和一第二裝載單元,依據(jù)獲取的所述類名,通過所述第一裝載單元和/或所述第二裝載單元執(zhí)行裝載類步驟;所述第一裝載單元用于對所述待裝載隊列中的第一種待裝載類進行裝載;所述第二裝載單元用于對所述待裝載隊列中的第二種待裝載類進行裝載。
2.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,還包括步驟sl4,步驟sl3過程中生成有裝載類的常量池,所述常量池中包括裝載類要引用的類,將所述要引用的類添加入待裝載隊列,并跳轉(zhuǎn)至步驟sl2。
3.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,所述第一裝載單元與所述第二裝載單元分別設有單獨的工作區(qū)間,單獨的對象堆與Java工作棧,所述第一裝載單元與所述第二裝載單元之間相互訪問。
4.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,所述第一種待裝載類為常用應用程序要引用的類,所述第二種待裝載類為普通應用程序要引用的類,所述第一種待裝載類的被操作的頻率高于所述第二種待裝載類被操作的頻率。
5.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,所述第一種待裝載類為應用程序類,所述第二種待裝載類為Java應用程序編程接口類。
6.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,步驟sl3中,所述第一裝載單元對所述待裝載隊列中的第一種待裝載類進行裝載的過程中;同一時間內(nèi),所述第二裝載單元對所述待裝載隊列中的第二種待裝載類進行裝載。
7.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,裝載結(jié)束后,經(jīng)過解析的字節(jié)碼進入Java執(zhí)行引擎進行處理。
8.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,所述第一裝載單元對所述待裝載隊列中的第一種待裝載類進行裝載的方法如下:進行預處理將所述第一種待裝載類的字節(jié)碼解析后在虛擬機中單獨進行處理,獨立加載所述第一種待裝載類所用到的庫函數(shù),直到所述第一種待裝載類的閉包不再增加。
9.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,應用于智能手機系統(tǒng)裝載領域。
10.根據(jù)權利要求1所述的一種Java虛擬機裝載程序的處理方法,其特征在于,包括兩個所述類裝載器,通過兩個所述類裝載器并行處理所述待裝載類。
【文檔編號】G06F9/445GK103713939SQ201310697873
【公開日】2014年4月9日 申請日期:2013年12月17日 優(yōu)先權日:2013年12月17日
【發(fā)明者】金果 申請人:上海斐訊數(shù)據(jù)通信技術有限公司