两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

減少存儲器需求的程序代碼執(zhí)行裝置的制作方法

文檔序號:6418844閱讀:154來源:國知局
專利名稱:減少存儲器需求的程序代碼執(zhí)行裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種用于執(zhí)行程序代碼的裝置,所說裝置包括定義裝入裝置,用于將至少兩個(gè)定義實(shí)體裝入到存儲器中,所說定義實(shí)體與所說定義裝入裝置相關(guān)聯(lián),該裝置還包括對象創(chuàng)建裝置,用于根據(jù)所說定義實(shí)體創(chuàng)建對象。
本發(fā)明還涉及一種執(zhí)行程序代碼的方法和一種傳送計(jì)算機(jī)程序的有形媒體,用于執(zhí)行所述程序代碼執(zhí)行方法。
可以從Tim Lindholm和Frank Yellin的出版物“The JavaTMVirtual MachineSpecification(JavaTM虛擬機(jī)說明書)”中知道如序言所述的裝置,可以從Sun的網(wǎng)站中獲取并且是從1996年9月第一次印刷的圖書中轉(zhuǎn)換而來的。
近年來充分提高了Java平臺的普及。Java是包括Java語言的平臺,其將Java語言編譯為在Java虛擬機(jī)上運(yùn)行的字節(jié)碼。
使用在虛擬機(jī)上運(yùn)行的字節(jié)碼的優(yōu)點(diǎn)在于,如果虛擬機(jī)存在這種組合,就可以在硬盤和操作系統(tǒng)的每個(gè)組合上運(yùn)行編譯過的字節(jié)碼。
Java語言是面向?qū)ο蟮?,意味著在?zhí)行程序的過程中根據(jù)定義實(shí)體創(chuàng)建對象,定義實(shí)體可能是Java語言中的類或接口。在創(chuàng)建對象前,首先必須將所需要的定義實(shí)體(類或接口)裝入到存儲器中。通過在Java語言中稱為類裝載程序的定義裝入裝置進(jìn)行該裝入操作??赡艽嬖谟糜诓煌x實(shí)體裝入方式的不同定義裝入裝置。例如在Java中可能存在用于從磁盤、從基于網(wǎng)絡(luò)的TCP/IP或從MPEG-2 Transport流中裝入它們的不同類裝載程序。
Java虛擬機(jī)具有存儲器管理系統(tǒng),該管理系統(tǒng)執(zhí)行無用單元收集程序,以便自動刪除不再需要的對象和類。
當(dāng)在例如TV和頂置盒等消費(fèi)品器材中使用Java時(shí),只能獲得有限數(shù)量的存儲器源。由于只能獲得有限數(shù)量的存儲器,目前將Java用于消費(fèi)品器材是非常困難的。
本發(fā)明的目的在于提供一種如前序所述的減少所需存儲器量的裝置。為實(shí)現(xiàn)所說目的,根據(jù)本發(fā)明的裝置的其特征在于,該裝置包括存儲器管理裝置,其用于從存儲器中刪除不具有相關(guān)對象的定義實(shí)體,與定義實(shí)體關(guān)聯(lián)的所說定義裝入裝置仍然具有相關(guān)對象。
通過從存儲器中刪除掉不具有相關(guān)對象的定義實(shí)體,可以釋放相當(dāng)數(shù)量的存儲器,結(jié)果是該裝置比現(xiàn)有技術(shù)的裝置需要較少的存儲器。
本發(fā)明建立在這樣一個(gè)認(rèn)識基礎(chǔ)上,在本說明書中的Java虛擬機(jī)中,規(guī)定只有在其定義裝入裝置不再可達(dá)到時(shí),才可以刪除該定義實(shí)體。這意味著不再存在通過所說定義裝入裝置已經(jīng)裝入的定義實(shí)體的對象。
可以通過下面的例子更清楚的理解。如果類裝載程序(定義裝入裝置)已裝入兩類(定義實(shí)體),可以不從存儲器中刪除不再具有相關(guān)對象的第一個(gè)裝入類,只要另一類仍然具有關(guān)聯(lián)的對象。其結(jié)果是在存儲器中類保持不必要的長度。
通過利用根據(jù)本發(fā)明的創(chuàng)造性構(gòu)思,只要一些類不再需要就可以卸載它們。
本發(fā)明實(shí)施例的其特征在于,該裝置包括指定裝置,用于將定義實(shí)體指定為可移去的;當(dāng)將定義實(shí)體指定為可移去的時(shí),將存儲器管理裝置設(shè)置成用于從存儲器中刪除不具有相關(guān)對象的定義實(shí)體;并且將存儲器管理裝置設(shè)置成用于從存儲器中刪除定義實(shí)體,該定義實(shí)體相應(yīng)于僅與不具有相關(guān)對象的定義實(shí)體關(guān)聯(lián)的定義裝入裝置。
可能存在一些情況,不希望經(jīng)常從存儲器中刪除不具有相關(guān)對象的定義實(shí)體。當(dāng)通過執(zhí)行類方法來改變類變量時(shí),可能是這種情況。如果從存儲器中刪除這種類并且當(dāng)再次需要時(shí)進(jìn)行再裝入,可能改變類變量的值。
當(dāng)將它們指定為可移去的時(shí),通過僅刪除不具有相關(guān)對象的定義實(shí)體,應(yīng)用程序可以通過將定義實(shí)體指定為可移去或不可移去來控制該移去。
本發(fā)明另一個(gè)實(shí)施例的其特征在于,所說裝置包括存儲裝置,用于存儲被指定為可移去的定義實(shí)體的標(biāo)志。
一種與存儲器管理裝置通信的簡單方法是,一個(gè)類無論是否可以卸載,如果它沒有要存儲在表的相關(guān)對象,在該表中連同指示輸入所有裝入的類,該指示指明該類是否可移去。此外,能夠?qū)⒃摌?biāo)志存儲在與每個(gè)類對象相關(guān)的對象標(biāo)頭中。
將參照附圖對本發(fā)明進(jìn)行描述。


圖1表示可以用于本發(fā)明的Java虛擬機(jī)的體系結(jié)構(gòu);圖2表示具有相關(guān)類和例示對象的類裝載程序;
圖3表示兩個(gè)類裝載程序,一個(gè)具有例示對象的類;圖4表示的是根據(jù)本發(fā)明程序的流程圖,用于根據(jù)圖1的存儲器管理系統(tǒng)14中。
在根據(jù)圖1的Java虛擬機(jī)中,將類管理子系統(tǒng)6設(shè)置成從本機(jī)硬盤驅(qū)動器或者從網(wǎng)絡(luò)裝入存儲器中沒有的類。
首先通過代碼校驗(yàn)器4對由類管理子系統(tǒng)6所裝入的類進(jìn)行檢驗(yàn)。通常只對來自網(wǎng)絡(luò)的類進(jìn)行校驗(yàn),因?yàn)樗鼈兛赡軄碜晕粗?、不可靠的來源。在裝入類時(shí),執(zhí)行語法檢驗(yàn)。同樣對所裝入類的“語義”一致性進(jìn)行檢驗(yàn)。例如這包括檢驗(yàn)類中所定義的常量和它們的類型是否是一致的。例如檢驗(yàn)定義為字符串的常量是否是真的字符串。
在運(yùn)行時(shí)間期間,執(zhí)行字節(jié)碼校驗(yàn)。這包括檢驗(yàn)堆棧的一致性,也就是校驗(yàn)沒有堆棧上溢和堆棧下溢的發(fā)生。還包括檢驗(yàn)輸入給變量的數(shù)據(jù)的類型是否與所說變量的聲明有關(guān)。
將執(zhí)行機(jī)8設(shè)置成用于執(zhí)行校驗(yàn)后的字節(jié)碼。為實(shí)現(xiàn)該執(zhí)行,執(zhí)行機(jī)具有三個(gè)可用的子系統(tǒng),也就是系統(tǒng)呼叫子系統(tǒng)8,用于調(diào)用操作系統(tǒng)執(zhí)行某些任務(wù),例如從磁盤或從網(wǎng)絡(luò)裝入真實(shí)文件,或者在顯示裝置上顯示圖形單元。此外,虛擬機(jī)(Virtual Machine)包括用于創(chuàng)建分隔線程(thread)的線程系統(tǒng)12。也將線程子系統(tǒng)12設(shè)置成用于使分隔線程同步。
Java VM還包括存儲器管理子系統(tǒng)14,其包括用于從存儲器中自動刪除廢棄條目的無用單元收集程序。在Sun公司執(zhí)行Java VM中使用一種所謂的“做標(biāo)記和刪除”的無用單元收集程序算法。本領(lǐng)域的技術(shù)人員對于這種類型的無用單元收集程序算法是熟知的。在這種算法中,堆中存在的每個(gè)對象具有所謂的標(biāo)記位。以復(fù)位堆陣中存在的全部對象的標(biāo)記位開始無用單元收集程序的處理。隨后參照堆陣中的對象檢查所有的字段和變量。對于在堆陣中由字段或變量引用的的每個(gè)對象設(shè)定一個(gè)標(biāo)記位。最后,無用單元收集程序刪除該堆陣并且回收由沒有設(shè)置標(biāo)記位的對象所使用的存儲區(qū)域。
最后,Java VM包括本地方法接口(Native Method Interface)子系統(tǒng)16,使其能夠使用由C、C++或匯編語言所編寫的函數(shù)。這對于為再利用現(xiàn)有的程序庫或?yàn)槟軌蚶米顑?yōu)化匯編程序以改進(jìn)性能是方便的。
在根據(jù)圖2的圖表中,給出根據(jù)圖1的Java VM堆陣中存在的對象。圖2表示通過類裝載程序18裝入的第一類22和第二類20。對來自類22的一個(gè)對象24進(jìn)行例示,并且類20沒有例示對象。
當(dāng)使用根據(jù)現(xiàn)有技術(shù)的無用單元收集程序算法時(shí),對象18、20、22和24中一個(gè)也沒有作為無用存儲單元被收集,因?yàn)轭愌b載程序18仍然是可達(dá)到的(具有來自所說類裝載程序18裝入的類中的例示對象24)。在根據(jù)本發(fā)明的裝置中,可以從存儲器中刪除類20,因?yàn)樗鼪]有例示對象。最好是,將一種方法加到類CLASS中以指示是否可以卸載類,當(dāng)其不再有例示對象時(shí)。這種方法的語法可以是“EnableClassUnloading(類)”。該方法可以在相關(guān)類的類標(biāo)頭設(shè)定一個(gè)位,以指示該類是可以刪除的。另外,能夠在VM中構(gòu)造一個(gè)表,所有可以刪除的類寄存在其中。
在圖3中所表示的是根據(jù)圖1 Java VM堆陣中存在的另一組對象。圖3表示已裝入第一類32和第二類34的第一類裝載程序36。類32和34都是不可達(dá)到的。不考慮是否調(diào)用方法EnableClassUnloading,可以將類32和34以及它們的類裝載程序36從存儲器中刪除,因?yàn)轭愌b載程序36是不可達(dá)到的。
圖3還表示已裝入類28的第二類裝載程序26,來自類28的對象30已經(jīng)例示。類28具有一個(gè)可達(dá)到的對象30。通常,不卸載(從存儲器中刪除)類裝載程序26、類28和對象30。
可以看出,在Java 1.2SDK中引入?yún)⒖紝ο蟮母拍?,?dǎo)致可以較強(qiáng)或較弱地達(dá)到對象?,F(xiàn)有技術(shù)的無用單元收集程序刪除所有不能較強(qiáng)達(dá)到的對象。可以看出,當(dāng)使用參考對象時(shí),如在參照圖2的以上描述中所使用的可達(dá)到概念就意味較強(qiáng)的可達(dá)到。
在根據(jù)圖4的下表中,附圖標(biāo)記具有下述的含意編號標(biāo)題 含意40 BEGIN 開始執(zhí)行無用單元收集程序42 FIND REACHABLE OBJECT 發(fā)現(xiàn)可達(dá)到的對象44 MARK REACHABLE OBJECT 將對象標(biāo)記為可達(dá)到46 ALL OBJECT DONE 檢驗(yàn)是否已對所有對象進(jìn)行校驗(yàn)48 TAKE OBJECT 將新對象認(rèn)做是無用單元收集49 IS OBJECT MARKED 檢驗(yàn)是否已對對象做標(biāo)記50 IS OBJECT A CLASS 檢驗(yàn)對象是否是類52IS OBJECT DELETABLE檢驗(yàn)對象是否是可刪除的54FIND CLASS LOADER 對相應(yīng)于當(dāng)前對象的類裝載程序定位56IS CLASS LOADER MARKED 檢驗(yàn)是否已對類裝載程序做標(biāo)記58DELETE OBJECT 從存儲器中刪除對象60ALL OBJECT DONE檢驗(yàn)是否對所有對象進(jìn)行處理62END停止執(zhí)行無用單元收集程序在根據(jù)圖4的程序指令40中,開始執(zhí)行程序并需要進(jìn)行初始化。在指令42中,從相應(yīng)于程序當(dāng)前狀態(tài)的字段和變量開始搜索可達(dá)到的對象。如果發(fā)現(xiàn)可達(dá)到的對象,就在指令44中對對象做標(biāo)記。在指令46中,檢驗(yàn)是否已發(fā)現(xiàn)所有可達(dá)到的對象。這是一種為相應(yīng)的對象已對VM當(dāng)前狀態(tài)中所有字段和變量進(jìn)行追蹤的情況。如果仍然沒有完全找到所有可達(dá)到的對象,程序跳到指令42以發(fā)現(xiàn)下一個(gè)可達(dá)到的對象。
如果已經(jīng)發(fā)現(xiàn)所有可達(dá)到的對象,完成無用單元收集程序算法“做標(biāo)記和刪除”的“做標(biāo)記階段”,并且開始“刪除階段”。
在指令48中,選擇來自堆棧的對象用于校驗(yàn)。在指令49中,檢驗(yàn)是否對對象做標(biāo)記。如果對象已做標(biāo)記,不能從存儲器中刪除它,并且程序繼續(xù)進(jìn)行到指令60。如果對象沒有做標(biāo)記,在指令50中檢驗(yàn)對象是否是類。例如,這可以從與對象關(guān)聯(lián)的對象堆棧中的字段來確定。如果對象不是類,程序繼續(xù)運(yùn)行到指令58,在指令58中從存儲器中刪除對象。隨后。程序繼續(xù)運(yùn)行到指令60。
如果對象是類,在指令52中檢驗(yàn)是否將類指定為可刪除。例如,這可以通過檢驗(yàn)是否已調(diào)用EnableClassUnloading方法對對象標(biāo)頭中的“可刪除位”進(jìn)行過設(shè)置來完成。此外,對包括所有可刪除類的表進(jìn)行查詢也是可能的。如果對象是可刪除的,就在指令58中刪除指令58中的類對象。
如果該類沒有標(biāo)記為可刪除,在指令54中搜索已裝入類的類裝載程序。這可以通過讀取VM中的包括已裝入的類以及與它們關(guān)聯(lián)的類裝載程序的表來完成。在發(fā)現(xiàn)類裝載程序之后,在指令56中檢驗(yàn)該類裝載程序?qū)ο笫欠褡隽藰?biāo)記。如果該類裝載程序沒有做標(biāo)記,在指令58中刪除該類對象。如果該類裝載程序已做了標(biāo)記,不用從存儲器中刪除類,并且程序繼續(xù)運(yùn)行到指令60。
在指令60中,檢驗(yàn)是否已對堆陣中的所有對象進(jìn)行過處理。如果是這種情況,在指令62中結(jié)束該程序。否則程序繼續(xù)運(yùn)行到指令48處理堆陣中的下一個(gè)對象。
權(quán)利要求
1.用于執(zhí)行程序代碼的裝置,所說裝置包括定義裝入裝置,用于將至少兩個(gè)定義實(shí)體裝入存儲器中,所說定義實(shí)體與所說定義裝入裝置相關(guān),該裝置還包括對象創(chuàng)建裝置,用于根據(jù)所說定義實(shí)體創(chuàng)建對象,其特征在于該裝置包括存儲器管理裝置,用于從存儲器中刪除不具有相關(guān)對象的定義實(shí)體,所說定義裝入裝置與仍然具有相關(guān)對象的定義實(shí)體相關(guān)聯(lián)。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于所說裝置包括用于將定義實(shí)體指定為可移去的指定裝置;當(dāng)定義實(shí)體指定為可移去時(shí),將存儲器管理裝置設(shè)置成用于從存儲器中刪除掉不再具有相關(guān)對象的定義實(shí)體;并且將存儲器管理裝置設(shè)置成用于從存儲器中刪除定義實(shí)體,該定義實(shí)體相應(yīng)于僅與不具有相關(guān)對象的定義實(shí)體關(guān)聯(lián)的定義裝入裝置。
3.根據(jù)權(quán)利要求2所述的裝置,其特征在于所說裝置包括存儲裝置,用于存儲指定為可移去的定義實(shí)體的標(biāo)志。
4.用于執(zhí)行程序代碼的方法,所說方法包括利用定義裝入實(shí)體將至少兩個(gè)定義實(shí)體裝入存儲器中,所說定義實(shí)體與特征裝入實(shí)體關(guān)聯(lián),該方法還包括根據(jù)所說定義實(shí)體創(chuàng)建對象,其特征在于該方法包括從存儲器中刪除不具有相關(guān)對象的定義實(shí)體,所說定義裝入實(shí)體與仍然具有相關(guān)對象的定義實(shí)體相關(guān)聯(lián)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于所說方法包括將定義實(shí)體指定為可移去;當(dāng)定義實(shí)體指定為可移去時(shí),從存儲器中刪除掉不具有相關(guān)對象的定義實(shí)體;并且該方法包括從存儲器中刪除定義實(shí)體,該定義實(shí)體僅與不具有相關(guān)對象的定義實(shí)體相關(guān)聯(lián)。
6.根據(jù)權(quán)利要求5所述的權(quán)利要求,其特征在于所說方法包括存儲指定為可移去的定義實(shí)體的標(biāo)志。
7.傳送計(jì)算機(jī)程序的有形媒體,該計(jì)算機(jī)程序用于執(zhí)行程序代碼執(zhí)行方法,所說方法包括利用定義裝入實(shí)體將至少兩個(gè)定義實(shí)體裝入存儲器中,所說定義實(shí)體與定義裝入實(shí)體關(guān)聯(lián),該方法還包括根據(jù)所說定義實(shí)體創(chuàng)建對象,其特征在于該方法包括從存儲器中刪除不具有相關(guān)對象的定義實(shí)體,所說定義裝入裝置與仍然具有相關(guān)對象的定義實(shí)體相關(guān)聯(lián)。
8.根據(jù)權(quán)利要求7所說的有形媒體,其特征在于所說方法包括將定義實(shí)體指定為可移去;當(dāng)定義實(shí)體指定為可移去時(shí),從存儲器中刪除掉不具有相關(guān)對象的定義實(shí)體;并且該方法包括從存儲器中刪除定義實(shí)體,該定義實(shí)體僅與不具有相關(guān)對象的定義實(shí)體相關(guān)聯(lián)。
9.根據(jù)權(quán)利要求8所說的有形媒體,其特征在于所說方法包括存儲指定為可移去的定義實(shí)體的標(biāo)志。
全文摘要
Java虛擬機(jī)(2),包括用于執(zhí)行Java字節(jié)碼的執(zhí)行機(jī)和存儲器管理系統(tǒng)(14)。存儲器管理系統(tǒng)(14)執(zhí)行無用單元收集程序,以從Java程序的當(dāng)前狀態(tài)中刪除不可達(dá)到的對象。在現(xiàn)有技術(shù)的存儲器管理系統(tǒng)中,只有己裝入類對象的類裝載程序?qū)ο笫遣荒苓_(dá)到的,才能從存儲器中刪除代表類特征的對象。根據(jù)本發(fā)明將存儲器管理系統(tǒng)(14)設(shè)置成用于刪除類,該類沒有可以在程序當(dāng)前狀態(tài)中達(dá)到的例示對象,即使類裝載程序仍然是可達(dá)到的。這導(dǎo)到了實(shí)質(zhì)的存儲器節(jié)省。最好是,代表類特征的對象具有一種方法,該方法可以發(fā)信號表示,如果它不再有例示對象,可以從存儲器中刪除該特征。
文檔編號G06F9/445GK1292119SQ99803506
公開日2001年4月18日 申請日期1999年12月20日 優(yōu)先權(quán)日1999年1月6日
發(fā)明者G·H·賽彭貝格, J·A·G·武格茨 申請人:皇家菲利浦電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
宽甸| 定安县| 牙克石市| 辛集市| 刚察县| 星子县| 遵化市| 同心县| 吴川市| 井陉县| 长葛市| 中江县| 汶川县| 深圳市| 阳高县| 梅河口市| 旬阳县| 正镶白旗| 吉水县| 固原市| 淮阳县| 德庆县| 桃园市| 湛江市| 印江| 深泽县| 突泉县| 白城市| 蓝山县| 东至县| 鄱阳县| 夏河县| 晋江市| 东明县| 峡江县| 彭山县| 喜德县| 隆回县| 寿光市| 多伦县| 含山县|