JVM
話說面試這塊,JVM算是一個經典的也是三年必問的知識點了,而且這個知識點算是最重要的一個知識點,你如果會這個內容,那么對你的在之后的面試中,能夠喊出一個不錯的價格。
而關于JVM和還有關于垃圾回收算法的解析,在這里就不在給大家進行講解了。大家有興趣的可以看一下之前推出的這幾篇文章
性能監控工具
我們都在最開始學JAVA的時候,安裝過Java,不管是直接安裝版本還是復制過來解壓好的,大家都可以在JDK的安裝目錄中找到一些exe的程序,而這些exe的程序里面,有很多是我們不怎么去關注的性能的監控工具。

大家可以看一下里面這些exe,是不是感覺Sun公司有時候也是很給力的,各種給大家隱藏的福利,就比如下面我們要說的JVM的調優工具,就是Jconsole,而還有一些比如說
jstack :顯示虛擬機的線程快照
jps :虛擬機進程狀況工具
JConsole :JMX的可視化管理工具
VisualVM :多合一故障管理工具 (我認為最牛掰的工具)
關于使用,我們在下面開始一一的講述,先從我們最關心的JVM調優開始。
JVM調優工具
主要的調優工具有JDK自己帶的工具,也有外部的屬于收費的,大致就這么幾種。Jconsole,jProfile,VisualVM。
- Jconsole :jdk自帶,功能簡單,但是可以在系統有一定負荷的情況下使用。對垃圾回收算法有很詳細的跟蹤。
- JProfiler :這就是需要你另外付費的了的商業軟件,功能強大(付錢付錢)。
- VisualVM :JDK自帶,功能強大,與JProfiler類似。
而就因為不知道這么幾個工具而且沒使用過這些工具,被公司老弟瘋狂嘲笑了一波,那叫一個悲慘,既然不知道那么一定要學習一波的呀,那么我們就來看看這個工具。
那收費的我就管了,反正不如白嫖的香。那我們就來看看 Jconsole和 VisualVM吧。
VisualVM:

大家可以看一下左邊,顯示的是你正在運行的程序,pid是15908,端口號是我這邊的,你們那邊必然不是,但是大家可以當個參考嘛。
VisualVM可以根據需要安裝不同的插件,每個插件的關注點都不同,有的主要監控GC,有的主要監控內存,有的監控線程等。
比如說看下圖:

這里你如果不顯示的話,直接點那個檢查最新版本。在可用的插件里面就會顯示出我們所有的能用的插件來。
我們雙擊一個內容進去看一下:

在這里我們可以監控各種堆棧信息,而這個工具和Jconsole是我們大家經常使用的吧,除了有些高大上的喜歡用第三方的,但是阿粉還沒怎么使用過,畢竟公司不大,沒有那么多事,能看出問題來并且解決就OK啦。
下面我們再來看看JConsole。
JConsole :一款JMX的可視化管理工具
它是一個java GUI監視工具,可以以圖表化的形式顯示各種數據。并可通過遠程連接監視遠程的服務器VM。用java寫的GUI程序,用來監控VM,并可監控遠程的VM,非常易用,而且功能非常強。

在我們看到的進程信息隨便點一個進去就可以看到

里面也有和VisualVm一樣的內容,比如說堆內存的使用量;內存池“PS Old Gen”


而且還有我們的類的路徑,庫的路徑,以及Vm的參數等等,都是非常不錯的。
jps(JavaVirtual machine Process Status Tool):虛擬機進程狀況工具
說實話,從安裝JDK以來,還真的是沒有太注意這個jps,畢竟他僅僅是來輸出JVM中運行的進程狀態信息.
語法說實在的也是非常簡單的,給大家安利一下:jps 【options】 【hostid 】
options中可以選擇有很多種比如說
- q :不輸出類名、Jar名和傳入main方法的參數,僅輸出VM標識符
- m :輸出傳入main方法的參數
- l :輸出完全的包名,應用主類名,jar的完全路徑名
- v :輸出jvm參數
而后免得hostid更好說了,主機或者是服務器的id,你如果什么東西都不寫,那么就是默認的嘍。
如下所示:

大家有興趣的可以去自己動手試試,很有意思的。
jstack :堆棧跟蹤工具
這個工具也是非常好的,我們給他一個java進程ID,那么它就會給我們打印出Java堆棧信息。
而他的語法也是非常簡單的:jstack 【-l】 pid

這個說實話就更喜歡VisualVM了,同樣也能看到堆棧信息,至于怎么選擇,那就看你們的需要什么了?
最后感謝各位的閱讀,才疏學淺,難免存在紕漏,如果你發現錯誤的地方,還請你在后臺留言指出,我對其加以修改。