一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法
【專利摘要】本發(fā)明公開了一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法,Java線程在創(chuàng)建時(shí),Java虛擬機(jī)給每個(gè)Java線程分配一個(gè)獨(dú)有的Java棧,用來存放該Java線程的中間數(shù)據(jù),用來模擬實(shí)際硬件調(diào)用棧結(jié)構(gòu);每個(gè)Java棧又由多個(gè)Java幀組成,在每個(gè)Java幀中保存了一個(gè)Java方法的調(diào)用狀態(tài)。本發(fā)明采用獨(dú)特的虛擬調(diào)用棧(java?stack)和虛擬的寄存器結(jié)構(gòu),節(jié)省寶貴的數(shù)字電視機(jī)頂盒硬件資源,并容易把Java棧的多線程移植到只有很少寄存器的硬件平臺(tái)上,優(yōu)化了資源。這種java虛擬機(jī)設(shè)計(jì)具有良好的通用性,擴(kuò)展性強(qiáng),易于升級(jí)。
【專利說明】—種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)字電視中間件【技術(shù)領(lǐng)域】,特別涉及一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]當(dāng)前,數(shù)字電視中間件技術(shù)為廣電運(yùn)營商的業(yè)務(wù)提供一個(gè)相對(duì)統(tǒng)一的平臺(tái),使得跨域的業(yè)務(wù)互通變得更加簡(jiǎn)單。中間件技術(shù)通過對(duì)底層硬件資源的抽象,提供對(duì)上層各種應(yīng)用的支持,其中間件平臺(tái)負(fù)責(zé)屏蔽底層硬件差異性,并將底層資源模塊抽象為上層API接口供第三方業(yè)務(wù)模塊調(diào)用。通過終端平臺(tái)來進(jìn)行解析和呈現(xiàn)。在中間件平臺(tái)里,終端平臺(tái)在負(fù)責(zé)完成基本的音視頻播放的同時(shí),也負(fù)責(zé)接收前端廣播的應(yīng)用,并根據(jù)用戶的操作運(yùn)行這些應(yīng)用,使得跨平臺(tái)、海量信息業(yè)務(wù)的開展成為可能。
[0003]在數(shù)字電視中間件軟件平臺(tái),其中國數(shù)字電視中間件標(biāo)準(zhǔn)也規(guī)定了必需支持Java應(yīng)用,要實(shí)現(xiàn)支持Java的功能,就必須包含一個(gè)Java虛擬機(jī)。用來執(zhí)行運(yùn)行在數(shù)字電視機(jī)頂盒上的Java應(yīng)用程序,通過獨(dú)特的結(jié)構(gòu)及跨平臺(tái)設(shè)計(jì),將應(yīng)用程序和中間件標(biāo)準(zhǔn),底層操作系統(tǒng)、硬件驅(qū)動(dòng)隔離開,使上層的數(shù)字電視的服務(wù)應(yīng)用不必考慮過多的平臺(tái)細(xì)節(jié),實(shí)現(xiàn)跨平臺(tái)與硬件無關(guān)性。由于數(shù)字電視機(jī)頂盒的硬件資源比較有限,特別是能使用的內(nèi)存一般都很小。這就要求Java虛擬機(jī)運(yùn)行的環(huán)境設(shè)計(jì)應(yīng)該減少了內(nèi)存開銷,使內(nèi)存布局盡可能緊湊,統(tǒng)一資源管理的模式,同時(shí)采用虛擬調(diào)用棧,易于移植到只有很少寄存器的硬件平臺(tái)上,達(dá)到節(jié)省了寶貴的硬件資源目的。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法。
[0005]本發(fā)明的技術(shù)方案是,一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法,
[0006]Java線程在創(chuàng)建時(shí),Java虛擬機(jī)給每個(gè)Java線程分配一個(gè)獨(dú)有的Java棧,用來存放該Java線程的中間數(shù)據(jù),用來模擬實(shí)際硬件調(diào)用棧結(jié)構(gòu);
[0007]每個(gè)Java棧又由多個(gè)Java巾貞組成,在每個(gè)Java巾貞中保存了一個(gè)Java方法的調(diào)用狀態(tài)。
[0008]在Java虛擬機(jī)處理Java方法調(diào)用的過程中,在Java棧中為Java方法調(diào)用者和Java方法被調(diào)用者分配連續(xù)的Java巾貞;
[0009]在Java幀內(nèi)部按地址從低到高排列依次為局部變量區(qū)、幀數(shù)據(jù)區(qū)和操作棧數(shù)據(jù)區(qū);
[0010]當(dāng)Java調(diào)用方法調(diào)用被調(diào)用的Java方法時(shí),Java虛擬機(jī)把Java調(diào)用方法的操作數(shù)棧中的數(shù)據(jù),即被調(diào)用方法的參數(shù),拷貝到被調(diào)用Java方法Java幀的局部變量區(qū)中;
[0011]調(diào)用方法的Java幀是在被調(diào)用方法的Java幀前面被創(chuàng)建的,由于Java幀是連續(xù)相鄰分配,因此在Java幀的內(nèi)存布局上看,采用重構(gòu)技術(shù)把Java調(diào)用方法的操作棧數(shù)據(jù)區(qū)作為被調(diào)用Java方法的局部變量區(qū)。[0012]本發(fā)明是基于數(shù)字電視中間件架構(gòu)下,Java虛擬機(jī)運(yùn)行的環(huán)境是數(shù)字電視機(jī)頂盒,硬件資源比較有限,特別是能使用的內(nèi)存一般都很小。在如何有效使用內(nèi)存資源方面,實(shí)現(xiàn)了以下兩點(diǎn)創(chuàng)新:
[0013]I)采用緊湊對(duì)象布局設(shè)計(jì)減少了內(nèi)存開銷,使內(nèi)存布局盡可能緊湊
[0014]一般情況下一個(gè)Java對(duì)象的內(nèi)存布局包含兩個(gè)部分:
[0015](I)對(duì)象頭,包含對(duì)象的反射信息和對(duì)象的Hash編碼與鎖狀態(tài)。
[0016](2)對(duì)象體,包含了對(duì)象字段。
[0017]傳統(tǒng)的Java虛擬機(jī)實(shí)現(xiàn)對(duì)象頭的時(shí)候至少使用了兩個(gè)字存儲(chǔ),但由于對(duì)象的平均尺寸是很小的,一個(gè)對(duì)象頭就占4個(gè)字節(jié)是比較占用空間的?,F(xiàn)有的Java虛擬機(jī)中引入了一種新的設(shè)計(jì),每個(gè)對(duì)象頭只需要一個(gè)字就可以包含對(duì)象頭必要信息,節(jié)省內(nèi)存消耗,同時(shí)對(duì)象的動(dòng)態(tài)分配也比較快。
[0018]2)在傳統(tǒng)Java虛擬機(jī)的內(nèi)存管理實(shí)現(xiàn)上,Java虛擬機(jī)都采用指定的區(qū)域存放相應(yīng)的資源,比如用戶對(duì)象、反射數(shù)據(jù)、臨時(shí)數(shù)據(jù)和字節(jié)碼,而這樣很容易形成一系列不同的空間,如果這一系列可用空間過小,就形成我們所說的內(nèi)存碎片,顯然要整理這些碎片不是很容易。而現(xiàn)有的Java虛擬機(jī)的內(nèi)存管理采用統(tǒng)一資源管理的模式,在現(xiàn)有的Java虛擬機(jī)中分配的數(shù)據(jù)全被放到對(duì)象棧,這些數(shù)據(jù)包含:
[0019].Java 對(duì)象
[0020].反射對(duì)象
[0021].字節(jié)碼
[0022]?虛擬機(jī)內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
[0023]本發(fā)明最大優(yōu)點(diǎn)是就避免了一般虛擬機(jī)有小碎片的問題。在緊湊對(duì)象布局設(shè)計(jì)和內(nèi)存管理優(yōu)化后,基于數(shù)字電視中間件架構(gòu)下,還應(yīng)對(duì)Java棧的多線程框架優(yōu)化設(shè)計(jì),采用獨(dú)特的虛擬調(diào)用棧(java stack)和虛擬的寄存器結(jié)構(gòu),采用虛擬棧中的overlap技術(shù),這樣和平臺(tái)適配層配合,可節(jié)省寶貴的機(jī)頂盒硬件資源,并容易把Java棧的多線程移植到只有很少寄存器的硬件平臺(tái)上,優(yōu)化了資源。這種java虛擬機(jī)設(shè)計(jì)具有良好的通用性,擴(kuò)展性強(qiáng),易于升級(jí)。采用數(shù)字電視中間件與虛擬機(jī)分離,是中間件未來的發(fā)展趨勢(shì)。
【專利附圖】
【附圖說明】
[0024]圖1是數(shù)字電視Java虛擬機(jī)框架圖
[0025]圖2是數(shù)字電視中間件結(jié)構(gòu)示意圖
[0026]圖3是本發(fā)明實(shí)施例的虛擬調(diào)用棧結(jié)構(gòu)圖
[0027]圖4是本發(fā)明實(shí)施例的Java幀的內(nèi)存布局圖
【具體實(shí)施方式】
[0028]本發(fā)明是在一種在數(shù)字電視中間件技術(shù)架構(gòu)下,在Java虛擬機(jī)設(shè)計(jì)中,不使用真正硬件平臺(tái)的寄存器來保存中間數(shù)據(jù),而采用Java棧(每個(gè)Java線程在創(chuàng)建的時(shí)候,Java虛擬機(jī)會(huì)給它分配一個(gè)獨(dú)有棧,用來存放該線程的中間數(shù)據(jù))來虛擬實(shí)際硬件調(diào)用棧結(jié)構(gòu)。這樣基于中間件架構(gòu)下java棧的多線程框架設(shè)計(jì),采用獨(dú)特的虛擬調(diào)用棧(javastack)和虛擬的寄存器結(jié)構(gòu),采用虛擬棧中的overlap技術(shù),節(jié)省了寶貴的硬件資源,易于把Java虛擬機(jī)移植到只有很少寄存器的硬件平臺(tái)上。
[0029]在開發(fā)Java虛擬機(jī)的實(shí)現(xiàn)中,不使用真正硬件平臺(tái)的寄存器來保存中間數(shù)據(jù),而采用Java棧(每個(gè)Java線程在創(chuàng)建的時(shí)候,Java虛擬機(jī)會(huì)給它分配一個(gè)獨(dú)有棧,用來存放該線程的中間數(shù)據(jù))來虛擬實(shí)際硬件調(diào)用棧結(jié)構(gòu),每個(gè)Java棧又由多個(gè)Java幀組成,在每個(gè)Java幀中保存了一個(gè)Java方法的調(diào)用狀態(tài)。如圖3所示。
[0030] 這樣的系統(tǒng)結(jié)構(gòu)會(huì)更緊湊,同時(shí)由于線程每調(diào)用一個(gè)方法就會(huì)為該方法分配相應(yīng)的Java棧,因此不用考慮方法內(nèi)部變量多線程同步問題,由于不使用真實(shí)CPU的積存器,節(jié)省了寶貴的硬件資源,同時(shí)易于把Java棧的多線程移植到只有很少寄存器的硬件平臺(tái)上。
[0031]在Java虛擬機(jī)處理Java方法調(diào)用的過程中,在Java棧中為Java方法調(diào)用者和Java方法被調(diào)用著分配連續(xù)的Java中貞。
[0032]在Java幀內(nèi)部按地址從低到高排列依次為局部變量區(qū)、幀數(shù)據(jù)區(qū)和操作棧數(shù)據(jù)區(qū)。
[0033]當(dāng)Java調(diào)用方法調(diào)用被調(diào)用的Java方法時(shí),開發(fā)的Java虛擬機(jī)會(huì)把Java調(diào)用方法的操作數(shù)棧中的數(shù)據(jù)(被調(diào)用方法的參數(shù))拷貝到被調(diào)用Java方法Java幀的局部變量區(qū)中。
[0034]調(diào)用方法的Java幀是在被調(diào)用方法的Java幀前面被創(chuàng)建的,由于Java幀是連續(xù)相鄰分配,因此在Java幀的內(nèi)存布局上看,采用重構(gòu)(overlap)技術(shù)把Java調(diào)用方法的操作棧數(shù)據(jù)區(qū)作為被調(diào)用Java方法的局部變量區(qū)。例如,
[0035]
【權(quán)利要求】
1.一種基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法,其特征在于, Java線程在創(chuàng)建時(shí),Java虛擬機(jī)給每個(gè)Java線程分配一個(gè)獨(dú)有的Java棧,用來存放該Java線程的中間數(shù)據(jù),用來模擬實(shí)際硬件調(diào)用棧結(jié)構(gòu); 每個(gè)Java棧又由多個(gè)Java巾貞組成,在每個(gè)Java巾貞中保存了一個(gè)Java方法的調(diào)用狀態(tài)。
2.如權(quán)利要求1所述的基于中間件架構(gòu)下java棧的多線程實(shí)現(xiàn)方法,其特征在于, 在Java虛擬機(jī)處理Java方法調(diào)用的過程中,在Java棧中為Java方法調(diào)用者和Java方法被調(diào)用者分配連續(xù)的Java幀; 在Java幀內(nèi)部按地址從低到高排列依次為局部變量區(qū)、幀數(shù)據(jù)區(qū)和操作棧數(shù)據(jù)區(qū); 當(dāng)Java調(diào)用方法調(diào)用被調(diào)用的Java方法時(shí),Java虛擬機(jī)把Java調(diào)用方法的操作數(shù)棧中的數(shù)據(jù),即被調(diào)用方法的參數(shù),拷貝到被調(diào)用Java方法Java幀的局部變量區(qū)中; 調(diào)用方法的Java幀是在被調(diào)用方法的Java幀前面被創(chuàng)建的,由于Java幀是連續(xù)相鄰分配,因此在Java幀的內(nèi)存布局上看,采用重構(gòu)技術(shù)把Java調(diào)用方法的操作棧數(shù)據(jù)區(qū)作為被調(diào)用Java方法的局部變量區(qū)。
【文檔編號(hào)】G06F9/455GK103942100SQ201410192755
【公開日】2014年7月23日 申請(qǐng)日期:2014年5月9日 優(yōu)先權(quán)日:2014年5月9日
【發(fā)明者】許海華, 劉立平, 何明, 劉百川 申請(qǐng)人:內(nèi)蒙古中大傳媒發(fā)展有限公司