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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

char类型是多少 mat_这轮面试,居然只有20%的人了解 MAT 神器

發布時間:2024/9/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 char类型是多少 mat_这轮面试,居然只有20%的人了解 MAT 神器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MAT是eclipse中的一個插件,不過也提供了獨立的版本,在IDEA風靡的今天,建議直接使用獨立版本,官網下載地址

http://www.eclipse.org/mat/downloads.php

根據操作系統版本下載最新的MAT

MAT配置

找到MemoryAnalyzer.ini文件,該文件里面有個Xmx參數,該參數表示最大內存占用量,默認為1024m,根據堆轉儲文件大小修改該參數即可。

獲取堆轉儲文件

1、如果想主動獲取,可以使用jamp命令,對于部署到服務器上的程序可以采用這種方式,獲取堆轉儲文件后scp到本地,然后本地分析。jmap?-dump:format=b,file=?

2、如果想在發生內存溢出的時候自動dump,需要添加下面參數-XX:+HeapDumpOnOutOfMemoryError

MAT使用

打開MAT之后,加載dump文件,顯示下面的界面。

一般用到比較多的2個功能 1、Histogram 2、Leak Suspects

Histogram

這個功能主要是查看類和對象關系,對象和對象之間的關系,用來定位哪些對象在FGC之后還活著,哪些對象占大部分內存。

1、點開Histogram,可列出每一個類的實例數,支持正則表達式查找,也可以計算出該類所有對象的retained size。

Shallow Heap就是對象本身占用內存的大小,不包含其引用的對象內存,實際分析中作用不大。常規對象(非數組)的ShallowSize由其成員變量的數量和類型決定。數組的shallow size有數組元素的類型(對象類型、基本類型)和數組長度決定。對象成員都是些引用,真正的內存都在堆上,看起來是一堆原生的byte[], char[], int[],對象本身的內存都很小。

Retained Heap值的計算方式是將Retained Set(當該對象被回收時那些將被GC回收的對象集合)中的所有對象大小疊加。或者說,因為X被釋放,導致其它所有被釋放對象(包括被遞歸釋放的)所占的heap大小。

Retained Heap例子: 一個ArrayList對象持有100個對象,每一個占用16 bytes,如果這個list對象被回收,那么其中100個對象也可以被回收,可以回收16*100 + X的內存,X代表ArrayList的shallow大小。

所以,RetainedHeap可以更精確的反映一個對象實際占用的大小。

2、選擇一個Class,右鍵選擇List objects > with incoming references

在新頁面會顯示通過這個class創建的對象信息

3、選擇一個對象,右鍵選擇Path to GC Roots > **,通常在排查內存泄漏的時候,我們會選擇exclude all phantom/weak/soft etc.references, 意思是查看排除虛引用/弱引用/軟引用等的引用鏈,因為被虛引用/弱引用/軟引用的對象可以直接被GC給回收,我們要看的就是某個對象否還存在Strong 引用鏈(在導出HeapDump之前要手動出發GC來保證),如果有,則說明存在內存泄漏,然后再去排查具體引用。

這時會拿到GC Roots到該對象的路徑,通過對象之間的引用,可以清楚的看出這個對象沒有被回收的原因,然后再去定位問題。

假如說上面對象此時本來應該是被GC掉的,簡單的辦法就是將其中的某處置為null或者remove掉,使其到GC Root無路徑可達,處于不可觸及狀態,垃圾回收器就可以回收了。

Leak Suspects

Leak Suspects 界面提示可能存在內存的泄露。

然后接著,是問題一的描述,列出了一些比較大的實例。

點擊Details可以看到細節信息

點開Details進入詳情頁面,在詳情頁面Shortest Paths To the Accumulation Point表示GC root到內存消耗聚集點的最短路徑,如果某個內存消耗聚集點有路徑到達GC root,則該內存消耗聚集點不會被當做垃圾被回收。

內存快照對比

為了有效的找出內存泄露的對象,一般會獲取兩個堆轉儲文件(先dump一個,隔段時間再dump一個),并同時打開兩個dump文件。

打開其中一個Histogram,然后點擊下面按鈕。

選擇另外一個需要對比的dump文件

通過對比結果可以方便的看出對象的變化情況,并快速定位問題。

總結

以上是生活随笔為你收集整理的char类型是多少 mat_这轮面试,居然只有20%的人了解 MAT 神器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。