999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JVM運行機制淺析

2017-05-08 16:31:15張衛
祖國 2017年7期
關鍵詞:跨平臺

摘要:java是當前比較火的一門編程語言,由于java的跨平臺性使得java的應用在越來越多的方面得以體現,在java大行其道的背后有著一個默默無聞的工作角色,這個角色就是java虛擬機——JVM,在本文中對JVM的運行過程做了一些研究,并綜合闡述了JVM的運行部件和運行機制。

關鍵詞:JVM java虛擬機 跨平臺 面向對象編程

Java因為其良好的跨平臺性,得到越來越多程序員的喜歡,同時隨著智能化家居的日益普及,java已經從開發的神壇走向平常百姓身邊。無時無刻我們的身邊都有java設備的運行,網絡電視中的android平臺,運行在其上的各種APP都是java運行的結果,車載系統已經從原先最早的嵌入式形式走向現在更具體的獨立系統階段,裝上android系統,各種應用便可以進行拓展,不得不說,java已經是我們親密的伙伴和朋友。但是在此不得不說,一個非常重要的幕后英雄,JVM(java虛擬機Java Virtual Machine)。

總所周知,操作系統封裝了底層的硬件設備,為人們使用計算機設備提供了人性化接口,為編程提供了各種API調用接口,但是各種操作系統在給人們提供便利的同時,又因為彼此的不同,給開發應用系統帶來一定的阻礙,因為針對一種系統的應用要運行在另外一個系統上的話,必然要在此開發針對另外系統的應用,增加了人們的開發工作量。為了解決這一問題,Sun公司開發了java語言,當然其初衷并非如此,但是確實也達到了這樣的目的,至于其初衷在此不做討論。Java語言使用Java虛擬機屏蔽了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。JVM是java的核心和基礎,它是建立在java編譯器和操作系統平臺之間的虛擬電腦,或者狹義的理解為虛擬處理器,其運行基于下層操作系統和硬件平臺通過軟件來實現的抽象的計算機。java編譯器只需根據JVM編譯即可,程序員可以根據統一的標準去編寫程序,讓更做的重點放在工作流和業務流上。編譯器只需生成JVM能理解的代碼或者字節碼文件即可,JRE(java運行環境)將每一條指令翻譯成不同平臺的機器碼,保證其在不同平臺上的運行。

一個程序從源代碼到運行的執行過程如下:

1.編寫java源文件。

2.Javac編譯器將源文件編譯成class文件。

3.加載.class文件。

然后虛擬機采用如下圖所示的處理過程執行程序:

下面對JVM的運行組成做個說明:

1.JVM指令系統

JVM是對底層系統的抽象,同計算機指令系統一樣,JVM提供指令系統,其指令也是由操作碼和操作數兩部分構成,JVM操作碼是8位二進制數,所以JVM提供醉倒256種指令,已經使用160多種。

2.JVM寄存器

在普通的操作系統中,CPU包含一定的寄存器,JVM也設置了幾種常用的寄存器,PC程序計數器,OPTOP操作數棧頂指針,FRAM當前執行環境指針,VARS指向當前執行環境第一個局部變量的指針。其中所有 寄存器都是32位,PC記錄程序的執行,其他幾個寄存器記錄指向java棧區的指針。

其中,PC程序計數器可以理解為當前線程所執行的字節碼行號指示器,在JVM概念模型中,字節碼解釋器通過改變計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理等都依賴于程序計數器。

3.堆棧結構以及存儲區

JVM主要用棧來存儲信息,當JVM得到.class的字節碼后便為該代碼中一個類的每個方法創建一個包含局部變量、執行環境、操作數的棧框架。,VARS寄存器指向局部變量中第一個變量的位置。操作數棧主要用于保存運算所需要的操作數以及運算的結果,執行的時候從棧頂彈出操作數進行運算,最后將運算結果壓人棧頂。解釋器具體承擔實例空間的分配工作,解釋器為實例分配完存儲空間后就可以記錄該實例所占用的內存區域的使用,一旦對象使用完畢就將其回收到堆中。也就是使用NEW語句構造出來的對象最終要存在堆上,如果不再使用則由垃圾回收機制回收,即堆是java垃圾收集器管理的主要區域,所以很多時候它稱為GC區。為了存放類名稱、方法和字段名稱以及串常量,這些元素存放在JVM中的常量緩沖池,Java方法的字節碼則存放在方法區。

4.垃圾回收機制

使用過C++編程的人一定會為C++中內存泄漏而苦惱,因為C++運行環境中,對象所占的內存在程序結束后不會主動釋放,其釋放必須通過程序員調用代碼釋放,而在Java中有完善的垃圾回收機制,在對象引用沒有指向原先分配給某個對象的內存時,便忍者這塊內存便成是垃圾。JVM的一個系統級線程會自動釋放該內存塊。垃圾回收意味著程序不再需要的對象是“無用信息”,這些信息將被丟棄。當一個對象不再被引用的時候,內存回收它占領的空間,以便空間被后來的新對象使用。事實上,除了釋放沒用的對象,垃圾回收也可以清除內存記錄碎片。由于創建對象和垃圾回收器釋放丟棄對象所占的內存空間,內存會出現碎片。碎片是分配給對象的內存塊之間的空閑內存洞。碎片整理將所占用的堆內存移到堆的一端,JVM將整理出的內存分配給新的對象。垃圾回收能自動釋放內存空間,減輕編程的負擔。這使Java 虛擬機具有一些優點。首先,它能使編程效率提高。在沒有垃圾回收機制的時候,可能要花許多時間來解決一個難懂的存儲器問題。在用Java語言編程的時候,靠垃圾回收機制可大大縮短時間。其次是它保護程序的完整性,垃圾回收是Java語言安全性策略的一個重要部份。

經常有人說java的執行效率低,畢竟因為java是在底層的基礎之上做了一層封裝,其實現在經過JVM的優化,只要站在底層運行的角度去編寫代碼、優化代碼和其他編譯性程序語言相比,這種差距也越來越小,相比于JVM帶來的極大便利,這點差距又算得了什么呢。

(作者簡介:張衛,碩士研究生學歷,計算機科學與技術專業,銅仁幼兒師范高等專科學校講師,研究方向有:網格計算,計算機軟件與程序設計,多年從事一線教育工作和知名大學計算機實訓培訓工作。)

猜你喜歡
跨平臺
跨層級網絡、跨架構、跨平臺的數據共享交換關鍵技術研究與系統建設
一款游戲怎么掙到全平臺的錢?
電腦報(2021年11期)2021-07-01 08:10:05
潛力雙跨平臺:進階:誰將跨入下一個“十大”?
跨平臺APEX接口組件的設計與實現
測控技術(2018年9期)2018-11-25 07:44:58
基于C++語言的跨平臺軟件開發的設計
數碼世界(2017年12期)2017-12-28 15:45:13
基于C++語言的跨平臺軟件開發
移動互聯網應用跨平臺開發
一種虛擬現實應用程序跨平臺方法的研究
基于QT的跨平臺輸電鐵塔監控終端軟件設計與實現
基于OPC跨平臺通信的電機監測與診斷系統
主站蜘蛛池模板: 国产一区二区三区视频| 欧美丝袜高跟鞋一区二区| 欧美人与性动交a欧美精品| 日韩二区三区无| 亚洲精品午夜无码电影网| 91成人免费观看| 日本亚洲国产一区二区三区| 欧美精品三级在线| 久久免费看片| 国产激情无码一区二区APP| 午夜高清国产拍精品| 日本日韩欧美| 国产麻豆91网在线看| 激情六月丁香婷婷| 亚洲天堂精品在线| 久久久无码人妻精品无码| 欧美国产日韩在线| 无码区日韩专区免费系列| 精品无码一区二区三区在线视频| 中文字幕日韩久久综合影院| 欧美黄网在线| 国产大片喷水在线在线视频| 国产精品爽爽va在线无码观看 | 亚洲国产天堂久久综合| 在线亚洲精品自拍| 欧美中出一区二区| 亚洲无码高清视频在线观看| 91午夜福利在线观看| 亚洲一本大道在线| 91精品在线视频观看| 一本色道久久88综合日韩精品| 青青青国产免费线在| 亚洲色偷偷偷鲁综合| 8090成人午夜精品| 秋霞午夜国产精品成人片| 2022国产无码在线| 免费视频在线2021入口| 在线欧美a| 欧美精品色视频| 免费一级α片在线观看| 亚洲一道AV无码午夜福利| 成人国产小视频| 国产9191精品免费观看| 国产情侣一区| 成人一级免费视频| 亚洲午夜18| 国产极品美女在线观看| 国产男人的天堂| 波多野结衣无码中文字幕在线观看一区二区| 伊人国产无码高清视频| 青青青国产视频| 国产精品女熟高潮视频| 另类专区亚洲| 国产精品久久久久无码网站| 久久精品视频一| 久久这里只有精品8| 亚洲国产一区在线观看| 依依成人精品无v国产| 国产亚洲欧美日韩在线观看一区二区| 日韩美毛片| 亚洲欧美日韩精品专区| 国产香蕉国产精品偷在线观看| 丁香婷婷久久| 国产精彩视频在线观看| 九九热精品在线视频| 亚洲乱亚洲乱妇24p| 欧美黄网站免费观看| 婷婷开心中文字幕| 99久久99这里只有免费的精品| 国产又粗又爽视频| 精品国产自在在线在线观看| 精品少妇人妻无码久久| 久久香蕉国产线看观看亚洲片| 青青草国产免费国产| 国产免费自拍视频| 日韩精品毛片| 熟女视频91| 青青久在线视频免费观看| 亚洲无码视频一区二区三区| 亚洲aaa视频| 国产真实乱子伦视频播放| 黄色三级网站免费|