国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談Java程序運行機制及錯誤分析

淺談Java程序運行機制及錯誤分析

2021-01-10 11:26Iceflame Java教程

這篇文章主要主要介紹了Java虛擬機(JVM)的有關內容以及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使用率,與目標進程的使用情況,再查看每個內核的使用情況??梢暂o助定位是單個線程問題或線程池問題。

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程序的執行過程,必須經過先編譯,后解釋兩個步驟。有關Java程序運行機制及錯誤分析的介紹就到這里,希望對大家有所幫助。感興趣的朋友可以參閱本站其他專題,在此希望大家對本站多多支持。

原文鏈接:https://www.2cto.com/kf/201611/569117.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费一区二区三区视频网站 | 三区视频| 日韩欧美国产一区二区 | 久久中国精品 | 午夜激情视频在线观看 | 免费国产一区二区 | 国产91色| 免费在线观看黄视频 | 日韩成人在线一区 | 黄色大片免费网址 | 91免费看网站 | 亚洲人视频 | 国产精品久久久久久久久费观看 | 色综合天天天天做夜夜夜夜做 | 九色在线视频 | 欧美日韩a | 狠狠ri | 成人在线观看免费爱爱 | 国产资源在线播放 | 国产亚洲精品美女久久久久久久久久 | 欧美成人自拍 | 成人特黄a级毛片免费视频 国产在线视频一区二区 | 久久久av| 亚洲国产一区二区三区 | 亚洲成人av在线 | 精品一区二区三区免费 | 亚洲国产高清在线 | 中文字幕日韩欧美 | 精品无码久久久久国产 | 狠狠色噜噜狠狠狠8888米奇 | 国产精品成人国产乱一区 | 国产精品久久九九 | 国产精品尤物 | 日韩美女国产精品 | 黄色成人影视 | 欧美在线观看免费观看视频 | 亚洲国产精品久久久久久久 | 中文字幕三区 | 在线播放亚洲 | 精品国产91| 中文字幕在线观看 |