国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種可進(jìn)行高效對(duì)象管理的方法及裝置制造方法

      文檔序號(hào):6545070閱讀:167來(lái)源:國(guó)知局
      一種可進(jìn)行高效對(duì)象管理的方法及裝置制造方法
      【專(zhuān)利摘要】本發(fā)明公開(kāi)一種可進(jìn)行高效對(duì)象管理的方法和裝置,包括:S1:java卡虛擬機(jī)接收來(lái)自當(dāng)前應(yīng)用程序的指令,若是創(chuàng)建對(duì)象指令則執(zhí)行S2,若是修改對(duì)象指令則執(zhí)行S5;S2:根據(jù)創(chuàng)建對(duì)象指令獲取當(dāng)前應(yīng)用實(shí)例、對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置;S3:從系統(tǒng)信息中獲取對(duì)象堆的剩余空間的起始偏移地址;S4:按照對(duì)象大小和對(duì)象類(lèi)型創(chuàng)建對(duì)象,更新對(duì)象堆的剩余空間的起始偏移地址,將創(chuàng)建的對(duì)象的偏移地址存入當(dāng)前應(yīng)用實(shí)例中,返回S1;S5:根據(jù)修改對(duì)象指令獲取對(duì)象偏移地址、修改位置和修改內(nèi)容;S6:將對(duì)象偏移地址上的對(duì)象的所述修改位置上的數(shù)據(jù)修改為所述修改內(nèi)容,返回S1。
      【專(zhuān)利說(shuō)明】一種可進(jìn)行高效對(duì)象管理的方法及裝置
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及java卡【技術(shù)領(lǐng)域】,尤其涉及一種可進(jìn)行高效對(duì)象管理的方法及裝置?!颈尘凹夹g(shù)】
      [0002]java卡中使用對(duì)象來(lái)保存一些數(shù)據(jù),對(duì)象包括對(duì)象頭和數(shù)據(jù)域,對(duì)象頭和數(shù)據(jù)域可以分開(kāi)存儲(chǔ),也可以連續(xù)存儲(chǔ)。永久性對(duì)象的對(duì)象頭和數(shù)據(jù)域順序排列的存儲(chǔ)在EEPROM中;臨時(shí)對(duì)象的對(duì)象頭和數(shù)據(jù)域是分開(kāi)存儲(chǔ)的,其中對(duì)象頭存儲(chǔ)在EEPROM中,而數(shù)據(jù)域存儲(chǔ)在RAM中。永久性對(duì)象和臨時(shí)對(duì)象的對(duì)象頭在EEPROM中按創(chuàng)建的先后順序排列。java卡運(yùn)行時(shí)需要?jiǎng)?chuàng)建新對(duì)象,然后對(duì)這些對(duì)象進(jìn)行管理。
      [0003]目前,java卡虛擬機(jī)中基于對(duì)象表的對(duì)象管理方法中,java卡虛擬機(jī)中包括子對(duì)象表和主對(duì)象表,其中子對(duì)象表的表項(xiàng)中存儲(chǔ)對(duì)象的偏移地址,主對(duì)象表的表項(xiàng)中存儲(chǔ)子對(duì)象表的偏移地址,在對(duì)對(duì)象進(jìn)行操作時(shí),首先根據(jù)對(duì)象的主對(duì)象表索引值在主對(duì)象表中查找對(duì)應(yīng)的子對(duì)象表的偏移地址,再根據(jù)對(duì)象的子對(duì)象表索弓I值在子對(duì)象表中查找對(duì)象的偏移地址,根據(jù)查找到的對(duì)象的偏移地址計(jì)算對(duì)象的絕對(duì)地址,之后再對(duì)象進(jìn)行操作;在垃圾回收過(guò)程中,也需要根據(jù)被回收對(duì)象的主對(duì)象表索引值在主對(duì)象表中查找對(duì)應(yīng)的子對(duì)象表的偏移地址,再根據(jù)被回收對(duì)象的子對(duì)象表索弓I值在子對(duì)象表中查找被回收對(duì)象的偏移地址,將查找到的偏移地址清空。因此,java卡虛擬機(jī)中基于對(duì)象表的對(duì)象管理方法中,java卡虛擬機(jī)需要進(jìn)行兩次查表操作,操作流程復(fù)雜,效率低,耗時(shí)多。

      【發(fā)明內(nèi)容】

      [0004]本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種可進(jìn)行高效對(duì)象管理的方法及裝置,在對(duì)對(duì)象進(jìn)行操作時(shí)不需查找子對(duì)象表和主對(duì)象表,簡(jiǎn)化了 java卡虛擬機(jī)的操作流程,提高java卡虛擬機(jī)工作效率。
      [0005]本發(fā)明提供的一種可進(jìn)行高效對(duì)象管理的方法,包括:
      [0006]步驟SI: java卡虛擬機(jī)接收來(lái)自當(dāng)前應(yīng)用程序的指令,判斷所述指令的類(lèi)型,若是創(chuàng)建對(duì)象指令則執(zhí)行步驟S2,若是修改對(duì)象指令則執(zhí)行步驟S5 ;
      [0007]步驟S2:所述java卡虛擬機(jī)根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置;
      [0008]步驟S3:所述java卡虛擬機(jī)從系統(tǒng)信息中獲取對(duì)象堆的剩余空間的起始偏移地址;
      [0009]步驟S4:所述java卡虛擬機(jī)將所述對(duì)象堆的剩余空間的起始偏移地址作為創(chuàng)建的對(duì)象的偏移地址,按照所述對(duì)象大小和所述對(duì)象類(lèi)型創(chuàng)建對(duì)象,根據(jù)所述對(duì)象大小更新所述系統(tǒng)信息中的所述對(duì)象堆的剩余空間的起始偏移地址,根據(jù)當(dāng)前應(yīng)用實(shí)例的偏移地址將所述創(chuàng)建的對(duì)象的偏移地址存入到當(dāng)前應(yīng)用實(shí)例中與所述對(duì)象地址位置對(duì)應(yīng)的位置中,返回步驟SI ;[0010]步驟S5:所述java卡虛擬機(jī)根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述修改對(duì)象指令獲取修改位置和修改內(nèi)容;
      [0011]步驟S6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象偏移地址和所述修改位置,將所述對(duì)象偏移地址上的對(duì)象中所述修改位置上的數(shù)據(jù)修改為所述修改內(nèi)容,返回步驟SI。
      [0012]所述步驟SI之前還包括:所述java卡虛擬機(jī)接收用戶(hù)發(fā)送的選擇應(yīng)用指令,根據(jù)所述選擇應(yīng)用指令獲取應(yīng)用ID,根據(jù)所述應(yīng)用ID查找對(duì)應(yīng)的應(yīng)用程序,并判斷是否查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序,是則將查找到的所述應(yīng)用程序作為當(dāng)前應(yīng)用程序,執(zhí)行步驟SI,否則提示錯(cuò)誤,結(jié)束。
      [0013]所述步驟S2具體為:所述java卡虛擬機(jī)對(duì)所述創(chuàng)建對(duì)象指令進(jìn)行編譯,得到第一編譯指令,根據(jù)所述第一編譯指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述第一編譯指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置。
      [0014]所述步驟S2中根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小為:所述java卡虛擬機(jī)從所述創(chuàng)建對(duì)象指令中獲取所述對(duì)象大小。
      [0015]所述步驟S2中根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小為:所述java卡虛擬機(jī)從所述創(chuàng)建對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述對(duì)象大小。
      [0016]所述步驟S3與步驟S4之間包括:所述java卡虛擬機(jī)從所述系統(tǒng)信息中獲取對(duì)象堆大小,根據(jù)所述對(duì)象堆大小和所述對(duì)象堆的剩余空間的起始偏移地址得到對(duì)象堆的剩余空間大小,判斷所述對(duì)象堆的剩余空間大小是否大于所述對(duì)象大小,是則執(zhí)行步驟S4,否則提示錯(cuò)誤,返回步驟SI。
      [0017]所述步驟S5具體為:所述java卡虛擬機(jī)對(duì)所述修改對(duì)象指令進(jìn)行編譯,得到第二編譯指令,根據(jù)所述第二編譯指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述第二編譯指令獲取修改位置和修改內(nèi)容。
      [0018]所述步驟S5中根據(jù)所述修改對(duì)象指令獲取修改內(nèi)容為:所述java卡虛擬機(jī)從所述修改對(duì)象指令中獲取所述修改內(nèi)容。
      [0019]所述步驟S5中根據(jù)所述修改對(duì)象指令獲取修改內(nèi)容為:所述java卡虛擬機(jī)從所述修改對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述修改內(nèi)容。
      [0020]所述步驟SI中判斷所述指令的類(lèi)型,還包括,若是刪包指令則執(zhí)行步驟S7 ;
      [0021]步驟S7:所述java卡虛擬機(jī)掃描包堆,根據(jù)所述包堆中的組件的偏移地址計(jì)算出包堆碎片,對(duì)所述包堆碎片進(jìn)行合并,執(zhí)行步驟S8 ;
      [0022]步驟S8:所述java卡虛擬機(jī)掃描對(duì)象堆,將對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中,返回步驟SI。
      [0023]所述步驟S7具體為:[0024]步驟S7-1:所述java卡虛擬機(jī)獲取所述包堆的最高偏移地址,并將其作為當(dāng)前偏移地址;
      [0025]步驟S7-2:所述java卡虛擬機(jī)判斷所述當(dāng)前偏移地址是否大于包堆剩余空間的起始偏移地址,是則執(zhí)行步驟S7-3 ;否則執(zhí)行步驟S7-8 ;
      [0026]步驟S7-3:所述java卡虛擬機(jī)在所述包堆中查找偏移地址小于當(dāng)前偏移地址的組件,判斷是否查找到偏移地址小于當(dāng)前偏移地址的組件,是則執(zhí)行步驟S7-4,否則執(zhí)行步驟 S7-7 ;
      [0027]步驟S7-4:所述java卡虛擬機(jī)在查找到的所述組件中獲取偏移地址最大的組件作為當(dāng)前組件的相鄰組件,根據(jù)當(dāng)前偏移地址與所述相鄰組件的偏移地址之間的碎片大小更新包堆碎片大小,執(zhí)行步驟S7-5 ;
      [0028]步驟S7-5:所述java卡虛擬機(jī)根據(jù)所述相鄰組件的偏移地址更新當(dāng)前偏移地址,根據(jù)當(dāng)前偏移地址更新當(dāng)前組件,判斷所述包堆碎片大小是否為0,是則返回步驟S7-2,否則執(zhí)行步驟S7-6 ;
      [0029]步驟S7-6:所述java卡虛擬機(jī)根據(jù)所述包堆碎片大小,將當(dāng)前組件向高地址方向移動(dòng),返回步驟S7-2 ;
      [0030]步驟S7-7:所述java卡虛擬機(jī)根據(jù)當(dāng)前偏移地址與所述包堆剩余空間的起始偏移地址之間的碎片大小更新所述包堆碎片大小,執(zhí)行步驟S7-8 ;
      [0031]步驟S7-8:所述java卡虛擬機(jī)判斷所述包堆碎片大小是否為0,是則執(zhí)行步驟S8,否則根據(jù)所述包堆碎片大小更新所述包堆剩余空間的起始偏移地址,執(zhí)行步驟S8。
      [0032]所述步驟S8具體為:
      [0033]步驟S8-1:所述java卡虛擬機(jī)初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址;
      [0034]步驟S8-2:所述java卡虛擬機(jī)判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址,是則執(zhí)行步驟S8-3,否則執(zhí)行步驟S8-8 ;
      [0035]步驟S8-3:所述java卡虛擬機(jī)記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大小,判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收,是則執(zhí)行步驟S8-4,否則執(zhí)行步驟S8-5 ;
      [0036]步驟S8-4:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大小,將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空,執(zhí)行步驟S8-7 ;
      [0037]步驟S8-5:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為0,是則執(zhí)行步驟
      S8-7,否則執(zhí)行步驟S8-6 ;
      [0038]步驟S8-6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述記錄的對(duì)象偏移地址的終值,執(zhí)行步驟S8-7 ;
      [0039]步驟S8-7:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述記錄的對(duì)象偏移地址的初值,返回步驟S8-2 ;
      [0040]步驟S8-8:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為0,是則執(zhí)行步驟58-10,否則執(zhí)行步驟S8-9;
      [0041]步驟S8-9:所述java卡虛擬機(jī)根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址,執(zhí)行步驟S8-10 ;
      [0042]步驟S8-10:所述java卡虛擬機(jī)清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小,返回步驟Si。
      [0043]所述步驟S5與步驟S6之間包括:所述java卡虛擬機(jī)判斷獲取到的所述對(duì)象偏移地址是否為空,是則提示錯(cuò)誤,返回步驟SI,否則執(zhí)行步驟S6。
      [0044]所述步驟SI中判斷所述指令的類(lèi)型,還包括,若是垃圾回收指令則執(zhí)行步驟S9 ;
      [0045]步驟S9:所述java卡虛擬機(jī)掃描對(duì)象堆,將所述對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中,返回步驟Si。
      [0046]所述步驟S9具體為:
      [0047]步驟S9-1:所述java卡虛擬機(jī)初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址;
      [0048]步驟S9-2:所述java卡虛擬機(jī)判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址,是則執(zhí)行步驟S9-3,否則執(zhí)行步驟S9-8 ;
      [0049]步驟S9-3:所述java卡虛擬機(jī)記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大小,判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收,是則執(zhí)行步驟S9-4,否則執(zhí)行步驟S9-5 ;
      [0050]步驟S9-4:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大小,將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空,執(zhí)行步驟S9-7 ;
      [0051]步驟S9-5:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為0,是則執(zhí)行步驟
      59-7,否則執(zhí)行步驟S9-6;
      [0052]步驟S9-6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值,執(zhí)行步驟S9-7 ;
      [0053]步驟S9-7:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述記錄的對(duì)象偏移地址的初值,返回步驟S9-2 ;
      [0054]步驟S9-8:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為0,是則執(zhí)行步驟
      S9-10,否則執(zhí)行步驟S9-9 ;
      [0055]步驟S9-9:所述java卡虛擬機(jī)根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址,執(zhí)行步驟S9-10 ;
      [0056]步驟S9-10:所述java卡虛擬機(jī)清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小,返回步驟SI。
      [0057]所述步驟S5與步驟S6之間包括:所述java卡虛擬機(jī)判斷獲取到的所述對(duì)象偏移地址是否為空,是則提示錯(cuò)誤,返回步驟SI,否則執(zhí)行步驟S6。
      [0058]所述步驟SI之前包括:[0059]步驟SO:所述java卡虛擬機(jī)根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象堆碎片大小判斷是否需要進(jìn)行掉電恢復(fù),是則執(zhí)行步驟S10,否則執(zhí)行步驟SI ;
      [0060]步驟SlO:所述java卡虛擬機(jī)根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值進(jìn)行掉電恢復(fù)后,執(zhí)行步驟Si。
      [0061]所述步驟SlO包括:
      [0062]步驟S10-1:所述java卡虛擬機(jī)獲取所述系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值;
      [0063]步驟S10-2:所述java卡虛擬機(jī)掃描對(duì)象堆,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為記錄的所述對(duì)象偏移地址的終值,獲取所述對(duì)象堆的尾地址;
      [0064]步驟S10-3:所述java卡虛擬機(jī)根據(jù)所述記錄的對(duì)象偏移地址的終值的位置上的對(duì)象的大小更新記錄的對(duì)象偏移地址的初值,判斷所述記錄的對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址,是則執(zhí)行步驟S10-4,否則執(zhí)行步驟S10-6 ;
      [0065]步驟S10-4:所述java卡虛擬機(jī)根據(jù)所述記錄的對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述記錄的對(duì)象偏移地址的終值,將所述記錄的對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述記錄的對(duì)象偏移地址的終值的位置上;
      [0066]步驟S10-5:所述java卡虛擬機(jī)將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述記錄的對(duì)象偏移地址的終值,返回步驟S10-3 ;
      [0067]步驟S10-6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象堆剩余空間的起始偏移地址,清空所述系統(tǒng)信息中記錄的對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小,執(zhí)行步驟Si。
      [0068]一種可進(jìn)行高效對(duì)象管理的裝置,包括:接收模塊、第一判斷模塊、第一獲取模塊、第二獲取模塊、創(chuàng)建模塊、第三獲取模塊和修改模塊;
      [0069]所述接收模塊,用于接收來(lái)自當(dāng)前應(yīng)用程序的指令;
      [0070]所述第一判斷模塊,用于判斷所述接收模塊接收到的所述指令的類(lèi)型;
      [0071]所述第一獲取模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為創(chuàng)建對(duì)象指令時(shí),根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置;
      [0072]所述第二獲取模塊,用于從系統(tǒng)信息中獲取對(duì)象堆的剩余空間的起始偏移地址;
      [0073]所述創(chuàng)建模塊,用于將所述第二獲取模塊獲取到的所述對(duì)象堆的剩余空間的起始偏移地址作為創(chuàng)建的對(duì)象的偏移地址,按照所述第一獲取模塊獲取到的所述對(duì)象大小和所述對(duì)象類(lèi)型創(chuàng)建對(duì)象,根據(jù)所述對(duì)象大小更新所述系統(tǒng)信息中的所述對(duì)象堆的剩余空間的起始偏移地址,根據(jù)當(dāng)前應(yīng)用實(shí)例的偏移地址將所述創(chuàng)建的對(duì)象的偏移地址存入到當(dāng)前應(yīng)用實(shí)例中與所述對(duì)象地址位置對(duì)應(yīng)的位置中;
      [0074]所述第三獲取模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為修改對(duì)象指令時(shí),根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述修改對(duì)象指令獲取修改位置和修改內(nèi)容;
      [0075]所述修改模塊,用于根據(jù)所述第三獲取模塊獲取到的所述對(duì)象偏移地址和所述修改位置,將所述對(duì)象偏移地址上的對(duì)象中所述修改位置上的數(shù)據(jù)修改為所述第三獲取模塊獲取到的所述修改內(nèi)容。
      [0076]所述接收模塊還用于接收用戶(hù)發(fā)送的選擇應(yīng)用指令;
      [0077]所述裝置還包括查找模塊和提示模塊;
      [0078]所述查找模塊,用于根據(jù)所述接收模塊接收到的所述選擇應(yīng)用指令獲取應(yīng)用ID,根據(jù)所述應(yīng)用ID查找對(duì)應(yīng)的應(yīng)用程序,并判斷是否查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序,是則將查找到的所述應(yīng)用程序作為當(dāng)前應(yīng)用程序;
      [0079]所述提示模塊,用于在所述查找模塊未查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序時(shí),提示錯(cuò)誤;
      [0080]所述接收模塊還用于在所述查找模塊查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序時(shí),進(jìn)行工作。
      [0081]所述第一獲取模塊包括:第一編譯單元和第一獲取單元;
      [0082]所述第一編譯單元,用于對(duì)所述創(chuàng)建對(duì)象指令進(jìn)行編譯,得到第一編譯指令;
      [0083]所述第一獲取單元,用于根據(jù)所述第一編譯單元編譯得到的所述第一編譯指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述第一編譯單元編譯得到的所述第一編譯指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置。
      [0084]所述第一獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為創(chuàng)建對(duì)象指令時(shí),根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,從所述創(chuàng)建對(duì)象指令中獲取所述對(duì)象大小,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象類(lèi)型和對(duì)象地址位置。
      [0085]所述第一獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為創(chuàng)建對(duì)象指令時(shí),根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,從所述創(chuàng)建對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述對(duì)象大小,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象類(lèi)型和對(duì)象地址位置。
      [0086]所述裝置還包括第四獲取模塊、第二判斷模塊和提示模塊;
      [0087]所述第四獲取模塊,用于從所述系統(tǒng)信息中獲取對(duì)象堆大小,根據(jù)所述對(duì)象堆大小和所述對(duì)象堆的剩余空間的起始偏移地址得到對(duì)象堆的剩余空間大??;
      [0088]所述第二判斷模塊,用于判斷所述對(duì)象堆的剩余空間大小是否大于所述對(duì)象大小;
      [0089]所述提示模塊,用于在所述第二判斷模塊判斷為否時(shí),提示錯(cuò)誤;
      [0090]所述創(chuàng)建模塊還用于在所述第二判斷模塊判斷為是時(shí),進(jìn)行工作。
      [0091]所述第三獲取模塊包括:第二編譯單元和第二獲取單元;
      [0092]所述第二編譯單元,用于對(duì)所述修改對(duì)象指令進(jìn)行編譯,得到第二編譯指令;
      [0093]所述第二獲取單元,用于根據(jù)所述第二編譯單元編譯得到的所述第二編譯指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述第二編譯指令獲取修改位置和修改內(nèi)容。
      [0094]所述第三獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為修改對(duì)象指令時(shí),根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,從所述修改對(duì)象指令中獲取所述修改內(nèi)容,根據(jù)所述修改對(duì)象指令獲取修改位置。
      [0095]所述第三獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為修改對(duì)象指令時(shí),根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,從所述修改對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述修改內(nèi)容,根據(jù)所述修改對(duì)象指令獲取修改位置。
      [0096]所述裝置還包括第一合并模塊和第二合并模塊;
      [0097]所述第一合并模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為刪包指令時(shí),掃描包堆,根據(jù)所述包堆中的組件的偏移地址計(jì)算出包堆碎片,對(duì)所述包堆碎片進(jìn)行合并;
      [0098]所述第二合并模塊,用于在所述第一合并模塊對(duì)所述包堆碎片進(jìn)行合并后,掃描對(duì)象堆,將對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中。
      [0099]所述第一合并模塊包括:第三獲取單元、第一判斷單元、查找單元、第四獲取單元、第一更新單元、第二判斷單元、第一移動(dòng)單元、第二更新單元和第三更新單元;
      [0100]所述第三獲取單元,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為刪包指令時(shí),獲取所述包堆的最高偏移地址,并將其作為當(dāng)前偏移地址;
      [0101]所述第一判斷單元,用于判斷所述當(dāng)前偏移地址是否大于包堆剩余空間的起始偏移地址;
      [0102]所述查找單元,用于當(dāng)所述第一判斷單元判斷當(dāng)前偏移地址大于包堆剩余空間的起始偏移地址時(shí),在所述包堆中查找偏移地址小于當(dāng)前偏移地址的組件,判斷是否查找到偏移地址小于當(dāng)前偏移地址的組件;
      [0103]所述第四獲取單元,用于當(dāng)所述查找單元查找到偏移地址小于當(dāng)前偏移地址的組件時(shí),在查找到的所述組件中獲取偏移地址最大的組件作為當(dāng)前組件的相鄰組件,根據(jù)當(dāng)前偏移地址與所述相鄰組件的偏移地址之間的碎片大小更新包堆碎片大?。?br> [0104]所述第一更新單元,用于根據(jù)所述第四獲取單元獲取到的所述相鄰組件的偏移地址更新當(dāng)前偏移地址,根據(jù)當(dāng)前偏移地址更新當(dāng)前組件;
      [0105]所述第二判斷單元,用于判斷所述包堆碎片大小是否為O ;
      [0106]所述第一移動(dòng)單元,用于當(dāng)所述第二判斷單元判斷為否時(shí),根據(jù)所述包堆碎片大小,將當(dāng)前組件向高地址方向移動(dòng);
      [0107]所述第二更新單元,用于當(dāng)所述查找單元查找不到偏移地址小于當(dāng)前偏移地址的組件時(shí),根據(jù)當(dāng)前偏移地址與所述包堆剩余空間的起始偏移地址之間的碎片大小更新所述包堆碎片大??;
      [0108]所述第三更新單元,用于根據(jù)所述包堆碎片大小更新所述包堆剩余空間的起始偏移地址。
      [0109]所述第二合并模塊包括:第五獲取單元、第三判斷單元、第一記錄單元、第四判斷單元、第四更新單元、第一設(shè)置單元、第五判斷單元、第五更新單元、第二移動(dòng)單元、第六更新單元、第七更新單元、第八更新單元和第一清除單元;
      [0110]所述第五獲取單元,用于初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址;
      [0111]所述第三判斷單元,用于判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址;
      [0112]所述第一記錄單元,用于當(dāng)所述第三判斷單元判斷為是時(shí),記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大??;
      [0113]所述第四判斷單元,用于判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收;
      [0114]所述第四更新單元,用于當(dāng)所述第四判斷單元判斷為是時(shí),根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大?。?br> [0115]所述第一設(shè)置單元,用于當(dāng)所述第四判斷單元判斷為是時(shí),將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空;
      [0116]所述第五判斷單元,用于判斷所述對(duì)象堆碎片大小是否為O ;
      [0117]所述第五更新單元,用于當(dāng)所述第五判斷單元判斷為否時(shí),根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值;
      [0118]所述第二移動(dòng)單元,用于當(dāng)?shù)谖甯聠卧滤鰧?duì)象偏移地址的終值后,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上;
      [0119]所述第六更新單元,用于當(dāng)所述第二移動(dòng)單元移動(dòng)對(duì)象后,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值;
      [0120]所述第七更新單元,用于當(dāng)所述第五判斷單元判斷為否時(shí),或當(dāng)所述第一設(shè)置模塊將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空后,或當(dāng)所述第六更新單元將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值后,根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值;
      [0121]所述第八更新單元,用于根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址;
      [0122]所述第一清除單元,用于清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小。
      [0123]所述裝置還包括:第三判斷模塊和提示模塊;
      [0124]所述第三判斷模塊,用于在所述第三獲取模塊獲取到所述對(duì)象偏移地址后,判斷獲取到的所述對(duì)象偏移地址是否為空;
      [0125]所述提示模塊,用于在所述第三判斷模塊判斷為是時(shí),提示錯(cuò)誤;
      [0126]所述修改模塊還用于在所述第三判斷模塊判斷為否時(shí),進(jìn)行工作。
      [0127]所述裝置還包括第三合并模塊;
      [0128]所述第三合并模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為垃圾回收時(shí),掃描對(duì)象堆,將所述對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初 值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中。
      [0129]所述第三合并模塊包括:第六獲取單元、第六判斷單元、第二記錄單元、第七判斷單元、第九更新單元、第二設(shè)置單元、第八判斷單元、第十更新單元、第三移動(dòng)單元、第十一更新單元、第十二更新單元、第十三更新單元和第二清除單元;
      [0130]所述第六獲取單元,用于初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址;
      [0131]所述第六判斷單元,用于判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址;
      [0132]所述第二記錄單元,用于當(dāng)所述第六判斷單元判斷為是時(shí),記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大??;
      [0133]所述第七判斷單元,用于判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收;
      [0134]所述第九更新單元,用于當(dāng)所述第七判斷單元判斷為是時(shí),根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大??;
      [0135]所述第二設(shè)置單元,用于當(dāng)所述第七判斷單元判斷為是時(shí),將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空;
      [0136]所述第八判斷單元,用于判斷所述對(duì)象堆碎片大小是否為O ;
      [0137]所述第十更新單元,用于當(dāng)所述第八判斷單元判斷為否時(shí),根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值;
      [0138]所述第三移動(dòng)單元,用于當(dāng)?shù)谑聠卧滤鰧?duì)象偏移地址的終值后,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上;
      [0139]所述第十一更新單元,用于當(dāng)所述第三移動(dòng)單元移動(dòng)對(duì)象后,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值;
      [0140]所述第十二更新單元,用于當(dāng)所述第八判斷單元判斷為否時(shí),或當(dāng)所述第二設(shè)置模塊將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空后,或當(dāng)所述第十一更新單元將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值后,根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值;
      [0141]所述第十三更新單元,用于根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址;
      [0142]所述第二清除單元,用于清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小。
      [0143]所述裝置還包括:第四判斷模塊和提示模塊;
      [0144]所述第四判斷模塊,用于在所述第三獲取模塊獲取到所述對(duì)象偏移地址后,判斷獲取到的所述對(duì)象偏移地址是否為空;
      [0145]所述提示模塊,用于在所述第四判斷模塊判斷為是時(shí),提示錯(cuò)誤;
      [0146]所述修改模塊還用于在所述第四判斷模塊判斷為否時(shí),進(jìn)行工作。
      [0147]所述裝置還包括第五判斷模塊和掉電恢復(fù)模塊;
      [0148]所述第五判斷模塊,用于根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象堆碎片大小判斷是否需要進(jìn)行掉電恢復(fù);
      [0149]所述掉電恢復(fù)模塊,用于在所述第五判斷模塊判斷為是時(shí),根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值進(jìn)行掉電恢復(fù);[0150]所述接收模塊還用于在所述第六判斷模塊判斷為否時(shí),或所述掉電恢復(fù)模塊進(jìn)行掉電恢復(fù)后,進(jìn)行工作。
      [0151]所述掉電恢復(fù)模塊包括:第七獲取單元、第十四更新單元、第八獲取單元、第十五更新單元、第九判斷單元、第十六更新單元、第四移動(dòng)單元、第十七更新單元和第十八更新單元;
      [0152]所述第七獲取單元,用于獲取所述系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值;
      [0153]所述第十四更新單元,用于在所述第七獲取單元獲取到所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值后,掃描對(duì)象堆,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為記錄的所述對(duì)象偏移地址的終值;
      [0154]所述第八獲取單元,用于在所述第七獲取單元獲取到所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值后,獲取所述對(duì)象堆的尾地址;
      [0155]所述第十五更新單元,用于根據(jù)所述記錄的對(duì)象偏移地址的終值的位置上的對(duì)象的大小更新記錄的對(duì)象偏移地址的初值;
      [0156]所述第九判斷單元,用于在所述第十五更新單元更新所述記錄的對(duì)象偏移地址的初值后,判斷所述記錄的對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址;
      [0157]所述第十六更新單元,用于在所述第十三判斷單元判斷為是時(shí),根據(jù)所述記錄的對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述記錄的對(duì)象偏移地址的終值;
      [0158]所述第四移動(dòng)單元,用于在所述第十六更新單元更新所述記錄的對(duì)象偏移地址的終值后,將所述記錄的對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述記錄的對(duì)象偏移地址的終值的位置上;
      [0159]所述第十七更新單元,用于在所述第四移動(dòng)單元移動(dòng)對(duì)象后,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述記錄的對(duì)象偏移地址的終值;
      [0160]所述第十八更新單元,用于在所述第十三判斷單元判斷為否時(shí),根據(jù)所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象堆剩余空間的起始偏移地址,清空系統(tǒng)信息中記錄的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小。
      [0161]本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
      [0162]本專(zhuān)利提出一種可進(jìn)行高效對(duì)象管理的方法及裝置,在對(duì)對(duì)象進(jìn)行操作時(shí)不需查找子對(duì)象表和主對(duì)象表,簡(jiǎn)化了 java卡虛擬機(jī)的操作流程,提高java卡虛擬機(jī)工作效率。
      【專(zhuān)利附圖】

      【附圖說(shuō)明】
      [0163]圖1為本發(fā)明實(shí)施例一提供的一種可進(jìn)行高效對(duì)象管理的方法的流程圖;
      [0164]圖2為本發(fā)明實(shí)施例二提供的一種可進(jìn)行高效對(duì)象管理的方法的流程圖;
      [0165]圖3為本發(fā)明實(shí)施例二提供的NewObj應(yīng)用實(shí)例的示意圖;
      [0166]圖4為本發(fā)明實(shí)施例三提供的掃描包堆,根據(jù)包堆中的組件的偏移地址計(jì)算出包堆碎片,對(duì)包堆碎片進(jìn)行合并的方法的流程圖;
      [0167]圖5為本發(fā)明實(shí)施例四提供的掃描對(duì)象堆,將對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象第一偏移地址的初值、對(duì)象第二偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中的方法的流程圖;
      [0168]圖6、圖7和圖8為本發(fā)明實(shí)施例四提供的對(duì)象堆的示意圖。
      [0169]圖9為本發(fā)明實(shí)施例五提供的根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的對(duì)象偏移地址的初值和對(duì)象偏移地址的終值進(jìn)行掉電恢復(fù)的方法的流程圖;
      [0170]圖10和圖11為本發(fā)明實(shí)施例五提供的對(duì)象堆的示意圖;
      [0171]圖12為本發(fā)明實(shí)施例六提供的一種可進(jìn)行高效對(duì)象管理的裝置的模塊圖。
      【具體實(shí)施方式】
      [0172]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
      [0173]java卡應(yīng)用的開(kāi)發(fā)過(guò)程為:開(kāi)發(fā)者寫(xiě)一個(gè)或多個(gè)java類(lèi),用java編譯器編譯源碼,產(chǎn)生一個(gè)或多個(gè)class文件;java卡虛擬機(jī)指令是以操作碼與操作數(shù)的形式描述的;每一個(gè)操作碼都有一個(gè)助記符作為它的名字;在java卡虛擬機(jī)指令執(zhí)行時(shí),通過(guò)隱式地從操作數(shù)棧中取指令的操作數(shù),即操作數(shù)在運(yùn)行時(shí)被計(jì)算,操作數(shù)由操作棧提供;
      [0174]java卡應(yīng)用程序準(zhǔn)備被下載到j(luò)ava卡虛擬機(jī)上時(shí),使用java卡Converter將包含了 java 卡應(yīng)用的 class 文件轉(zhuǎn)換成 CAP (converted applet)文件;java 卡 Converted是對(duì)組成一個(gè)包的所有java API類(lèi)文件進(jìn)行預(yù)處理的軟件,它將一個(gè)包轉(zhuǎn)換成CAP文件;CAP文件包含將被安裝在java卡虛擬機(jī)上的一個(gè)包的類(lèi)的二進(jìn)制表達(dá),用于在java卡虛擬機(jī)上執(zhí)行包的類(lèi);CAP文件由12個(gè)組件組成,具體為:頭組件、目錄組件、應(yīng)用組件、導(dǎo)入組件、常量池組件、類(lèi)組件、方法組件、靜態(tài)域組件、位置引用組件、導(dǎo)出組件、描述符組件、調(diào)試組件;其中,常量池組件由條目組成,條目為被該CAP文件的方法組件中的元素引用的每一個(gè)類(lèi)、方法以及域的引用;在java卡虛擬機(jī)中,java卡應(yīng)用程序以字節(jié)碼的形式被執(zhí)行;
      [0175]例如,NewObj應(yīng)用程序中有數(shù)組對(duì)象objl和4個(gè)方法,4個(gè)方法分別是install、register> selectingApplet 和 process,則生成的常量池為:
      [0176]
      【權(quán)利要求】
      1.一種可進(jìn)行高效對(duì)象管理的方法,其特征在于,所述方法包括: 步驟SI:java卡虛擬機(jī)接收來(lái)自當(dāng)前應(yīng)用程序的指令,判斷所述指令的類(lèi)型,若是創(chuàng)建對(duì)象指令則執(zhí)行步驟S2,若是修改對(duì)象指令則執(zhí)行步驟S5 ; 步驟S2:所述java卡虛擬機(jī)根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置; 步驟S3:所述java卡虛擬機(jī)從系統(tǒng)信息中獲取對(duì)象堆的剩余空間的起始偏移地址; 步驟S4:所述java卡虛擬機(jī)將所述對(duì)象堆的剩余空間的起始偏移地址作為創(chuàng)建的對(duì)象的偏移地址,按照所述對(duì)象大小和所述對(duì)象類(lèi)型創(chuàng)建對(duì)象,根據(jù)所述對(duì)象大小更新所述系統(tǒng)信息中的所述對(duì)象堆的剩余空間的起始偏移地址,根據(jù)當(dāng)前應(yīng)用實(shí)例的偏移地址將所述創(chuàng)建的對(duì)象的偏移地址存入到當(dāng)前應(yīng)用實(shí)例中與所述對(duì)象地址位置對(duì)應(yīng)的位置中,返回步驟SI ; 步驟S5:所述java卡虛擬機(jī)根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述修改對(duì)象指令獲取修改位置和修改內(nèi)容; 步驟S6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象偏移地址和所述修改位置,將所述對(duì)象偏移地址上的對(duì)象中所述修改位置上的數(shù)據(jù)修改為所述修改內(nèi)容,返回步驟SI。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟SI之前還包括:所述java卡虛擬機(jī)接收用戶(hù)發(fā)送的選擇應(yīng)用指令,根據(jù)所述選擇應(yīng)用指令獲取應(yīng)用ID,根據(jù)所述應(yīng)用ID查找對(duì)應(yīng)的應(yīng)用程序,并判斷是否查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序,是則將查找到的所述應(yīng)用程序作為當(dāng)前應(yīng)用程序,執(zhí)行步驟SI,否則提示錯(cuò)誤,結(jié)束。
      3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S2具體為:所述java卡虛擬機(jī)對(duì)所述創(chuàng)建對(duì)象指令進(jìn)行編譯,得到第一編譯指令,根據(jù)所述第一編譯指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述第一編譯指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置。
      4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S2中根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小為:所述java卡虛擬機(jī)從所述創(chuàng)建對(duì)象指令中獲取所述對(duì)象大小。
      5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S2中根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小為:所述java卡虛擬機(jī)從所述創(chuàng)建對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述對(duì)象大小。
      6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S3與步驟S4之間包括:所述java卡虛擬機(jī)從所述系統(tǒng)信息中獲取對(duì)象堆大小,根據(jù)所述對(duì)象堆大小和所述對(duì)象堆的剩余空間的起始偏移地址得到對(duì)象堆的剩余空間大小,判斷所述對(duì)象堆的剩余空間大小是否大于所述對(duì)象大小,是則執(zhí)行步驟S4,否則提示錯(cuò)誤,返回步驟SI。
      7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S5具體為:所述java卡虛擬機(jī)對(duì)所述修改對(duì)象指令進(jìn)行編譯,得到第二編譯指令,根據(jù)所述第二編譯指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述第二編譯指令獲取修改位置和修改內(nèi)容。
      8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S5中根據(jù)所述修改對(duì)象指令獲取修改內(nèi)容為:所述java卡虛擬機(jī)從所述修改對(duì)象指令中獲取所述修改內(nèi)容。
      9.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S5中根據(jù)所述修改對(duì)象指令獲取修改內(nèi)容為:所述java卡虛擬機(jī)從所述修改對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述修改內(nèi)容。
      10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟SI中判斷所述指令的類(lèi)型,還包括,若是刪包指令則執(zhí)行步驟S7 ; 步驟S7:所述java卡虛擬機(jī)掃描包堆,根據(jù)所述包堆中的組件的偏移地址計(jì)算出包堆碎片,對(duì)所述包堆碎片進(jìn)行合并,執(zhí)行步驟S8 ; 步驟S8:所述java卡虛擬機(jī)掃描對(duì)象堆,將對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中,返回步驟SI。
      11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述步驟S7具體為: 步驟S7-1:所述jav a卡虛擬機(jī)獲取所述包堆的最高偏移地址,并將其作為當(dāng)前偏移地址; 步驟S7-2:所述java卡虛擬機(jī)判斷所述當(dāng)前偏移地址是否大于包堆剩余空間的起始偏移地址,是則執(zhí)行步驟S7-3 ;否則執(zhí)行步驟S7-8 ; 步驟S7-3:所述java卡虛擬機(jī)在所述包堆中查找偏移地址小于當(dāng)前偏移地址的組件,判斷是否查找到偏移地址小于當(dāng)前偏移地址的組件,是則執(zhí)行步驟S7-4,否則執(zhí)行步驟S7-7 ; 步驟S7-4:所述java卡虛擬機(jī)在查找到的所述組件中獲取偏移地址最大的組件作為當(dāng)前組件的相鄰組件,根據(jù)當(dāng)前偏移地址與所述相鄰組件的偏移地址之間的碎片大小更新包堆碎片大小,執(zhí)行步驟S7-5 ; 步驟S7-5:所述java卡虛擬機(jī)根據(jù)所述相鄰組件的偏移地址更新當(dāng)前偏移地址,根據(jù)當(dāng)前偏移地址更新當(dāng)前組件,判斷所述包堆碎片大小是否為0,是則返回步驟S7-2,否則執(zhí)行步驟S7-6 ; 步驟S7-6:所述java卡虛擬機(jī)根據(jù)所述包堆碎片大小,將當(dāng)前組件向高地址方向移動(dòng),返回步驟S7-2 ; 步驟S7-7:所述java卡虛擬機(jī)根據(jù)當(dāng)前偏移地址與所述包堆剩余空間的起始偏移地址之間的碎片大小更新所述包堆碎片大小,執(zhí)行步驟S7-8 ; 步驟S7-8:所述java卡虛擬機(jī)判斷所述包堆碎片大小是否為0,是則執(zhí)行步驟S8,否則根據(jù)所述包堆碎片大小更新所述包堆剩余空間的起始偏移地址,執(zhí)行步驟S8。
      12.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述步驟S8具體為: 步驟S8-1:所述java卡虛擬機(jī)初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址; 步驟S8-2:所述java卡虛擬機(jī)判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址,是則執(zhí)行步驟S8-3,否則執(zhí)行步驟S8-8 ; 步驟S8-3:所述java卡虛擬機(jī)記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大小,判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收,是則執(zhí)行步驟S8-4,否則執(zhí)行步驟S8-5 ; 步驟S8-4:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大小,將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空,執(zhí)行步驟S8-7 ; 步驟S8-5:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為O,是則執(zhí)行步驟S8-7,否則執(zhí)行步驟S8-6 ; 步驟S8-6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述記錄的對(duì)象偏移地址的終值,執(zhí)行步驟S8-7 ; 步驟S8-7:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述記錄的對(duì)象偏移地址的初值,返回步驟S8-2 ; 步驟S8-8:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為O,是則執(zhí)行步驟S8-10,否則執(zhí)行步驟S8-9 ; 步驟S8-9:所述java卡虛擬機(jī)根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址,執(zhí)行步 驟S8-10 ; 步驟S8-10:所述java卡虛擬機(jī)清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小,返回步驟SI。
      13.根據(jù)權(quán)利要求12所述的方法,其特征在于,所述步驟S5與步驟S6之間包括:所述java卡虛擬機(jī)判斷獲取到的所述對(duì)象偏移地址是否為空,是則提示錯(cuò)誤,返回步驟SI,否則執(zhí)行步驟S6。
      14.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟SI中判斷所述指令的類(lèi)型,還包括,若是垃圾回收指令則執(zhí)行步驟S9 ; 步驟S9:所述java卡虛擬機(jī)掃描對(duì)象堆,將所述對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中,返回步驟SI。
      15.根據(jù)權(quán)利要求14所述的方法,其特征在于,所述步驟S9具體為: 步驟S9-1:所述java卡虛擬機(jī)初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址; 步驟S9-2:所述java卡虛擬機(jī)判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址,是則執(zhí)行步驟S9-3,否則執(zhí)行步驟S9-8 ; 步驟S9-3:所述java卡虛擬機(jī)記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大小,判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收,是則執(zhí)行步驟S9-4,否則執(zhí)行步驟S9-5 ; 步驟S9-4:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大小,將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空,執(zhí)行步驟S9-7 ; 步驟S9-5:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為O,是則執(zhí)行步驟S9-7,否則執(zhí)行步驟S9-6 ; 步驟S9-6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值,執(zhí)行步驟S9-7 ; 步驟S9-7:所述java卡虛擬機(jī)根據(jù)記錄的所述對(duì)象的大小更新所述記錄的對(duì)象偏移地址的初值,返回步驟S9-2 ; 步驟S9-8:所述java卡虛擬機(jī)判斷所述對(duì)象堆碎片大小是否為O,是則執(zhí)行步驟S9-10,否則執(zhí)行步驟S9-9 ; 步驟S9-9:所述java卡虛擬機(jī)根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址,執(zhí)行步驟S9-10 ; 步驟S9-10:所述java卡虛擬機(jī)清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小,返回步驟SI。
      16.根據(jù)權(quán)利要求15所述的方法,其特征在于,所述步驟S5與步驟S6之間包括:所述java卡虛擬機(jī)判斷獲取到的所述對(duì)象偏移地址是否為空,是則提示錯(cuò)誤,返回步驟SI,否則執(zhí)行步驟S6。
      17.根據(jù)權(quán)利要求10或14所述的方法,其特征在于,所述步驟SI之前包括: 步驟SO:所述java卡虛擬機(jī)根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象堆碎片大小判斷是否需要進(jìn)行掉電恢復(fù),是則執(zhí)行步驟S10,否則執(zhí)行步驟SI ; 步驟SlO:所述java卡虛擬機(jī)根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值進(jìn)行掉電恢復(fù)后,執(zhí)行步驟SI。
      18.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述步驟SlO包括: 步驟S10-1:所述java卡虛擬機(jī)獲取所述系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值; 步驟S10-2:所述java卡虛擬機(jī)掃描對(duì)象堆,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為記錄的所述對(duì)象偏移地址的終值,獲取所述對(duì)象堆的尾地址; 步驟S10-3:所述java卡虛擬機(jī)根據(jù)所述記錄的對(duì)象偏移地址的終值的位置上的對(duì)象的大小更新記錄的對(duì)象偏移地址的初值,判斷所述記錄的對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址,是則執(zhí)行步驟S10-4,否則執(zhí)行步驟S10-6 ; 步驟S10-4:所述java卡虛擬機(jī)根據(jù)所述記錄的對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述記錄的對(duì)象偏移地址的終值,將所述記錄的對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述記錄的對(duì)象偏移地址的終值的位置上; 步驟S10-5:所述java卡虛擬機(jī)將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述記錄的對(duì)象偏移地址的終值,返回步驟S10-3 ; 步驟S10-6:所述java卡虛擬機(jī)根據(jù)所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象堆剩余空間的起始偏移地址,清空所述系統(tǒng)信息中記錄的對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小,執(zhí)行步驟SI。
      19.一種可進(jìn)行高效對(duì)象管理的裝置,其特征在于,所述裝置包括:接收模塊、第一判斷模塊、第一獲取模塊、第二獲取模塊、創(chuàng)建模塊、第三獲取模塊和修改模塊;所述接收模塊,用于接收來(lái)自當(dāng)前應(yīng)用程序的指令; 所述第一判斷模塊,用于判斷所述接收模塊接收到的所述指令的類(lèi)型; 所述第一獲取模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為創(chuàng)建對(duì)象指令時(shí),根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置; 所述第二獲取模塊,用于從系統(tǒng)信息中獲取對(duì)象堆的剩余空間的起始偏移地址;所述創(chuàng)建模塊,用于將所述第二獲取模塊獲取到的所述對(duì)象堆的剩余空間的起始偏移地址作為創(chuàng)建的對(duì)象的偏移地址,按照所述第一獲取模塊獲取到的所述對(duì)象大小和所述對(duì)象類(lèi)型創(chuàng)建對(duì)象,根據(jù)所述對(duì)象大小更新所述系統(tǒng)信息中的所述對(duì)象堆的剩余空間的起始偏移地址,根據(jù)當(dāng)前應(yīng)用實(shí)例的偏移地址將所述創(chuàng)建的對(duì)象的偏移地址存入到當(dāng)前應(yīng)用實(shí)例中與所述對(duì)象地址位置對(duì)應(yīng)的位置中; 所述第三獲取模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為修改對(duì)象指令時(shí),根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述修改對(duì)象指令獲取修改位置和修改內(nèi)容; 所述修改模塊,用于根據(jù)所述第三獲取模塊獲取到的所述對(duì)象偏移地址和所述修改位置,將所述對(duì)象偏移地址上的對(duì)象中所述修改位置上的數(shù)據(jù)修改為所述第三獲取模塊獲取到的所述修改內(nèi)容。
      20.根據(jù)權(quán)利 要求19所述的裝置,其特征在于,所述接收模塊還用于接收用戶(hù)發(fā)送的選擇應(yīng)用指令; 所述裝置還包括查找模塊和提示模塊; 所述查找模塊,用于根據(jù)所述接收模塊接收到的所述選擇應(yīng)用指令獲取應(yīng)用ID,根據(jù)所述應(yīng)用ID查找對(duì)應(yīng)的應(yīng)用程序,并判斷是否查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序,是則將查找到的所述應(yīng)用程序作為當(dāng)前應(yīng)用程序; 所述提示模塊,用于在所述查找模塊未查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序時(shí),提示錯(cuò)誤; 所述接收模塊還用于在所述查找模塊查找到與所述應(yīng)用ID對(duì)應(yīng)的應(yīng)用程序時(shí),進(jìn)行工作。
      21.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述第一獲取模塊包括:第一編譯單元和第一獲取單元; 所述第一編譯單元,用于對(duì)所述創(chuàng)建對(duì)象指令進(jìn)行編譯,得到第一編譯指令; 所述第一獲取單元,用于根據(jù)所述第一編譯單元編譯得到的所述第一編譯指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,根據(jù)所述第一編譯單元編譯得到的所述第一編譯指令獲取對(duì)象大小、對(duì)象類(lèi)型和對(duì)象地址位置。
      22.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述第一獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為創(chuàng)建對(duì)象指令時(shí),根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,從所述創(chuàng)建對(duì)象指令中獲取所述對(duì)象大小,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象類(lèi)型和對(duì)象地址位置。
      23.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述第一獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為創(chuàng)建對(duì)象指令時(shí),根據(jù)所述創(chuàng)建對(duì)象指令獲取與所述當(dāng)前應(yīng)用程序?qū)?yīng)的應(yīng)用實(shí)例的偏移地址,將所述偏移地址上的應(yīng)用實(shí)例作為當(dāng)前應(yīng)用實(shí)例,從所述創(chuàng)建對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述對(duì)象大小,根據(jù)所述創(chuàng)建對(duì)象指令獲取對(duì)象類(lèi)型和對(duì)象地址位置。
      24.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述裝置還包括第四獲取模塊、第二判斷豐旲塊和提旲塊; 所述第四獲取模塊,用于從所述系統(tǒng)信息中獲取對(duì)象堆大小,根據(jù)所述對(duì)象堆大小和所述對(duì)象堆的剩余空間的起始偏移地址得到對(duì)象堆的剩余空間大??; 所述第二判斷模塊,用于判斷所述對(duì)象堆的剩余空間大小是否大于所述對(duì)象大小; 所述提示模塊,用于在所述第二判斷模塊判斷為否時(shí),提示錯(cuò)誤; 所述創(chuàng)建模塊還用于在所述第二判斷模塊判斷為是時(shí),進(jìn)行工作。
      25.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述第三獲取模塊包括:第二編譯單元和第二獲取單元; 所述第二編譯單元,用于對(duì)所述修改對(duì)象指令進(jìn)行編譯,得到第二編譯指令; 所述第二獲取單元,用于根據(jù)所述第二編譯單元編譯得到的所述第二編譯指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,根據(jù)所述第二編譯指令獲取修改位置和修改內(nèi)容。
      26.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述第三獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為修改對(duì)象指令時(shí),根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,從所述修改對(duì)象指令中獲取所述修改內(nèi)容,根據(jù)所述修改對(duì)象指令獲取修改位置。
      27.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述第三獲取模塊具體用于在所述第一判斷模塊判斷所述指令的類(lèi)型為修改對(duì)象指令時(shí),根據(jù)所述修改對(duì)象指令獲取對(duì)象地址位置,根據(jù)所述對(duì)象地址位置從當(dāng)前應(yīng)用實(shí)例中獲取對(duì)象偏移地址,從所述修改對(duì)象指令中獲取存儲(chǔ)區(qū)的偏移地址和數(shù)據(jù)在存儲(chǔ)區(qū)中的位置,根據(jù)所述存儲(chǔ)區(qū)的偏移地址,在存儲(chǔ)區(qū)中根據(jù)所述數(shù)據(jù)在存儲(chǔ)區(qū)中的位置獲取數(shù)據(jù),將獲取到的數(shù)據(jù)作為所述修改內(nèi)容,根據(jù)所述修改對(duì)象指令獲取修改位置。
      28.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述裝置還包括第一合并模塊和第二合并模塊; 所述第一合并模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為刪包指令時(shí),掃描包堆,根據(jù)所述包堆中的組件的偏移地址計(jì)算出包堆碎片,對(duì)所述包堆碎片進(jìn)行合并; 所述第二合并模塊,用于在所述第一合并模塊對(duì)所述包堆碎片進(jìn)行合并后,掃描對(duì)象堆,將對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中。
      29.根據(jù)權(quán)利要求28所述的裝置,其特征在于,所述第一合并模塊包括:第三獲取單元、第一判斷單元、查找單元、第四獲取單元、第一更新單元、第二判斷單元、第一移動(dòng)單元、第二更新單元和第三更新單元; 所述第三獲取單元,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為刪包指令時(shí),獲取所述包堆的最高偏移地址,并將其作為當(dāng)前偏移地址; 所述第一判斷單元,用于判斷所述當(dāng)前偏移地址是否大于包堆剩余空間的起始偏移地址; 所述查找單元,用于當(dāng)所述第一判斷單元判斷當(dāng)前偏移地址大于包堆剩余空間的起始偏移地址時(shí),在所述包堆中查找偏移地址小于當(dāng)前偏移地址的組件,判斷是否查找到偏移地址小于當(dāng)前偏移地址的組件; 所述第四獲取單元,用于當(dāng)所述查找單元查找到偏移地址小于當(dāng)前偏移地址的組件時(shí),在查找到的所述組件中獲取偏移地址最大的組件作為當(dāng)前組件的相鄰組件,根據(jù)當(dāng)前偏移地址與所述相鄰組件的偏移地址之間的碎片大小更新包堆碎片大?。? 所述第一更新單元,用于根據(jù)所述第四獲取單元獲取到的所述相鄰組件的偏移地址更新當(dāng)前偏移地址,根據(jù)當(dāng)前偏移地址更新當(dāng)前組件; 所述第二判斷單元,用于判斷所述包堆碎片大小是否為O ; 所述第一移動(dòng)單元,用于當(dāng)所述第二判斷單元判斷為否時(shí),根據(jù)所述包堆碎片大小,將當(dāng)前組件向高地址方向移動(dòng); 所述第二更新單元,用于當(dāng)所述查找單元查找不到偏移地址小于當(dāng)前偏移地址的組件時(shí),根據(jù)當(dāng)前偏移地址與所述包堆剩余空間的起始偏移地址之間的碎片大小更新所述包堆碎片大??; 所述第三更新單元,用于根據(jù)所述包堆碎片大小更新所述包堆剩余空間的起始偏移地址。
      30.根據(jù)權(quán)利要求28所述的裝置,其特征在于,所述第二合并模塊包括:第五獲取單元、第三判斷單元、第一記錄單元、第四判斷單元、第四更新單元、第一設(shè)置單元、第五判斷單元、第五更新單元、第二移動(dòng)單元、第六更新單元、第七更新單元、第八更新單元和第一清除單元; 所述第五獲取單元,用于初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址; 所述第三判斷單元,用于判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址; 所述第一記錄單元,用于當(dāng)所述第三判斷單元判斷為是時(shí),記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大??; 所述第四判斷單元,用于判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收; 所述第四更新單元,用于當(dāng)所述第四判斷單元判斷為是時(shí),根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大小; 所述第一設(shè)置單元,用于當(dāng)所述第四判斷單元判斷為是時(shí),將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空; 所述第五判斷單元,用于判斷所述對(duì)象堆碎片大小是否為O ; 所述第五更新單元,用于當(dāng)所述第五判斷單元判斷為否時(shí),根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值; 所述第二移動(dòng)單元,用于當(dāng)?shù)谖甯聠卧滤鰧?duì)象偏移地址的終值后,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上; 所述第六更新單元,用于當(dāng)所述第二移動(dòng)單元移動(dòng)對(duì)象后,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值; 所述第七更新單元,用于當(dāng)所述第五判斷單元判斷為否時(shí),或當(dāng)所述第一設(shè)置模塊將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空后,或當(dāng)所述第六更新單元將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值后,根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值; 所述第八更新單元,用于根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址; 所述第一清除單元,用于清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小。
      31.根據(jù)權(quán)利要求30所述的裝置,其特征在于,所述裝置還包括:第三判斷模塊和提示模塊; 所述第三判斷模塊,用于在所述第三獲取模塊獲取到所述對(duì)象偏移地址后,判斷獲取到的所述對(duì)象偏移地 址是否為空; 所述提示模塊,用于在所述第三判斷模塊判斷為是時(shí),提示錯(cuò)誤; 所述修改模塊還用于在所述第三判斷模塊判斷為否時(shí),進(jìn)行工作。
      32.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述裝置還包括第三合并模塊; 所述第三合并模塊,用于在所述第一判斷模塊判斷所述指令的類(lèi)型為垃圾回收時(shí),掃描對(duì)象堆,將所述對(duì)象堆中需要被回收的對(duì)象作為對(duì)象堆碎片進(jìn)行合并,并將合并過(guò)程中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小記錄到系統(tǒng)信息中。
      33.根據(jù)權(quán)利要求32所述的裝置,其特征在于,所述第三合并模塊包括:第六獲取單元、第六判斷單元、第二記錄單元、第七判斷單元、第九更新單元、第二設(shè)置單元、第八判斷單元、第十更新單元、第三移動(dòng)單元、第十一更新單元、第十二更新單元、第十三更新單元和第二清除單元; 所述第六獲取單元,用于初始化所述系統(tǒng)信息中的對(duì)象偏移地址的初值、對(duì)象偏移地址的終值和對(duì)象堆碎片大小,獲取對(duì)象堆剩余空間的起始偏移地址; 所述第六判斷單元,用于判斷所述對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址; 所述第二記錄單元,用于當(dāng)所述第六判斷單元判斷為是時(shí),記錄所述對(duì)象偏移地址的初值的位置上的對(duì)象的大小; 所述第七判斷單元,用于判斷所述對(duì)象偏移地址的初值的位置上的對(duì)象是否需要回收; 所述第九更新單元,用于當(dāng)所述第七判斷單元判斷為是時(shí),根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象堆碎片大?。? 所述第二設(shè)置單元,用于當(dāng)所述第七判斷單元判斷為是時(shí),將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空;所述第八判斷單元,用于判斷所述對(duì)象堆碎片大小是否為O ; 所述第十更新單元,用于當(dāng)所述第八判斷單元判斷為否時(shí),根據(jù)所述對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的終值; 所述第三移動(dòng)單元,用于當(dāng)?shù)谑聠卧滤鰧?duì)象偏移地址的終值后,將所述對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述對(duì)象偏移地址的終值的位置上; 所述第十一更新單元,用于當(dāng)所述第三移動(dòng)單元移動(dòng)對(duì)象后,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值; 所述第十二更新單元,用于當(dāng)所述第八判斷單元判斷為否時(shí),或當(dāng)所述第二設(shè)置模塊將所述對(duì)象堆中使用所述對(duì)象偏移地址的初值的位置設(shè)置為空后,或當(dāng)所述第十一更新單元將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述對(duì)象偏移地址的終值后,根據(jù)記錄的所述對(duì)象的大小更新所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值; 所述第十三更新單 元,用于根據(jù)所述對(duì)象堆碎片大小更新所述對(duì)象堆剩余空間的起始偏移地址; 所述第二清除單元,用于清空所述系統(tǒng)信息中的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小。
      34.根據(jù)權(quán)利要求33所述的裝置,其特征在于,所述裝置還包括:第四判斷模塊和提示模塊; 所述第四判斷模塊,用于在所述第三獲取模塊獲取到所述對(duì)象偏移地址后,判斷獲取到的所述對(duì)象偏移地址是否為空; 所述提示模塊,用于在所述第四判斷模塊判斷為是時(shí),提示錯(cuò)誤; 所述修改模塊還用于在所述第四判斷模塊判斷為否時(shí),進(jìn)行工作。
      35.根據(jù)權(quán)利要求28或32所述的裝置,其特征在于,所述裝置還包括第五判斷模塊和掉電恢復(fù)模塊; 所述第五判斷模塊,用于根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象堆碎片大小判斷是否需要進(jìn)行掉電恢復(fù); 所述掉電恢復(fù)模塊,用于在所述第五判斷模塊判斷為是時(shí),根據(jù)系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值進(jìn)行掉電恢復(fù); 所述接收模塊還用于在所述第六判斷模塊判斷為否時(shí),或所述掉電恢復(fù)模塊進(jìn)行掉電恢復(fù)后,進(jìn)行工作。
      36.根據(jù)權(quán)利要求35所述的裝置,其特征在于,所述掉電恢復(fù)模塊包括:第七獲取單元、第十四更新單元、第八獲取單元、第十五更新單元、第九判斷單元、第十六更新單元、第四移動(dòng)單元、第十七更新單元和第十八更新單元; 所述第七獲取單元,用于獲取所述系統(tǒng)信息中在對(duì)象堆碎片進(jìn)行合并過(guò)程中記錄的所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值; 所述第十四更新單元,用于在所述第七獲取單元獲取到所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值后,掃描對(duì)象堆,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為記錄的所述對(duì)象偏移地址的終值; 所述第八獲取單元,用于在所述第七獲取單元獲取到所述對(duì)象偏移地址的初值和所述對(duì)象偏移地址的終值后,獲取所述對(duì)象堆的尾地址; 所述第十五更新單元,用于根據(jù)所述記錄的對(duì)象偏移地址的終值的位置上的對(duì)象的大小更新記錄的對(duì)象偏移地址的初值; 所述第九判斷單元,用于在所述第十五更新單元更新所述記錄的對(duì)象偏移地址的初值后,判斷所述記錄的對(duì)象偏移地址的初值是否小于所述對(duì)象堆剩余空間的起始偏移地址;所述第十六更新單元,用于在所述第十三判斷單元判斷為是時(shí),根據(jù)所述記錄的對(duì)象偏移地址的初值和所述對(duì)象堆碎片大小更新所述記錄的對(duì)象偏移地址的終值; 所述第四移動(dòng)單元,用于在所述第十六更新單元更新所述記錄的對(duì)象偏移地址的終值后,將所述記錄的對(duì)象偏移地址的初值的位置上的對(duì)象移動(dòng)到所述記錄的對(duì)象偏移地址的終值的位置上; 所述第十七更新單元,用于在所述第四移動(dòng)單元移動(dòng)對(duì)象后,將所述對(duì)象堆中使用的所述對(duì)象偏移地址的初值更新為所述記錄的對(duì)象偏移地址的終值;所述第十八更新單元,用于在所述第十三判斷單元判斷為否時(shí),根據(jù)所述對(duì)象堆碎片大小更新所述系統(tǒng)信息中的所述對(duì)象堆剩余空間的起始偏移地址,清空系統(tǒng)信息中記錄的所述對(duì)象偏移地址的初值、所述對(duì)象偏移地址的終值和所述對(duì)象堆碎片大小。
      【文檔編號(hào)】G06F9/455GK103955395SQ201410174222
      【公開(kāi)日】2014年7月30日 申請(qǐng)日期:2014年4月28日 優(yōu)先權(quán)日:2014年4月28日
      【發(fā)明者】陸舟, 于華章 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1