中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java程序運行的機制是什么

發布時間:2020-12-07 16:08:47 來源:億速云 閱讀:126 作者:Leah 欄目:編程語言

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

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

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

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

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

Java運行機制

Java程序的運行必須經過編寫 、編譯 、運行 三個步驟。

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

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

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

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

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

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

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

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

JAVA程序運行錯誤分析

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

1.異常的CPU使用

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

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

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

2.異常的內存

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

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

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

4.異常的IO

1)查看打開文件,IO操作占用,磁盤使用率。可以使用命令 df iostat 等

2)查看是否有程序占用監聽,網絡使用率,可以使用命令 netstat 等

使用工具分析故障

1.jmap

jmap pid 默認查看JAVA進程中內存使用相關信息

jmap -histo pid 查看內存中活躍的實例數量

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

3.jstack或者JCONSOLE

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

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

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

4.kill -3

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

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

 pstack 虛擬機堆棧

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

上述內容就是Java程序運行的機制是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高要市| 勐海县| 麦盖提县| 伽师县| 青田县| 庆云县| 冕宁县| 潼南县| 长丰县| 惠安县| 旺苍县| 深州市| 横山县| 阳谷县| 师宗县| 甘谷县| 宁津县| 玛多县| 宝清县| 肥东县| 江都市| 蓝山县| 洪湖市| 康保县| 沙湾县| 社会| 措勤县| 伊宁县| 桃源县| 泸定县| 龙南县| 收藏| 班玛县| 中牟县| 左权县| 大余县| 酒泉市| 铜鼓县| 大冶市| 镇康县| 昌图县|