JVM
話說面試這塊,JVM算是一個經(jīng)典的也是三年必問的知識點了,而且這個知識點算是最重要的一個知識點,你如果會這個內(nèi)容,那么對你的在之后的面試中,能夠喊出一個不錯的價格。
而關(guān)于JVM和還有關(guān)于垃圾回收算法的解析,在這里就不在給大家進行講解了。大家有興趣的可以看一下之前推出的這幾篇文章
性能監(jiān)控工具
我們都在最開始學(xué)JAVA的時候,安裝過Java,不管是直接安裝版本還是復(fù)制過來解壓好的,大家都可以在JDK的安裝目錄中找到一些exe的程序,而這些exe的程序里面,有很多是我們不怎么去關(guān)注的性能的監(jiān)控工具。
大家可以看一下里面這些exe,是不是感覺Sun公司有時候也是很給力的,各種給大家隱藏的福利,就比如下面我們要說的JVM的調(diào)優(yōu)工具,就是Jconsole,而還有一些比如說
jstack :顯示虛擬機的線程快照
jps :虛擬機進程狀況工具
JConsole :JMX的可視化管理工具
VisualVM :多合一故障管理工具 (我認(rèn)為最牛掰的工具)
關(guān)于使用,我們在下面開始一一的講述,先從我們最關(guān)心的JVM調(diào)優(yōu)開始。
JVM調(diào)優(yōu)工具
主要的調(diào)優(yōu)工具有JDK自己帶的工具,也有外部的屬于收費的,大致就這么幾種。Jconsole,jProfile,VisualVM。
- Jconsole :jdk自帶,功能簡單,但是可以在系統(tǒng)有一定負(fù)荷的情況下使用。對垃圾回收算法有很詳細(xì)的跟蹤。
- JProfiler :這就是需要你另外付費的了的商業(yè)軟件,功能強大(付錢付錢)。
- VisualVM :JDK自帶,功能強大,與JProfiler類似。
而就因為不知道這么幾個工具而且沒使用過這些工具,被公司老弟瘋狂嘲笑了一波,那叫一個悲慘,既然不知道那么一定要學(xué)習(xí)一波的呀,那么我們就來看看這個工具。
那收費的我就管了,反正不如白嫖的香。那我們就來看看 Jconsole和 VisualVM吧。
VisualVM:
大家可以看一下左邊,顯示的是你正在運行的程序,pid是15908,端口號是我這邊的,你們那邊必然不是,但是大家可以當(dāng)個參考嘛。
VisualVM可以根據(jù)需要安裝不同的插件,每個插件的關(guān)注點都不同,有的主要監(jiān)控GC,有的主要監(jiān)控內(nèi)存,有的監(jiān)控線程等。
比如說看下圖:
這里你如果不顯示的話,直接點那個檢查最新版本。在可用的插件里面就會顯示出我們所有的能用的插件來。
我們雙擊一個內(nèi)容進去看一下:
在這里我們可以監(jiān)控各種堆棧信息,而這個工具和Jconsole是我們大家經(jīng)常使用的吧,除了有些高大上的喜歡用第三方的,但是阿粉還沒怎么使用過,畢竟公司不大,沒有那么多事,能看出問題來并且解決就OK啦。
下面我們再來看看JConsole。
JConsole :一款JMX的可視化管理工具
它是一個java GUI監(jiān)視工具,可以以圖表化的形式顯示各種數(shù)據(jù)。并可通過遠(yuǎn)程連接監(jiān)視遠(yuǎn)程的服務(wù)器VM。用java寫的GUI程序,用來監(jiān)控VM,并可監(jiān)控遠(yuǎn)程的VM,非常易用,而且功能非常強。
在我們看到的進程信息隨便點一個進去就可以看到
里面也有和VisualVm一樣的內(nèi)容,比如說堆內(nèi)存的使用量;內(nèi)存池“PS Old Gen”
而且還有我們的類的路徑,庫的路徑,以及Vm的參數(shù)等等,都是非常不錯的。
jps(JavaVirtual machine Process Status Tool):虛擬機進程狀況工具
說實話,從安裝JDK以來,還真的是沒有太注意這個jps,畢竟他僅僅是來輸出JVM中運行的進程狀態(tài)信息.
語法說實在的也是非常簡單的,給大家安利一下:jps 【options】 【hostid 】
options中可以選擇有很多種比如說
- q :不輸出類名、Jar名和傳入main方法的參數(shù),僅輸出VM標(biāo)識符
- m :輸出傳入main方法的參數(shù)
- l :輸出完全的包名,應(yīng)用主類名,jar的完全路徑名
- v :輸出jvm參數(shù)
而后免得hostid更好說了,主機或者是服務(wù)器的id,你如果什么東西都不寫,那么就是默認(rèn)的嘍。
如下所示:
大家有興趣的可以去自己動手試試,很有意思的。
jstack :堆棧跟蹤工具
這個工具也是非常好的,我們給他一個java進程ID,那么它就會給我們打印出Java堆棧信息。
而他的語法也是非常簡單的:jstack 【-l】 pid
這個說實話就更喜歡VisualVM了,同樣也能看到堆棧信息,至于怎么選擇,那就看你們的需要什么了?
最后感謝各位的閱讀,才疏學(xué)淺,難免存在紕漏,如果你發(fā)現(xiàn)錯誤的地方,還請你在后臺留言指出,我對其加以修改。