java visual VM使用簡介

轉載請註明出處java

http://blog.csdn.net/pony_maggie/article/details/44999175
eclipse


做者:小馬jvm

 

VisualVM 是一款免費的性能分析工具。它經過 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多種方式從程序運行時得到實時數據,從而進行動態的性能分析。它最主要的功能是監控內存泄露,跟蹤垃圾回收,執行時內存、cpu分析,線程分析等。函數



經過實際的例子來講明。第一步咱們要安裝viual VM, 比較好的是在jdk6以後的安裝目錄下自帶了這個工具,不用再獨立安裝。




打開以後以下圖:




當咱們經過eclipse運行程序時,visual VM會自動識別到正在運行的程序,好比下面一段代碼頭:

工具

[java] view plain copy
  1. public class StringPoolTest   
  2. {  
  3.   
  4.     public void testStringPoolWithLongString()  
  5.     {  
  6.         long i = 0;  
  7.         while(true)  
  8.         {  
  9.             String longString = "this is a very very long string,to test the gc behavior of the string constant pool" + i;  
  10.             longString.intern();  
  11.             i++;  
  12.         }  
  13.     }  
  14.       
  15.     /** 
  16.      * @param args 
  17.      */  
  18.     public static void main(String[] args)   
  19.     {  
  20.         StringPoolTest test = new StringPoolTest();  
  21.         test.testStringPoolWithLongString();  
  22.   
  23.     }  
  24.   
  25. }  


在eclipse下運行這段程序,而後到visual VM中打開監視視圖,看到以下的顯示狀況:




CPU部分不顯示,應該是由於我運行的jdk版本過低。內存部分咱們看到堆和perm的使用狀況,注意看上面的程序,testStringPoolWithLongString函數是個死循環,不斷的調用String的intern,intern返回字符串對象的規範化表示形式,當調用 intern 方法時,若是池已經包含一個等於此 String 對象的字符串,則返回池中的字符串。不然,將此 String 對象添加到池中,而且返回此 String 對象的引用。java7之前,字符串常量池是放在perm空間的, 從java7開始,放在heap空間。我用的版本是1.6,因此若是咱們切換到perm視圖看到的會是另外一種景象,




從圖上能夠看出,不斷的GC,又不斷的申請空間。


線程部分顯示的是當前用戶線程和守護線程的數量,




性能

相關文章
相關標籤/搜索