最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JDK14性能管理工具之jmap和jhat

 更新時間:2021年06月02日 11:07:43   作者:flydean  
我們在寫代碼的過程中,經常會遇到內存泄露的問題,比如某個集合中的對象沒有被回收,或者內存出現(xiàn)不明原因的增長。這些都是需要我們來定位的問題,我們可以使用jmap和jhat來對java程序中的內存對象進行分析。

簡介

jmap(Java Memory Map)是JDK自帶的工具,用來將某個java程序的內存中的信息打印或者輸出到文件中,然后通過jhat(Java Heap Analysis Tool)工具對輸出的文件進行分析,從而找到可能出現(xiàn)的問題。

接下來進入我們的jmap和jhat之旅吧。

jmap

jmap -clstats <pid>

    to connect to running process and print class loader statistics

jmap -finalizerinfo <pid>

    to connect to running process and print information on objects awaiting finalization

jmap -histo[:[<histo-options>]] <pid>

    to connect to running process and print histogram of java object heap

jmap -dump:<dump-options> <pid>

    to connect to running process and dump java heap

jmap有下面四個可用選項:

clstats

clstats的全稱叫做class loader statistics,用輸出類加載有關的統(tǒng)計信息。

舉一個例子:

jmap -clstats 8820

輸出結果如下:

  • Index - class的編號
  • Super - 父類的編號
  • InstBytes - 每個instance的bytes大小
  • KlassBytes - 該class的bytes大小
  • annotations - 注解大小
  • CpAll - 每個class中constants, tags, cache, 和 operands的大小
  • MethodCount - class中方法的個數(shù)
  • Bytecodes - byte codes的大小
  • MethodAll - method, CONSTMETHOD, stack map, 和 method data的大小
  • ROAll - 可以放到read-only memory中的class元數(shù)據(jù)的大小
  • RWAll - 可以放到read/write memory中的class元數(shù)據(jù)大小
  • Total - ROAll + RWAll
  • ClassName - class name

finalizerinfo

finalizerinfo列出準備finalization的對象。

jmap -finalizerinfo 8820

如果沒有對象等待被finalization,則會輸出:

No instances waiting for finalization found

histo

histo用來輸出java heap對象的直方圖??梢约右粋€live選項,用來輸出live的對象。

jmap -histo:live 8820

輸出結果:

num是對象的編號,instances是對象的個數(shù),bytes是對象的大小,class name是對象的class名字。

dump

最后要講一下dump,dump用于dump整個java heap,dump可以接三個參數(shù):

  • live - dump live對象
  • format=b - 以hprof的二進制模式dump
  • file=filename - dump對象到文件中

jmap -dump:live,file=dump.log 8820

這里dump.log文件是非常大的,用肉眼也很難分析,下面我們介紹一下jhat(Java Heap Analysis Tool)命令來對dump出來的對象進行分析。

jhat

注意,jhat從JDK9的時候已經刪除了(JEP 241: Remove the jhat Tool)?,F(xiàn)在Oracle官方推薦的分析工具是Eclipse Memory Analyzer Tool (MAT) 和 VisualVM。 這兩款工具后面有時間再詳細講解。

今天先使用JDK8中的jhat來分析一下上面dump出來的文件。

先看下jhat的命令格式:

Usage:  jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>

-J<flag>          Pass <flag> directly to the runtime system. For

  example, -J-mx512m to use a maximum heap size of 512MB

-stack false:     Turn off tracking object allocation call stack.

-refs false:      Turn off tracking of references to objects

-port <port>:     Set the port for the HTTP server.  Defaults to 7000

-exclude <file>:  Specify a file that lists data members that should

  be excluded from the reachableFrom query.

-baseline <file>: Specify a baseline object dump.  Objects in

  both heap dumps with the same ID and same class will

  be marked as not being "new".

-debug <int>:     Set debug level.

    0:  No debug output

    1:  Debug hprof file parsing

    2:  Debug hprof file parsing, no server

因為這個命令已經被廢棄了,這里就不過多講解它的參數(shù),總體來說jhap會解析dump出來的文件,并在本地啟動一個web服務器,我們可以通過web頁面來查看dump出來的數(shù)據(jù)。默認情況下web服務器的端口是7000。

jhat dump.log

Reading from dump.log...

Dump file created Mon May 11 21:13:43 CST 2020

Snapshot read, resolving...

Resolving 197989 objects...

Chasing references, expect 39 dots.......................................

Eliminating duplicate references.......................................

Snapshot resolved.

打開localhost:7000,我們可以看到首頁展示的是各個包中的類的實例和地址信息:

點擊首頁的類的鏈接,可以跳轉到類的具體信息頁面:

類的信息頁面包含很多信息,包括父類,類加載器,簽名,安全域,子類,實例,引用等詳細信息。

對我們分析內存泄露和內存異常等情況非常有用。!

以上就是淺談JDK14性能管理工具之jmap和jhat的詳細內容,更多關于JDK14性能管理工具之jmap和jhat的資料請關注腳本之家其它相關文章!

相關文章

  • spring?boot微服務場景下apollo加載過程解析

    spring?boot微服務場景下apollo加載過程解析

    apollo?是一個開源的配置中心項目,功能很強大,apollo?本身的配置項并不復雜,但是因為配置的路徑特別多,非常容易搞混了,?所以本文試圖聚焦?spring-boot?的場景,在?spring-boot?微服務場景下,搞清楚?apollo-client的加載過程
    2022-02-02
  • SpringBoot如何通過yml方式整合Mybatis

    SpringBoot如何通過yml方式整合Mybatis

    這篇文章主要介紹了SpringBoot如何通過yml方式整合Mybatis,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • java swing GUI窗口美化方式

    java swing GUI窗口美化方式

    這篇文章主要介紹了java swing GUI窗口美化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java JUnit 使用及常用注解

    Java JUnit 使用及常用注解

    JUnit是Java開發(fā)中必不可少的測試框架之一,它可以幫助您編寫高質量、可維護的單元測試,本文介紹了JUnit的基本用法、常用注解、測試套件和參數(shù)化測試等內容,希望對您的測試工作有所幫助,感興趣的朋友一起看看吧
    2023-12-12
  • 淺談Spring @Async異步線程池用法總結

    淺談Spring @Async異步線程池用法總結

    本篇文章主要介紹了淺談Spring @Async異步線程池用法總結,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java日期時間使用方法匯總

    Java日期時間使用方法匯總

    這篇文章主要針對Java日期時間使用方法進行匯總,感興趣的朋友可以參考一下
    2016-03-03
  • mybatis 如何判斷l(xiāng)ist集合是否包含指定數(shù)據(jù)

    mybatis 如何判斷l(xiāng)ist集合是否包含指定數(shù)據(jù)

    這篇文章主要介紹了mybatis 判斷l(xiāng)ist集合是否包含指定數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • @RequestBody,@RequestParam和@Param的區(qū)別說明

    @RequestBody,@RequestParam和@Param的區(qū)別說明

    這篇文章主要介紹了@RequestBody,@RequestParam和@Param的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 添加、替換、刪除PDF中的圖片的示例代碼

    Java 添加、替換、刪除PDF中的圖片的示例代碼

    這篇文章主要介紹了Java 添加、替換、刪除PDF中的圖片,本文通過示例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • java連接orcale數(shù)據(jù)庫示例分享

    java連接orcale數(shù)據(jù)庫示例分享

    這篇文章主要介紹了java連接orcale數(shù)據(jù)庫示例,需要的朋友可以參考下
    2014-02-02

最新評論

宜昌市| 崇州市| 湘潭县| 雷州市| 巩义市| 崇州市| 宜阳县| 改则县| 清流县| 玉树县| 开封县| 井研县| 新沂市| 类乌齐县| 家居| 禹城市| 菏泽市| 抚远县| 山丹县| 宣化县| 高唐县| 文山县| 南皮县| 北海市| 晋城| 凤阳县| 上饶县| 大英县| 米林县| 贵港市| 图们市| 那坡县| 岑巩县| 丽江市| 江山市| 巩义市| 襄城县| 盱眙县| 三穗县| 黑山县| 元谋县|