日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VisualVM介绍使用

發(fā)布時間:2023/12/1 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VisualVM介绍使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 ? ?打開VisualVM(這個工具放在JDK安裝目錄的bin目錄下,雙擊jvisualvm.exe即可打開),如下圖所示

?


?VisualVM自身為例,VisualVM本身也是一個java程序,當然也而已用VisualVM來分析

2???概述頁面主要顯示程序的啟動參數(shù)和系統(tǒng)信息(如下圖所示)?? ? ? ? ? ?

?

  • ?PID --?程序啟動后的進程號,在命令行中可以用?jps命令查看
  • ?主機?--?如果是本機的話顯示,localhost,如果是遠程主機應該是顯示遠程主機的主機名或者IP
  • ?主類?--?程序入口類(main方法所在的類)
  • ?參數(shù)?-- VisualVm?啟動的時候使用的一些配置文件路徑
  • ?JVM -- jvm類型
  • ?Java -- jdk的版本信息
  • ?Java Home -- JDK安裝目錄
    • JVM參數(shù)?-- VisualVm?啟動時候設置的JVM參數(shù)
    • ?系統(tǒng)屬性?-- java環(huán)境的系統(tǒng)參數(shù)

    3????監(jiān)視頁面主要展示?系統(tǒng)資源占用情況(如下圖所示)

    ?

  • ??CPU --?展示java程序運行的時候占用的cpu資源 如下圖中橙色的表示程序運行使用的cpu資源百分比,藍色部分表示垃圾回收占用CPU資源百分比
  • ? 堆?--?這里要說明下堆內(nèi)存的組成部分,堆是由老年代和新生代組成,其中新生代有由"伊甸園"和"兩個幸存區(qū)組成"三部分組成,堆視圖看到的資源占用實際是"老年代"、"伊甸園(Eden)"、"兩個幸存者(Survivor?)"的一個綜合情況。
  • ??PermGen -- ?Perm?區(qū)用來存放java類以及其他虛擬機自己的靜態(tài)數(shù)據(jù),(常被稱為持久代或者方法區(qū))
  • ? 類?--?此視圖 主要展示 當前程序加載了多少個類
  • ? 線程?--?當前程序的線程啟動情況
    • ? 執(zhí)行垃圾回收?--?手動觸發(fā)一次GC?相當于在程序代碼中調用(System.gc()),如果是遠程連接到生產(chǎn)環(huán)境中請慎重點擊。
    • ? 堆Dump --?生產(chǎn)當前程序的內(nèi)存快照hprof文件,對于分析內(nèi)存溢出問題比較有幫助。(可以查看當前程序內(nèi)存中的所有對象)

    4????線程頁面(主要展示程序中所有的線程運行狀態(tài))

  • ? 線程dump –?此按鈕主要生產(chǎn)當前程序中所有線程的快照(對分析線程死鎖,比較有幫助)
  • ? 時間線?–?展示每個線程的實時運行狀態(tài)(不同顏色代表不同的狀態(tài))
  • ? 表?–?按照二維表格的形式展示每個線程不同狀態(tài)的時間統(tǒng)計信息
  • ? 詳細信息?–?用餅圖展示每個線程的運行狀態(tài)
  • 5????抽樣器(應該算是線程頁面功能的一個補充)

    CPU-> CPU樣例?–?主要展示方法消耗的CPU資源比例和時間

    ?

    ?

    CPU->線程CPU時間?–?主要展示線程消耗的CPU資源信息

    ?

    內(nèi)存->?堆柱狀圖?–?展示堆內(nèi)存中各種對象占用的字節(jié)數(shù)和總實例數(shù)

    ?

    ?

    內(nèi)存->PermGen –?展示方法區(qū)各種對象消耗的內(nèi)存情況

    ?

    內(nèi)存->?每個線程分配—展示不同線程占用內(nèi)存的情況

    ?

    6????增加VisualGC插件

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

    ?

    ?

    安裝完成后重啟Java VisualVM,Visual GC界面自動打開,即可看到JVM中堆內(nèi)存的分代情況

    ?

    ?

    被監(jiān)控的程序運行一段時間后Visual GC顯示如下

    ?

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

    堆(Heap)?:JVM管理的內(nèi)存叫堆


    分代:根據(jù)對象的生命周期長短,把堆分為3個代:Young,Old和Permanent,根據(jù)不同代的特點采用不同的收集算法,揚長避短也。

  • Young(年輕代)
    年輕代分三個區(qū)。一個Eden區(qū),兩個Survivor區(qū)。大部分對象在Eden區(qū)中生成。當Eden區(qū)滿時,還存活的對象將被復制到Survivor區(qū)(兩個中的一個),當這個Survivor區(qū)滿時,此區(qū)的存活對象將被復制到另外一個Survivor區(qū),當這個Survivor去也滿了的時候,從第一個Survivor區(qū)復制過來的并且此時還存活的對象,將被復制“年老區(qū)(Tenured)”。需要注意,Survivor的兩個區(qū)是對稱的,沒先后關系,所以同一個區(qū)中可能同時存在從Eden復制過來對象,和從前一個Survivor復制過來的對象,而復制到年老區(qū)的只有從第一個Survivor復制過來的對象。而且,Survivor區(qū)總有一個是空的。

  • Tenured(年老代)
    年老代存放從年輕代存活的對象。一般來說年老代存放的都是生命期較長的對象。

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

  • ?

    GC的基本概念

    gc分為full gc 跟 minor gc,當每一塊區(qū)滿的時候都會引發(fā)gc。

  • Scavenge GC
    一般情況下,當新對象生成,并且在Eden申請空間失敗時,就觸發(fā)了Scavenge GC,堆Eden區(qū)域進行GC,清除非存活對象,并且把尚且存活的對象移動到Survivor區(qū)。然后整理Survivor的兩個區(qū)。

  • Full GC
    對整個堆進行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此應該盡可能減少Full GC。有如下原因可能導致Full GC:

    • 上一次GC之后Heap的各域分配策略動態(tài)變化

    • System.gc()被顯示調用

    • Perm域被寫滿

    • Tenured被寫滿

    ?

    內(nèi)存溢出??out of memory,是指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory;比如申請了一個integer,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出。

    內(nèi)存泄露? memory leak,是指程序在申請內(nèi)存后,無法釋放已申請的內(nèi)存空間,一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴重,無論多少內(nèi)存,遲早會被占光。其實說白了就是該內(nèi)存空間使用完畢之后未回收。

    ?

    轉載于:https://www.cnblogs.com/lizhen-home/p/7727536.html

    總結

    以上是生活随笔為你收集整理的VisualVM介绍使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。