1. 程式人生 > 實用技巧 >jdk自帶程式監控工具——JVisualVm

jdk自帶程式監控工具——JVisualVm

前言
通過我之前的文章《JVM堆記憶體模型概括》《java垃圾回收機制概括》《JVM怎樣判斷是垃圾物件進行垃圾回收》《eclipse怎麼設定堆記憶體大小》大家可以大概知道JVM的記憶體模型、JVM的垃圾回收機制、JVM對垃圾物件的判斷方法、以及使用eclipse怎樣進行堆記憶體大小的調整,當我們大概知道這些後就可以自己嘗試著寫一個小Demo來模擬大量業務物件的生成,然後再對JVM進行調優來實驗JVM調優後到底有沒有效果,那麼我們怎樣看有沒有效果呢?這裡我們就需要用到一個jdk自帶的工具了,下面我來講解一下工具怎麼用。
JVisualVm
這個工具叫JVisualVm,我們cmd在命令列直接輸入jvisualvm然後回車就可以開啟該工具。

在這裡插入圖片描述
在這裡插入圖片描述
當彈出該視窗的時候證明成功開啟,這個時候我們不要急著看工具裡面都有什麼功能,這個時候我們先執行一段程式碼然後通過程式碼來學習該工具,我們執行如下程式碼。
在這裡插入圖片描述
這段程式碼其實就是用一個while死迴圈將新new的student物件add到一個List裡面,這樣的話List相當於GCRoot根節點(在《JVM怎樣判斷是垃圾物件進行垃圾回收》一文中有講什麼是GCRoot根)這個時候所有new出來的student物件都被List進行add操作了,所以所有的物件都是一直存活物件,這個時候之前的工具我們可以看到多了一個Main方法。
在這裡插入圖片描述
我們雙擊開啟它然後點選監視可以看到cpu和堆的使用情況
在這裡插入圖片描述
這個時候我們可以看到堆的大小再一直變大,已使用的堆也在一直變大,之前的
《eclipse怎麼設定堆記憶體大小》
文章中講過怎麼設定初始堆記憶體大小和最大堆記憶體大小,而通過圖可以看出隨著已使用的堆在變大,整個堆記憶體也在自動擴容,由於這個程式創建出來的物件都是一直存活的物件,最後肯定會OOM(記憶體溢位)的,記憶體溢位後可以看到它會報一些錯誤資訊,這個需要大家自己試驗一下這個結果,這裡我就不給大家演示了,因為根據電腦記憶體大小的不同記憶體溢位所需要的執行次數也不同,本人的電腦記憶體16G的,大家可以看到大約執行了五千萬次while迴圈,然而黃色那塊堆大小擴充套件到了3.5G,一般堆記憶體最大值為整個電腦記憶體的四分之一,也就是堆記憶體擴充套件到4G就不能再擴充套件,就會OOM了,這裡由於本人是遊戲筆記本,程式執行起來電腦風扇呼呼的響,本人腦瓜子嗡嗡的,當然也很心疼筆記本,大家可以用公司的電腦來進行嘗試(這是鄙人不成熟的一個小建議。。。)。
總結
這個JVisualVm工具是jdk自帶的,只要電腦安裝配置了jdk就可以使用,非常的方便,當我們在自己電腦上執行程式發現特別慢的時候我們可以直接開啟JVisualVm來檢視堆記憶體的一個使用情況,當然JVisualVm不止這一個功能,接下來我會講一下怎麼分析dump日誌,希望大家多多關注、共同進步。