Java程序性能分析工具Java VisualVM(Visual GC)—程序員必備利器

VisualVM 是一款免費的\集成了多個JDK 命令行工具的可視化工具,它能爲您提供強大的分析能力,對 Java 應用程序作性能分析和調優。這些功能包括生成和分析海量數據、跟蹤內存泄漏、監控垃圾回收器、執行內存和 CPU 分析,同時它還支持在 MBeans 上進行瀏覽和操做。算法

在內存分析上,Java VisualVM的最大好處是可經過安裝Visual GC插件來分析GC(Gabage Collection)趨勢、內存消耗詳細情況。工具

 

一  Visual GC(監控垃圾回收器)性能

Java VisualVM默認沒有安裝Visual GC插件,須要手動安裝JDK的安裝目錄的bin目露下雙擊jvisualvm.exe,便可打開Java VisualVM,點擊菜單欄 工具->插件 安裝Visual GC插件

技術分享

 

 

安裝完成後重啓Java VisualVM,Visual GC界面自動打開,便可看到JVM中堆內存的分代狀況命令行

技術分享

 

 

被監控的程序運行一段時間後Visual GC顯示以下線程

技術分享

 

要看懂上面的圖必須理解Java虛擬機的一些基本概念:3d

堆(Heap) :JVM管理的內存叫堆調試


分代:根據對象的生命週期長短,把堆分爲3個代:Young,Old和Permanent,根據不一樣代的特色採用不一樣的收集算法,揚長避短也。對象

  1. Young(年輕代)
    年輕代分三個區。一個Eden區,兩個Survivor區。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被複制到Survivor區(兩個中的一個),當這個Survivor區滿時,此區的存活對象將被複制到另一個Survivor區,當這個Survivor去也滿了的時候,從第一個Survivor區複製過來的而且此時還存活的對象,將被複制「年老區(Tenured)」。須要注意,Survivor的兩個區是對稱的,沒前後關係,因此同一個區中可能同時存在從Eden複製過來對象,和從前一個Survivor複製過來的對象,而複製到年老區的只有從第一個Survivor複製過來的對象。並且,Survivor區總有一個是空的。blog

  2. Tenured(年老代)
    年老代存放從年輕代存活的對象。通常來講年老代存放的都是生命期較長的對象。

  3. Perm(持久代)
    用於存放靜態文件,現在Java類、方法等。持久代對垃圾回收沒有顯著影響,可是有些應用可能動態生成或者調用一些class,例如Hibernate等,在這種時候須要設置一個比較大的持久代空間來存放這些運行過程當中新增的類。持久代大小經過-XX:MaxPermSize=進行設置。

 

GC的基本概念

gc分爲full gc 跟 minor gc,當每一塊區滿的時候都會引起gc。

  1. Scavenge GC
    通常狀況下,當新對象生成,而且在Eden申請空間失敗時,就觸發了Scavenge GC,堆Eden區域進行GC,清除非存活對象,而且把尚且存活的對象移動到Survivor區。而後整理Survivor的兩個區。

  2. Full GC
    對整個堆進行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,所以應該儘量減小Full GC。有以下緣由可能致使Full GC:

  • 上一次GC以後Heap的各域分配策略動態變化

  • System.gc()被顯示調用

  • Perm域被寫滿

  • Tenured被寫滿

 

內存溢出  out of memory,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;好比申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

內存泄露  memory leak,是指程序在申請內存後,沒法釋放已申請的內存空間,一次內存泄露危害能夠忽略,但內存泄露堆積後果很嚴重,不管多少內存,早晚會被佔光。其實說白了就是該內存空間使用完畢以後未回收。

 

 

二 Java VisualVM的其餘功能

 

1.監視界面(cpu,類,堆,線程)

技術分享

 

 

2.線程界面

 

技術分享

 

 

3.Profile界面(性能剖析)

點擊CPU按鈕執行cpu分析查看方法

 

技術分享

 

點擊內存按鈕執行內存分析查看類

技術分享

 

 

4.堆dump線程dump操做

Dump文件是進程的內存鏡像,能夠把程序的執行狀態經過調試器保存到dump文件中,堆dump的dump文件內容以下圖所示

技術分享

相關文章
相關標籤/搜索