精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

干貨分享丨jvm系列:dump文件深度分析

開發 后端
java內存dump是jvm運行時內存的一份快照,利用它可以分析是否存在內存浪費,可以檢查內存管理是否合理,當發生OOM的時候,可以找出問題的原因。

JVM dump

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

獲取JVM dump文件

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

i.主動方式:

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

2.利用jcmd,jcmd GC.heap_dump

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

4.通過JMX的方式 

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

參考(https://www.baeldung.com/java...

ii.被動方式:

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

dump文件分析

結構示意圖

結構詳解

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

文件頭

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

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

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

  1. " PROFILE 1.0\0",  
  2. " PROFILE 1.0.1\0",  
  3. " PROFILE 1.0.2\0"  

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

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

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

  1. 基本類型(8種基本類型),它們占用byte數固定不變,每生成一個對象它們就需要給它們賦初始值,分配空間
  2. 是引用類型,表示一個對象,在類中只有一個引用,引用只是一個數值,所占用的空間大小為identifierSize,被引用對象即將在堆中的另一個地方

        例如定義一個類 

  1. public class Person {  
  2.  private int age;//4個byte  
  3.  private String name;//identifierSize個byte  
  4.  private double weight;//8個byte  
  5.  

當我們在new Person()的時候

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

對象大小的測量:

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

定義一個Premain類, javac Premain.java 

  1. //Premain.java  
  2. public class Premain {  
  3.     public static java.lang.instrument.Instrumentation inst;  
  4.     public static void premain(String args, java.lang.instrument.Instrumentation inst) {  
  5.         Premain.inst = inst;  
  6.     }  
  7.  

編寫一個Manifest文件 

  1. manifest.mf  
  2. Manifest-Version: 1.0  
  3. Premain-Class: Premain  
  4. Can-Redefine-Classes: true  
  5. Can-Retransform-Classes: true  

打包 

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

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

  1. //PersonTest.java  
  2. public class PersonTest {  
  3.     public static void main(String[] args) throws Exception {  
  4.         Class clazz = Class.forName("Premain");  
  5.         if (clazz != null) {  
  6.             Person p = new Person();  
  7.             java.lang.instrument.Instrumentation inst = (java.lang.instrument.Instrumentation)clazz.getDeclaredField("inst").get(null);  
  8.             System.out.println("person size:[" + inst.getObjectSize(p) + "]B");  
  9.             System.out.println("class size:[" + inst.getObjectSize(p.getClass()) + "]B"); 
  10.         }  
  11.     }  
  12.  

帶agent執行 

  1. java -javaagent:premain.jar PersonTest 

結果: 

  1. person size:[32]B  
  2. 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都指向一個初始對象,無法追溯的對象是要被回收掉的

系統類,只有classLoader為null的類才是gc root,每個類都是一個gc root

線程棧,線程中方法參數,局部變量都是gc root,每個對象都是一個gc root

系統保留對象,每個對象都是一個gc root

類對象

1、基本信息:

  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的變量類型

2、說明:

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

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

實例對象

1、基本信息:

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

2、說明:

  1. 實例的值為實例對象的成員變量值,順序為當前類的變量值,順序為類對象基本信息中第11條中的順序,然后是父類的變量值
  2. 變量的值基本類型都有默認值,引用類型默認值為0,占用字節數(見類對象基本信息的第9條)

基本類型數組

1、基本信息:

  1. identifierSize個byte的數組對象id
  2. 4個byte的棧序列號
  3. 4個byte的數組長度
  4. 1個byte的元素類型
  5. 元素的值列表

2、說明:

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

對象數組

1、基本信息:

  1. identifierSize個byte的數組對象id
  2. 4個byte的棧序列號
  3. 4個byte的數組長度
  4. identifierSize個byte的元素類id
  5. 元素的值列表

內存分配

當一個線程啟動的時候,進程會去系統內存生成一個線程棧

每當發生一次方法調用,就會向棧中壓入一個棧楨,當方法調用完之后,棧楨會退出

在運行過程中,如果有對象的new操作的時候,進程會去堆區申請一塊內存

關于運行時內存的詳細情況,可以查找相關的資料

內存回收規則

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

對象回收規則包括

  1. 實例屬性被實例引用,只有當實例被回收了實例屬性才能被回收(只針對強引用)
  2. 類對象被實例引用,只有當一個類的所有實例都被回收了,類才能被回收
  3. 類對象的父類,classLoader對象,signer對象, protection domain對象被類引用,只有當類被回收了,這些才能被回收
  4. 局部變量(線程棧中)的作用域為一個大括號 
  1. public void test(){  
  2. Object a = new Object();//obj 1  
  3. Object b = new Object();//obj 2  
  4.  
  5. Object c = new Object();//obj 3  
  6. a = null;//obj 1可以被回收了  
  7. }//obj 3可以回收了  
  8. }//obj 2可以被回收了 

 

分析工具簡介

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

  1. jhat xxx.dump 

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

一般使用方法

1、瀏覽器打開http:/127.0.0.1:7000

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

2、點擊頁面的堆內存統計

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

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

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

4、點擊references summary by type

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

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

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

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2023-11-19 23:29:22

Heap DumpJava

2017-09-26 16:32:03

JavaGC分析

2020-10-19 09:09:46

Class文件加載過程

2020-11-17 09:55:48

Java

2016-12-28 19:50:33

大數據數據采集大數據平臺

2017-09-20 08:48:09

JVM內存結構

2016-11-09 15:23:44

2018-09-03 13:14:41

小程序APP微信

2017-09-22 15:15:23

jvm調優命令

2017-11-01 15:38:54

jvm知識點總覽

2017-10-17 14:02:30

jvm調優工具

2018-02-06 09:25:35

數據分析分析方法分析工具

2021-10-11 19:54:04

JVM面試虛擬機

2017-02-07 16:16:02

2019-10-24 10:28:06

2012-01-11 11:28:00

JavaJVM

2024-06-04 12:32:42

.NET開發內存泄漏

2020-07-21 14:19:18

JVM編程語言

2017-07-06 13:18:37

深度學習應用問題及趨勢

2021-11-21 23:03:38

jvm調優虛擬機
點贊
收藏

51CTO技術棧公眾號

日韩一区二区高清视频| 国产精品久久久久999| 东京热av一区| 偷拍视频一区二区三区| 国产精品久久三| 成人羞羞视频免费| 日日噜噜噜噜人人爽亚洲精品| 成人激情开心网| 日韩精品一区二区三区视频 | 水莓100在线视频| 三级一区在线视频先锋| 久久天天躁狠狠躁夜夜躁2014| 女性生殖扒开酷刑vk| 最新日韩一区| 精品久久久久久电影| 伊人久久大香线蕉av一区| 欧美少妇bbw| 久热成人在线视频| 91黑丝高跟在线| 日韩一级片大全| 亚洲婷婷丁香| 欧美刺激脚交jootjob| 免费男同深夜夜行网站 | 国产欧美日韩免费观看| 日韩一区二区三区在线观看| 欧美激情成人网| 17videosex性欧美| 亚洲少妇中出一区| 日韩免费中文专区| 天堂在线观看免费视频| 国产精品一区不卡| 91欧美精品午夜性色福利在线 | 国产丝袜在线播放| 亚洲人成网站精品片在线观看| 欧美xxxx黑人又粗又长密月| 丁香花免费高清完整在线播放 | 91精品啪在线观看麻豆免费| 草莓视频18免费观看| 一区二区三区四区五区精品视频 | 亚洲午夜女主播在线直播| 久久久久久久久久影视| 国产95亚洲| 欧美精品第1页| 黑人粗进入欧美aaaaa| 九色porny自拍视频在线观看| 亚洲综合免费观看高清完整版在线| 亚洲精品一卡二卡三卡四卡| 久久这里精品| 久久久久国产一区二区三区四区 | 成人羞羞视频播放网站| 亚洲欧洲日本专区| 中文字幕一区二区三区人妻| 欧美性生活一级片| 日韩电影免费观看在线观看| 扒开伸进免费视频| 极品束缚调教一区二区网站| 日韩免费高清视频| 国产精品一区二区在线免费观看| 亚洲精品一区二区三区中文字幕| 7777精品伊人久久久大香线蕉的| 国产探花在线看| 亚洲视频自拍| 日韩欧美国产一区在线观看| 丰满饥渴老女人hd| 丁香婷婷成人| 亚洲精品国精品久久99热| 国产老熟女伦老熟妇露脸| 亚洲精品亚洲人成在线| 亚洲精品日韩欧美| 日本少妇xxxxx| 91综合网人人| 欧美高清自拍一区| 国产精品老女人| 日韩高清一区在线| 国产剧情日韩欧美| 精品人妻伦一二三区久久| 国产成a人亚洲| 国产亚洲一区二区三区在线播放| 天堂在线中文网| 亚洲国产成人午夜在线一区| 性欧美18一19内谢| 美女尤物在线视频| 欧美视频精品一区| 成人免费在线观看视频网站| 国产亚洲高清一区| 精品对白一区国产伦| 玖玖爱在线观看| 久久一区二区三区喷水| 欧美激情xxxx性bbbb| 亚洲熟女综合色一区二区三区| 视频在线观看国产精品| 亚洲一区二区久久久久久| 欧美一级视频免费| 欧美国产97人人爽人人喊| 黄色网zhan| 国产伦理精品| 欧美日韩mp4| 亚洲中文字幕无码一区| 精品久久网站| 欧美激情免费视频| 成人免费视频国产免费| 国产精品一级黄| 欧美一级片免费观看| av在线免费网站| 色综合久久综合中文综合网| 91亚洲一区二区| 蜜桃精品噜噜噜成人av| 欧美精品在线免费| 国产精品自拍第一页| 国产精品99久久久久久似苏梦涵| 欧美日韩一区二区视频在线观看 | 2025国产精品视频| 国产精品毛片一区二区在线看舒淇| 成人免费电影视频| 最新av在线免费观看| 蜜臀国产一区| 亚洲成人久久电影| 国产精品视频一区二区在线观看| 亚洲综合社区| 国产高清一区视频| 快射视频在线观看| 欧美伊人久久久久久久久影院 | 欧美激情视频给我| 91国产免费视频| 国产色综合一区| 男人操女人逼免费视频| 视频一区日韩精品| 精品国偷自产在线视频| 成年人视频免费| 99国产精品一区| 野外做受又硬又粗又大视频√| 91精品在线免费视频| 一区二区国产精品视频| 中文在线第一页| 波多野结衣中文一区| 国产一级大片免费看| 色综合视频一区二区三区日韩| 亚洲天堂网站在线观看视频| 亚洲精品午夜国产va久久成人| 国产成人午夜99999| 熟妇熟女乱妇乱女网站| 国产精品亚洲成在人线| 国产一区二区三区视频免费| 天码人妻一区二区三区在线看| 成人av在线资源网| 岛国大片在线播放| 国产主播性色av福利精品一区| 欧美成人合集magnet| a级片在线播放| 亚洲男人的天堂一区二区| 国产精欧美一区二区三区白种人| jizzjizz欧美69巨大| 国产精品久久久久国产a级| 极品白浆推特女神在线观看| 欧美综合天天夜夜久久| 无码人妻丰满熟妇啪啪欧美| 美女视频免费一区| 亚洲图片都市激情| 亚洲福利影视| 欧美精品在线免费观看| 性猛交富婆╳xxx乱大交天津| 玉米视频成人免费看| 少妇性l交大片7724com| 亚洲h色精品| 91久久久一线二线三线品牌| 污视频网站在线免费| 精品欧美一区二区在线观看| 国产精品自拍视频一区| 2021中文字幕一区亚洲| 欧美伦理片在线看| 99久久综合| 69堂成人精品视频免费| аⅴ资源天堂资源库在线| 日韩精品免费在线视频观看| 成年人晚上看的视频| 亚洲欧洲三级电影| 日韩高清一二三区| 亚洲综合不卡| 艳母动漫在线免费观看| 风间由美性色一区二区三区四区| 97在线观看视频| 国产精品一级伦理| 91精品福利在线一区二区三区| 妺妺窝人体色www聚色窝仙踪| 99久久99久久综合| 91小视频网站| 亚洲网址在线| 亚洲二区三区四区| 亚洲一区二区三区日本久久九| 欧美一性一乱一交一视频| 在线观看免费版| 日韩精品综合一本久道在线视频| 日韩三级视频在线| 欧美国产日韩a欧美在线观看| 网站在线你懂的| 亚洲专区免费| 日本成人在线不卡| 精品国产中文字幕第一页 | www.桃色av嫩草.com| 好吊成人免视频| 国产探花在线播放| 久久精品夜夜夜夜久久| 成年人看片网站| 久久三级视频| 国产精彩视频一区二区| 欧美亚洲国产精品久久| 国产精品免费一区二区三区| 国产欧美自拍| 78色国产精品| 羞羞视频在线观看免费| 中文字幕欧美日韩va免费视频| 亚洲美女性生活| 欧美日韩第一区日日骚| 国产免费观看av| 亚洲精品免费电影| 成人精品一二三区| 久久久综合九色合综国产精品| 污污视频在线免费| 日韩国产成人精品| 日本成年人网址| 欧美日韩亚洲三区| 在线无限看免费粉色视频| 精品国产91| 久久久久久精| 给我免费播放日韩视频| 91中文字幕在线观看| 欧美大片1688网站| 欧美一区视频在线| 国产精品13p| 欧美国产日韩中文字幕在线| 黄网站app在线观看| 亚洲视频在线观看免费| 亚洲 欧美 精品| 精品日韩成人av| 风流老熟女一区二区三区| 日韩视频免费观看高清完整版在线观看| 最新黄色网址在线观看| 日韩欧美在线视频观看| 日本视频免费在线| 亚洲国产精品自拍| 欧美丰满艳妇bbwbbw| 亚洲人成伊人成综合网小说| 国产精品国产三级国产传播| 国产精品欧美极品| 国产一级淫片久久久片a级| 国产亚洲欧美日韩在线一区| 欧洲美一区二区三区亚洲| 91毛片在线观看| 国产又粗又猛又爽视频| 国产日韩欧美一区二区三区乱码| 国产免费看av| 国产日产欧美一区二区三区| 性欧美13一14内谢| 日本一区二区三区视频视频| 阿v天堂2014| 国产精品久久久久aaaa樱花| 国产又粗又猛又爽又黄的视频小说 | 国产精品私拍pans大尺度在线| av在线播放一区| 国产精品一区二区3区| 亚洲日日夜夜| 99三级在线| 玖玖玖免费嫩草在线影院一区| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 成人黄色av网| 中文字幕日韩高清在线| 国产在线视频欧美一区二区三区| 日韩欧美中文字幕电影| 欧美在线播放一区| 日韩毛片视频| 久久久99精品视频| 日韩视频中文| 国产黄色特级片| 久久99精品久久久久久久久久久久| 国产精欧美一区二区三区白种人| 国产91在线看| 亚洲天堂视频一区| 亚洲欧洲精品天堂一级| 538精品在线观看| 污片在线观看一区二区| 亚洲av无码精品一区二区| 欧美另类videos死尸| 亚洲黄色在线观看视频| 亚洲欧美日韩爽爽影院| 麻豆传媒在线观看| 亚洲91精品在线| 91欧美精品| 国产传媒一区二区| 精品视频99| 国产乱子伦精品无码专区| 老牛国产精品一区的观看方式| 中文字幕久久av| 91日韩在线专区| 中国一级片在线观看| 精品色蜜蜜精品视频在线观看| 中文字幕a级片| 亚洲激情视频在线观看| 在线观看h片| 97久久精品国产| 亚洲久草在线| 久久久免费看| 欧美福利网址| 九九热在线免费| 成人黄色一级视频| 国产精品免费在线视频| 香蕉成人啪国产精品视频综合网| 伊人久久中文字幕| 亚洲国内精品在线| 成人在线直播| 国产精品pans私拍| 国产丝袜一区| 亚洲小说欧美另类激情| 日韩vs国产vs欧美| 国产伦精品一区二区免费| 中文字幕亚洲电影| 中文在线免费观看| 亚洲精品国产精品国自产观看浪潮| 美女写真理伦片在线看| 国产精品99久久99久久久二8| 高清精品xnxxcom| 精品视频在线观看一区二区| 日韩不卡一二三区| 国产毛片久久久久久久| 午夜亚洲福利老司机| 国内老熟妇对白hdxxxx| 久久精品国产亚洲精品| 国产91欧美| 亚洲国产精品视频一区| 可以看av的网站久久看| 新91视频在线观看| 黑人巨大精品欧美一区二区| 天堂中文在线官网| 久久久久久尹人网香蕉| 91精品久久久久久综合五月天| 好色先生视频污| 精品系列免费在线观看| 自拍偷拍你懂的| 欧美日韩www| 美女免费久久| 亚洲xxxx在线| 欧美三区视频| 91精品啪在线观看国产| 亚洲高清在线精品| 国产刺激高潮av| 97精品视频在线播放| 国产精伦一区二区三区| 九色自拍视频在线观看| 99久久精品国产麻豆演员表| 亚洲精品男人天堂| 亚洲精品午夜精品| 主播大秀视频在线观看一区二区| 日韩影院一区| 久久91精品久久久久久秒播 | 亚洲高清免费视频| 天天综合天天综合| 欧美亚洲一级片| 精品国产一区二区三区四区 | 欧美视频在线观看网站| av亚洲精华国产精华精华| 中文字幕在线观看视频网站| 亚洲精品自在久久| 日韩黄色三级| 日日噜噜夜夜狠狠久久丁香五月| 国产伦理精品不卡| 麻豆国产尤物av尤物在线观看| 欧美日韩免费看| 国内精品在线视频| 国产精品自拍偷拍| 99久久久久| 亚洲欧美日韩综合网| 国产精品国产三级国产a| 无码视频一区二区三区| 日韩最新中文字幕电影免费看| 九九热这里有精品| 毛片av在线播放| 91麻豆高清视频| 91精品国产乱码久久久| 欧美精品免费看| 视频国产一区| 91日韩精品视频| 精品国产户外野外| 免费黄色片在线观看| 91免费的视频在线播放| 亚洲第一黄网| aaaa黄色片| 欧美在线看片a免费观看| 福利在线午夜| 91九色在线观看| 免费看黄裸体一级大秀欧美| 欧美性x x x| 亚洲第一天堂av| 欧美综合影院| www.xxx麻豆| 国产精品二三区| 亚洲国产www| 国产精品一区二区久久久久| 欧美午夜在线视频| 日本免费www| 欧美tk—视频vk| 自拍偷拍亚洲|