Java程序運行的機制是什么-創(chuàng)新互聯(lián)

本篇文章為大家展示了Java程序運行的機制是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

10多年的貴溪網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整貴溪建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“貴溪網(wǎng)站設計”,“貴溪網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

JVM(Java虛擬機)一種用于計算設備的規(guī)范,可用不同的方式(軟件或硬件)加以實現(xiàn)。編譯虛擬機的指令集與編譯微處理器的指令集非常類似。Java虛擬機包括一套字節(jié)碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域。

       Java虛擬機(JVM)是可運行Java代碼的假想計算機。只要根據(jù)JVM規(guī)格描述將解釋器移植到特定的計算機上,就能保證經(jīng)過編譯的任何Java代碼能夠在該系統(tǒng)上運行。

1.為什么要使用Java虛擬機

      Java語言的一個非常重要的特點就是與平臺的無關性。而使用Java虛擬機是實現(xiàn)這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編 譯成不同的目標代碼。而引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用模式Java虛擬機屏蔽了與具體平臺 相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執(zhí)行字 節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。

Java運行機制

Java程序的運行必須經(jīng)過編寫 、編譯 、運行 三個步驟。

編寫是指在Java開發(fā)環(huán)境中進行程序代碼的輸入,最終形成后綴名為.java的Java源文件。

編譯是指使用Java編譯器對源文件進行錯誤排查的過程,編譯后將生成后綴名為.class的字節(jié)碼文件,這不像C語言那樣最終生成可執(zhí)行文件。

運行是指使用Java解釋器將字節(jié)碼文件翻譯成機器代碼,執(zhí)行并顯示結(jié)果

字節(jié)碼文件是一種和任何具體機器環(huán)境及操作系統(tǒng)環(huán)境無關的中間代碼,它是一種二進制文件,是Java源文件由Java編譯器編譯后生成的目標代碼文件。編程人員和計算機都無法直接讀懂字節(jié)碼文件,它必須由專用的Java解釋器來解釋執(zhí)行,因此Java是一種在編譯基礎上進行解釋運行的語言。

Java解釋器負責將字節(jié)碼文件翻譯成具體硬件環(huán)境和操作系統(tǒng)平臺下的機器代碼,以便執(zhí)行。因此Java程序不能直接運行在現(xiàn)有的操作系統(tǒng)平臺上,它必須運行在被稱為Java虛擬機的軟件平臺之上。

Java虛擬機(JVM)是運行Java程序的軟件環(huán)境,Java解釋器就是Java虛擬機的一部分。在運行Java程序時,首先會啟動JVM,然 后由它來負責解釋執(zhí)行Java的字節(jié)碼,并且Java字節(jié)碼只能運行于JVM之上。這樣利用JVM就可以把Java字節(jié)碼程序和具體的硬件平臺以及操作系 統(tǒng)環(huán)境分隔開來,只要在不同的計算機上安裝了針對于特定具體平臺的JVM,Java程序就可以運行,而不用考慮當前具體的硬件平臺及操作系統(tǒng)環(huán)境,也不用 考慮字節(jié)碼文件是在何種平臺上生成的。JVM把這種不同軟硬件平臺的具體差別隱藏起來,從而實現(xiàn)了真正的二進制代碼級的跨平臺移植。JVM是Java平臺 無關的基礎,Java的跨平臺特性正是通過在JVM中運行Java程序?qū)崿F(xiàn)的。

Java語言這種“一次編寫,到處運行(write once,run anywhere)”的方式,有效地解決了目前大多數(shù)高級程序設計語言需要針對不同系統(tǒng)來編譯產(chǎn)生不同機器代碼的問題,即硬件環(huán)境和操作平臺的異構(gòu)問題,大大降低了程序開發(fā)、維護和管理的開銷。

需要注意的是,Java程序通過JVM可以達到跨平臺特性,但JVM是不跨平臺的。也就是說,不同操作系統(tǒng)之上的JVM是不同的,Windows平臺之上的JVM不能用在Linux上面,反之亦然。

JAVA程序運行錯誤分析

一般來說,一個已經(jīng)投入運營的大型項目出現(xiàn)問題的可能最多如下幾種情況:

1.異常的CPU使用

1)查看CPU使用率,與目標進程的使用情況,再查看每個內(nèi)核的使用情況。可以輔助定位是單個線程問題或線程池問題。

2)有時,程序在正常一段時間后,突然CPU垂直升高,那么可能與程序內(nèi)的鎖有關(如果鎖持有的時間很短,不如試試cas+yield來實現(xiàn)自旋鎖)

3)死鎖,直接導出調(diào)用棧,尋找問題解決。

2.異常的內(nèi)存

1)內(nèi)存泄漏,沒什么好說的,dump出堆棧查找問題

2)頻繁的GC也會導致性能不足,在程序經(jīng)常出現(xiàn)GC的情況下,就要注意了,調(diào)高新生代大小如果仍然不能解決則需要定位大量創(chuàng)建臨時對象的代碼(可以使用對象池技術來避免內(nèi)存重復申請的情況)

3.某個工作線程的意外終止

4.異常的IO

1)查看打開文件,IO操作占用,磁盤使用率??梢允褂妹?df iostat 等

2)查看是否有程序占用監(jiān)聽,網(wǎng)絡使用率,可以使用命令 netstat 等

使用工具分析故障

1.jmap

jmap pid 默認查看JAVA進程中內(nèi)存使用相關信息

jmap -histo pid 查看內(nèi)存中活躍的實例數(shù)量

jmap -dump:format=b,file=(文件名) pid 完整導出java程序內(nèi)存。完整分析分三個流程,在程序初始化完畢后執(zhí)行一次 jmap -dump:format=b,file=a.bin 然后在內(nèi)存占用開始出現(xiàn)上漲的時候執(zhí)行一次,最后等達到上限后再執(zhí)行一次,用JHat或者第三方工具來打開dump文件。

3.jstack或者JCONSOLE

默認 可以查看進程調(diào)用棧信息,用來分析IO超時,死鎖,或者其他情況。程序出現(xiàn)異常必須要分析的信息,可以輔助問題的定位和排除。

jstat -gc pid gaptime 查看GC相關信息

jstat -compiler pid 查看實時編譯信息

4.kill -3

同上,適用于沒有安裝develop工具的服務器,可以輸出調(diào)用棧信息和部分GC信息

5.iftop 查看網(wǎng)口
查看網(wǎng)絡出入流量與目標服務器之間的流量,可以輔助排查是否由攻擊引起的

 pstack 虛擬機堆棧

需要安裝gdb,一般用于檢查c/c++程序,在某些虛擬機級錯誤的時候。

上述內(nèi)容就是Java程序運行的機制是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前標題:Java程序運行的機制是什么-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://muchs.cn/article48/dsjoep.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、營銷型網(wǎng)站建設、外貿(mào)網(wǎng)站建設App設計、全網(wǎng)營銷推廣搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設