日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

深度分析java dump文件

瀏覽:65日期:2022-08-12 14:59:13
目錄JVM dump獲取JVM dump文件dump文件分析結構詳解文件頭java一個類的成員變量有兩種類型內容塊塊頭gc root類對象基本信息說明實例對象基本類型數組基本信息說明對象數組內存分配內存回收規則分析工具簡介瀏覽器打開http:/127.0.0.1:7000點擊頁面的堆內存統計點擊其中認為內存消耗太多的類名查看類詳情點擊references summary by typeJVM dump

java內存dump是jvm運行時內存的一份快照,利用它可以分析是否存在內存浪費,可以檢查內存管理是否合理,當發生OOM的時候,可以找出問題的原因。那么dump文件的內容是什么樣的呢?我們一步一步來

獲取JVM dump文件

獲取dump文件的方式分為主動和被動

主動方式:

1.利用jmap,也是最常用的方式:jmap -dump:[live],format=b,file=

2.利用jcmd,jcmd GC.heap_dump

3.使用VisualVM,可以界面操作進行dump內存

4.通過JMX的方式

MBeanServer server = ManagementFactory.getPlatformMBeanServer();HotSpotDiagnosticMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy(server, 'com.sun.management:type=HotSpotDiagnostic', HotSpotDiagnosticMXBean.class);mxBean.dumpHeap(filePath, live);

參考(https://www.baeldung.com/java-heap-dump-capture)

被動方式:

被動方式就是我們通常的OOM事件了,通過設置參數-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=

dump文件分析

結構示意圖

深度分析java dump文件

結構詳解

dump文件是堆內存的映射,由文件頭和一系列內容塊組成

文件頭

由musk, 版本,identifierSize, 時間4部分組成

1、musk:4個byte,內容為’J’, ’A’, ’V’, ’A’即JAVA

2、version:若干byte,值有以下三種

' PROFILE 1.00',

' PROFILE 1.0.10',

' PROFILE 1.0.20'

3、identifierSize:4個byte數字,值為4或者8,表示一個引用所占用的byte數

4、time:8個byte,dump文件生成時間

java一個類的成員變量有兩種類型

1.基本類型(8種基本類型),它們占用byte數固定不變,每生成一個對象它們就需要給它們賦初始值,分配空間

2.是引用類型,表示一個對象,在類中只有一個引用,引用只是一個數值,所占用的空間大小為identifierSize,被引用對象即將在堆中的另一個地方

例如定義一個類

public class Person { private int age;//4個byte private String name;//identifierSize個byte private double weight;//8個byte}

當我們在new Person()的時候

它就需要申請一個空間,空間大小為 對象頭大小+4+identifierSize+8個byte

對象大小的測量:

jdk提供一個測試對象占用內存大小的工具Instrumentation,但是Instrumentation沒法直接引用到,需要通過agent來引用到定義一個Premain類, javac Premain.java

//Premain.javapublic class Premain { public static java.lang.instrument.Instrumentation inst; public static void premain(String args, java.lang.instrument.Instrumentation inst) {Premain.inst = inst; }}

編寫一個Manifest文件

manifest.mfManifest-Version: 1.0Premain-Class: PremainCan-Redefine-Classes: trueCan-Retransform-Classes: true

打包

jar -cmf manifest.mf premain.jar Premain.class

定義一個執行類, javac PersonTest.java

//PersonTest.javapublic class PersonTest { public static void main(String[] args) throws Exception {Class clazz = Class.forName('Premain');if (clazz != null) { Person p = new Person(); java.lang.instrument.Instrumentation inst = (java.lang.instrument.Instrumentation)clazz.getDeclaredField('inst').get(null); System.out.println('person size:[' + inst.getObjectSize(p) + ']B'); System.out.println('class size:[' + inst.getObjectSize(p.getClass()) + ']B');} }}

帶agent執行

java -javaagent:premain.jar PersonTest

結果:

person size:[32]B

class size:[504]B

內容塊

每個塊都是塊頭和塊體組成

塊頭

塊頭由1個byte的塊類型,4個byte的時間time,4個byte的長度表示此內容塊占用byte數type類型一般有5種,字符串,類,棧楨,棧,及dump塊

1.字符串,由identifierSize個byte的字符串id,后面是(length-identifierSize)個byte的字符串內容(后續對字符串是直接引用的這里面的id)

2.類,由4個byte的類序列(在棧楨中使用),identifierSize個byte的類id(解析類的時候用到),4個byte的序列id(暫未使用),identifierSize個byte的類名id

3.棧楨,由identifierSize個byte的楨id,identifierSize個byte的方法名id,identifierSize個byte的方法標識id,identifierSize個byte的類文件名id,4個byte的類序列,4個byte的行號

4.棧,由4個byte的棧序號,4個byte的線程序號,4個byte的楨數量,后面就是若干個identifierSize個byte的楨id

5.dump塊就是所有對象的內容了,每個對象由1個byte的子類型,和對象內容結成,子類型有6種,gc root, 線程對象,類,對象,基本類型數組,對象數組

gc root

gc root有4種結構,8種類型

1,identifierSize個byte的對象id,類型有SYSTEM_CLASS,BUSY_MONITOR, 及未UNKNOWN

2.identifierSize個byte的對象id,4個byte的線程序列號,類型有NATIVE_STACK,THREAD_BLOCK

3.identifierSize個byte的對象id,4個byte的線程序列號,4個byte的棧楨深度,類型有JAVA_LOCAL,NATIVE_LOCAL

4.identifierSize個byte的對象id,identifierSize個byte的global refId(暫未使用),類型有NATIVE_STATIC

gc root示意圖

gc root為垃圾收集追溯的源頭,每個gc root都指向一個初始對象,無法追溯的對象是要被回收掉的

深度分析java dump文件

系統類,只有classLoader為null的類才是gc root,每個類都是一個gc root線程棧,線程中方法參數,局部變量都是gc root,每個對象都是一個gc root系統保留對象,每個對象都是一個gc root

類對象基本信息

1.identifierSize個byte的類對象id

2.4個byte的棧序列號

3.identifierSize個byte的父類對象id,

4.identifierSize個byte的classLoader對象id,

5.identifierSize個byte的Signer對象id,

6.identifierSize個byte的protection domain對象id,

7.identifierSize個byte的保留id1和id2,

8.4個byte的類實例對象大小,

9.2個byte的常量個數,后面是每個常量的,2個byte的下標,1個byte的常量類型,和若干個byte的內容,內容根據類型來決定(boolean/byte為1個byte, char/short為2個byte,float/int為4個byte, double/long為8個byte,引用類型為identifierSize個byte)

10.2個byte的靜態變量個數,后面是每個靜態變量的,identifierSize個byte的變量名id, 1個byte的變量類型,和若干個byte的內容,內容根據類型來決定(見類對象基本信息的第9條)

11.2個byte的成員變量個數,后面是每個成員變量的,identifierSize個byte的變量名id,1個byte的變量類型

說明

(1)類里面的常量很多地方都沒有用上,所以常量個數一般為0

(2)類的靜態變量的名稱類型及值是放在類對象里面的,成員變量的名稱和類型也是放在類對象里面的,但是實例的值是放在實例對象里面的

實例對象

1、基本信息:

identifierSize個byte的實例對象id 4個byte的棧序列號 identifierSize個byte的類id 4個byte的占用字節數 實例的變量的值

2、說明:

實例的值為實例對象的成員變量值,順序為當前類的變量值,順序為類對象基本信息中第11條中的順序, 然后是父類的變量值變量的值基本類型都有默認值,引用類型默認值為0,占用字節數(見類對象基本信息的第9條)基本類型數組基本信息 identifierSize個byte的數組對象id 4個byte的棧序列號 4個byte的數組長度 1個byte的元素類型 元素的值列表說明

元素的值(見類對象基本信息的第9條)

對象數組

基本信息:

identifierSize個byte的數組對象id 4個byte的棧序列號 4個byte的數組長度 identifierSize個byte的元素類id 元素的值列表內存分配

深度分析java dump文件

當一個線程啟動的時候,進程會去系統內存生成一個線程棧每當發生一次方法調用,就會向棧中壓入一個棧楨,當方法調用完之后,棧楨會退出在運行過程中,如果有對象的new操作的時候,進程會去堆區申請一塊內存關于運行時內存的詳細情況,可以查找相關的資料

內存回收規則

如果一個對象不能騎過gc root引用可達,那么這個對象就可能要被回收

對象回收規則包括

實例屬性被實例引用,只有當實例被回收了實例屬性才能被回收(只針對強引用)

類對象被實例引用,只有當一個類的所有實例都被回收了,類才能被回收類

對象的父類,classLoader對象,signer對象, protection domain對象被類引用,只有當類被回收了,這些才能被回收

局部變量(線程棧中)的作用域為一個大括號

public void test(){Object a = new Object();//obj 1Object b = new Object();//obj 2{Object c = new Object();//obj 3a = null;//obj 1可以被回收了}//obj 3可以回收了}//obj 2可以被回收了分析工具簡介

分析dump文件,我們可以用jdk里面提供的jhat工具,執行

jhat xxx.dump

jhat加載解析xxx.dump文件,并開啟一個簡易的web服務,默認端口為7000,可以通過瀏覽器查看內存中的一些統計信息

一般使用方法

瀏覽器打開http:/127.0.0.1:7000

深度分析java dump文件

會列出一些功能,包括package下面各個類的概覽,及各個功能導航

點擊頁面的堆內存統計

深度分析java dump文件

有一個表格,對象類型,實例個數,實例所占用內存大小,哪種類型的對象占用了內存最多一目了然

點擊其中認為內存消耗太多的類名查看類詳情

深度分析java dump文件

主要展現該類下面各個實例的大小,以及一些鏈接導航

點擊references summary by type

深度分析java dump文件

如果某種類型的對象太多,那么有可能是引用它的那個類的對象太多

基本上一些簡單頁面的查詢,結合原代碼,就可以初步定位內存泄漏的地方

綜上,dump文件結構還是比較簡單的,這對于分析線程的執行情況非常有用,也是每一個Java程序員必須掌握的高級技能之一,你學會了嗎?

以上就是深度分析java dump文件的詳細內容,更多關于java dump文件的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品外国| 欧美女激情福利| 夜夜嗨av一区二区三区网站四季av| 久久99影视| 日本欧美一区二区在线观看| 日韩在线观看一区二区| 久久中文字幕av一区二区不卡| 国产欧美一区二区三区精品酒店 | 国产精品99一区二区| 色在线视频观看| 久久久久免费av| 香蕉久久99| 久久国产精品亚洲77777| 日韩在线观看中文字幕| 日本亚洲视频| 精品资源在线| 成人精品亚洲| 在线日韩成人| 国产乱人伦丫前精品视频| 国产精品videossex| 成人看片网站| 视频一区欧美精品| 欧美日韩一区自拍| 久久99精品久久久野外观看| 在线观看精品| 丝袜美腿高跟呻吟高潮一区| 日韩激情一二三区| 久久国产中文字幕| 7m精品国产导航在线| 久久天堂影院| 99久久久久国产精品| 欧美精品国产| av亚洲免费| 国产精品第十页| 国产精品女主播一区二区三区| 国产精品一区高清| 国产偷自视频区视频一区二区| 国产欧美69| 久久福利一区| 中文字幕一区久| 日韩激情精品| 日韩视频一区二区三区在线播放免费观看| 国产亚洲欧美日韩在线观看一区二区 | 日韩精品福利一区二区三区| 日韩成人高清| 精品国产网站| 欧美在线黄色| 亚洲一区av| 1024精品一区二区三区| 国产精品极品在线观看| 男人天堂欧美日韩| 日韩大片在线播放| 午夜天堂精品久久久久| 欧美va天堂| 欧美69视频| 欧美一级精品| 国产91精品对白在线播放| 美女国产一区二区三区| 欧美另类中文字幕 | 成人自拍av| 精品欧美日韩精品| 精品一区av| 国产亚洲第一伦理第一区| 日韩欧美高清一区二区三区| 午夜欧美精品| 欧美日韩国产在线一区| 日韩av福利| 久久蜜桃精品| 亚洲精品2区| 日韩一区二区三区免费| 久久精品国产大片免费观看| 久久久久久久久99精品大| 亚洲一级网站| 美女av在线免费看| 激情欧美一区| 日韩精品一二三| 日韩1区2区日韩1区2区| 久久99青青| 国产不卡人人| 四虎8848精品成人免费网站| 91精品一区国产高清在线gif | 久久午夜视频| 91精品视频一区二区| 久久久亚洲欧洲日产| www成人在线视频| 亚洲激情二区| 国产精品美女午夜爽爽| 在线一区视频观看| 伊人久久成人| 精品久久一区| 九一精品国产| 麻豆成人综合网| 欧美理论视频| 久久99偷拍| 亚洲综合丁香| 成人在线视频免费| 亚洲免费福利一区| 国产综合色区在线观看| 欧美日韩伊人| 亚洲少妇一区| 欧美精品日日操| 久久精品97| 国产韩日影视精品| 久久久国产精品入口麻豆| 91精品一区国产高清在线gif| 麻豆极品一区二区三区| 水野朝阳av一区二区三区| 亚洲国产成人二区| 欧美久久亚洲| 中文字幕视频精品一区二区三区| 亚洲成人va| 开心激情综合| 久久国产精品美女| 日韩免费精品| 亚洲精品日韩久久| 欧美精品一区二区三区精品| 色婷婷色综合| 精品一区电影| 捆绑调教美女网站视频一区| 狠狠久久婷婷| 国产99亚洲| 日韩精品免费一区二区在线观看| 国产精品香蕉| 国产激情久久| 成人精品久久| 黑人精品一区| 久久久水蜜桃av免费网站| 亚洲国产欧美日本视频| 国产一区二区三区不卡视频网站| 国产日产高清欧美一区二区三区 | 国产欧美一区二区色老头| 丝袜美腿成人在线| 亚洲色诱最新| 国产亚洲福利| 日韩国产精品久久久久久亚洲| 亚洲一区二区av| 欧美日韩1区2区3区| 国产精品美女在线观看直播| 乱一区二区av| www.九色在线| 午夜影院一区| 五月精品视频| 日本综合精品一区| 国产乱码精品一区二区亚洲| 日韩在线观看中文字幕| 久久久91麻豆精品国产一区| 国产夫妻在线| 国产精品婷婷| 精品伊人久久| 黑丝一区二区三区| 国产精品一区二区精品视频观看 | 国产精品中文字幕制服诱惑| 日韩一区二区免费看| 中文不卡在线| 精品久久不卡| 99精品99| 免费在线亚洲欧美| 日韩在线视频精品| 三级亚洲高清视频| 国产日韩欧美中文在线| 成人va天堂| 日韩精彩视频在线观看| 91视频久久| 久久国产福利| 97国产精品| 日韩欧美中文字幕一区二区三区 | 久久伊人久久| 蜜桃91丨九色丨蝌蚪91桃色| 国产成年精品| 日韩福利在线观看| 国内精品福利| 日本中文字幕一区二区| 久久精品91| 欧美国产日韩电影| 男女男精品视频网| 欧美日韩第一| 国产黄大片在线观看| 亚洲精一区二区三区| 99久久精品网站| 成人亚洲一区| 麻豆一区二区99久久久久| 日韩精品久久久久久久软件91| 91久久午夜| 日韩理论片av| 都市激情国产精品| 国产一区二区视频在线看| 精品三级在线| 久久精品国产99国产精品| 久久狠狠亚洲综合| 青青草精品视频| 欧美日韩一区二区三区四区在线观看 | 9久re热视频在线精品| 成人午夜国产| 精品成人免费一区二区在线播放| 久久精品国产亚洲aⅴ| 国产精品久一| 老牛国内精品亚洲成av人片 | 久久只有精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 影院欧美亚洲|