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

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

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