摘 要:論述了Java虛擬機(jī)的相關(guān)技術(shù),對(duì)常用水表、電表等儀表儀器數(shù)據(jù)的采集、記錄及上報(bào)應(yīng)用方面進(jìn)行設(shè)計(jì)和研究,以此推進(jìn)儀表儀器自動(dòng)化技術(shù)發(fā)展。
關(guān)鍵詞:Java虛擬機(jī);儀器儀表;數(shù)據(jù)記錄
1 JVM的特點(diǎn)
Java語言突出的一個(gè)重要特點(diǎn)是與平臺(tái)無關(guān),通過采用JVM(Java Virtual Machine)即可實(shí)現(xiàn)。JVM是一個(gè)想象中的機(jī)器,它有想象中的硬件,例如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng)。在實(shí)際計(jì)算機(jī)或應(yīng)用中通常通過軟件模擬來實(shí)現(xiàn),一般的高級(jí)語言如果要在不同的平臺(tái)上運(yùn)行,至少需要編譯成不同的目標(biāo)代碼。而引入Java語言虛擬機(jī)后,Java語言在不同平臺(tái)上運(yùn)行時(shí)不需要重新編譯。Java語言使用模式JVM屏蔽了與具體平臺(tái)相關(guān)的信息,使得Java語言編譯程序只需生成在JVM上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。JVM在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行,從而提高效率和適應(yīng)性。JVM的架構(gòu)大致如圖1所示[1-3]。

2 JVM體系結(jié)構(gòu)
通常JVM由5個(gè)主要部分組成:一組指令集、一組寄存器、一個(gè)棧、一個(gè)無用單元收集堆(Garbage-collected-heap)和一個(gè)方法區(qū)域。這5部分是Java虛擬機(jī)的邏輯成份,不依賴于任何實(shí)現(xiàn)技術(shù)或組織方式,但其功能必須在真實(shí)機(jī)器上以某種方式實(shí)現(xiàn)。各部分各自功能略述如下[3-6]:
2.1 Java指令集
JVM目前能支持248個(gè)字節(jié)碼,每個(gè)字節(jié)碼執(zhí)行一種基本的CPU運(yùn)算。Java指令集相當(dāng)于Java程序的匯編語言,其指令集中的每條指令包含一個(gè)單字節(jié)的操作符,用于指定要執(zhí)行的操作,還有0個(gè)或多個(gè)操作數(shù),提供操作所需的參數(shù)或數(shù)據(jù)?! ?br />
許多指令沒有操作數(shù),僅由一個(gè)單字節(jié)的操作符構(gòu)成。在JVM中內(nèi)層循環(huán)的執(zhí)行過程如下:
do{
取一個(gè)操作符字節(jié);
根據(jù)操作符的值執(zhí)行一個(gè)動(dòng)作;
}while(程序未結(jié)束)
由于指令系統(tǒng)的簡(jiǎn)單性,使虛擬機(jī)執(zhí)行的過程變得簡(jiǎn)單,從而有利于提高執(zhí)行的效率。
2.2 寄存器
JVM的寄存器用于保存機(jī)器的運(yùn)行狀態(tài)和數(shù)據(jù),與微處理器中的部分寄存器功能類似。JVM的寄存器通常有4種:
(1)PC:Java程序計(jì)數(shù)器;
(2)optop指針:指向操作數(shù)棧頂端;
(3)frame指針:指向當(dāng)前執(zhí)行方法的執(zhí)行環(huán)境的指針;
(4)vars指針:指向當(dāng)前執(zhí)行方法的局部變量區(qū)第1個(gè)變量的指針。
2.3 棧
JVM的棧有3個(gè)區(qū)域:局部變量區(qū)、運(yùn)行環(huán)境區(qū)和操作數(shù)區(qū)。
(1)局部變量區(qū)是每個(gè)Java方法使用的固定大小的局部變量集。它們按照與vars寄存器的字偏移量來尋址。
(2)運(yùn)行環(huán)境區(qū)是在運(yùn)行環(huán)境中包含的信息用于指向當(dāng)前類和當(dāng)前方法的解釋器符號(hào)表的指針動(dòng)態(tài)鏈接,采用正常的方法返回或異常傳播的方式反映運(yùn)行環(huán)境區(qū)的相關(guān)情況。
(3)操作數(shù)棧區(qū)是機(jī)器指令只從操作數(shù)棧中取操作數(shù),對(duì)它們進(jìn)行操作,并把結(jié)果返回到棧中,以此提高程序的運(yùn)行效率。
2.4 無用單元收集堆
Java的堆是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū),類的實(shí)例(對(duì)象)從中分配空間。Java語言具有無用單元收集能力,它不給程序員顯式釋放對(duì)象的能力。Java不規(guī)定具體使用的無用單元收集算法,可以根據(jù)系統(tǒng)的需求使用各種各樣的算法。
2.5 方法區(qū)
方法區(qū)與傳統(tǒng)語言中的編譯后代碼或是Unix進(jìn)程中的正文段類似,保存方法代碼(編譯后的Java代碼)和符號(hào)表。在當(dāng)前的Java實(shí)現(xiàn)中,方法代碼不包括在無用單元收集堆中,但計(jì)劃在將來的版本中實(shí)現(xiàn)。每個(gè)類文件包含了一個(gè)Java類或一個(gè)Java界面編譯后的代碼,可以說類文件是Java語言的執(zhí)行代碼文件。為了保證類文件的平臺(tái)無關(guān)性,Java虛擬機(jī)規(guī)范中對(duì)類文件的格式也作了詳細(xì)的說明,具體細(xì)節(jié)請(qǐng)參考Sun公司的Java虛擬機(jī)規(guī)范。
3 JVM在水表電表儀器自動(dòng)化系統(tǒng)的設(shè)計(jì)研究
水、電是城鄉(xiāng)居民日常生活中所不可缺少的,但對(duì)水和電的管理在我國還沒有較好的自動(dòng)化管理設(shè)備。特別是水、電的用量以及地域價(jià)格的差異性,導(dǎo)致相關(guān)信息不能及時(shí)上報(bào)到相關(guān)管理部門,在總結(jié)統(tǒng)計(jì)相關(guān)用水和用電數(shù)據(jù)時(shí)仍采用人工手動(dòng)逐一統(tǒng)計(jì)記錄,這不僅造成效率低下,更重要的是人工手動(dòng)操作難免會(huì)出現(xiàn)誤操作和誤記錄。將JVM技術(shù)應(yīng)用在水表、電表等儀表儀器的數(shù)據(jù)采集、統(tǒng)計(jì)、傳輸、記錄等自動(dòng)化功能中,可以及時(shí)地統(tǒng)計(jì)每個(gè)用戶的用水、用電情況,同時(shí),對(duì)于過度用水或用電進(jìn)行數(shù)據(jù)統(tǒng)計(jì),采取相應(yīng)的措施,防止部分家庭浪費(fèi)水電,以此加大節(jié)約用水用電的力度。
JVM在水表電表儀器自動(dòng)化系統(tǒng)的系統(tǒng)架構(gòu)設(shè)計(jì)如圖2所示。

通過對(duì)JVM在水表電表儀器自動(dòng)化中的設(shè)計(jì)研究,在各個(gè)居民區(qū)對(duì)水表、電表進(jìn)行改造,安裝有Java虛擬機(jī)的小型信息采集、統(tǒng)計(jì)、記錄、上報(bào)等功能的信息系統(tǒng),可以及時(shí)將相關(guān)信息進(jìn)行實(shí)時(shí)處理。同時(shí),通過外接功能接口與通信公司建立通信機(jī)制,將信息實(shí)時(shí)發(fā)送到信息管理系統(tǒng)中心,以此對(duì)居民的用水、用電等情況進(jìn)行實(shí)時(shí)監(jiān)控。當(dāng)出現(xiàn)大額度的用量情況時(shí),應(yīng)采取相應(yīng)措施,防止意外事故出現(xiàn)。
將Java虛擬機(jī)技術(shù)應(yīng)用在現(xiàn)代居民日常生活中,使水表、電表等儀器儀表的數(shù)據(jù)采集、匯總、記錄、上報(bào)等應(yīng)用方面,可以較大程度地減少人工手動(dòng)操作。在減少因人工操作帶來的誤差的同時(shí),提高數(shù)據(jù)統(tǒng)計(jì)及上報(bào)的效率,實(shí)現(xiàn)水表、電表等儀表設(shè)備的信息數(shù)據(jù)讀取、記錄、統(tǒng)計(jì)、上報(bào)的自動(dòng)化。
參考文獻(xiàn)
[1] 夏瑋瑋,沈連豐,肖婕,等.嵌入式系統(tǒng)關(guān)鍵技術(shù)分析與開發(fā)應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2003(2):5-9.
[2] 劉輝,陳家駿.嵌入式JAVA虛擬機(jī)的加速改造[J].微計(jì)算機(jī)信息,2006,22(17):134-136.
[3] 齊德昱,謝景明.一個(gè)基于Java虛擬機(jī)的分布式計(jì)算模型[J]. 計(jì)算機(jī)科學(xué),2007,34(6):252-254.
[4] 袁文菊,孫天澤,李梅.Java虛擬機(jī)向ARM平臺(tái)的移植[J].微計(jì)算機(jī)信息,2007(23):92,154-155.
[5] The embedded java application environment.URL:java.sun.com/products/embeddedjava/.
[6] 宋韜,盤細(xì)平,楊春福,等.嵌入式JAVA虛擬機(jī)機(jī)制研究[J].計(jì)算機(jī)應(yīng)用與軟件,2006,07(03):62-64.
[7] 嚴(yán)忠林.從虛擬機(jī)內(nèi)部機(jī)制著手提高Java效率[J].上海師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2005,(02):42-46.
