查看運行時某個java對象占用JVM大小及通過idea查看java的內存占用情況


一、如果想看運行時某個java對象占用JVM內存大小,可以先將對象轉換成字節類型,然后計算:

List<BizGroupRelatedEventInfo> bizGroupRelatedEventInfos = bizEventVersionMapper.selectRelatedEventInfoByGroupIdsAndType(bizSdkGroupIds,
GroupPlatformType.SDK.getType());
System.out.println("bizGroupRelatedEventInfos集合內容轉換成字符串:" + Arrays.toString(bizGroupRelatedEventInfos.toArray()));
System.out.println("bizGroupRelatedEventInfos集合大小:" + (Arrays.toString(bizGroupRelatedEventInfos.toArray()).getBytes().length/1024) + "KB");
打印出的字節數值,即為占用的JVM內存大小,可以通過除以1024進行單位轉換

二、通過dump出內存信息到本地文件,並將文件解析通過瀏覽器訪問:

1,打開idea的命令行窗口:點擊底部選項欄中的“Terminal",即可切換到命令行窗口

 

2,在命令行中輸入:jps,即可查看當前已啟動的進程和對應的PID,如下

E:\CompanyProject\dongjian-ms-internal>jps
1536 RemoteMavenServer
12164 Launcher
12996 DongjianMsApplication
3828
5868 Jps
因為當前idea運行的項目是DongjianMsApplication(程序入口main方法所在類的類名),所以對就的PID就是12996

3,執行命令:jmap -dump:format=b,file=heap.bin <pid> 

E:\CompanyProject\dongjian-ms-internal>jmap -dump:format=b,file=heap.bin 12996
Dumping heap to E:\CompanyProject\dongjian-ms-internal\heap.bin ...
Heap dump file created
jmap 能查看jvm內存中,對象占用內存的情況,還提供非常方便的命令將jvm的內存信息導出的文件。

format=b是通過二進制的意思,-dump:format=b,file=heap.bin意思是:把內存結構全部dump到二進制文件heap.bin中。

4,執行命令:jhat -J-Xmx512m heap.bin   ,(ha指IBM的HeapAnalyzer)

E:\CompanyProject\dongjian-ms-internal>jhat -J-Xmx512m heap.bin
Reading from heap.bin...
Dump file created Tue Dec 11 10:37:54 CST 2018
Snapshot read, resolving...
Resolving 1630228 objects...
Chasing references, expect 326 dots..............................................................................................................................................................................
........................................................................................................................................................
Eliminating duplicate references.................................................................................................................................................................................
.....................................................................................................................................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

就可以將我們剛剛使用jmap導出的內存信息交給jhat解析了。默認的情況下,它會監聽7000端口。我在本機的地址就是,http://localhost:7000/。

    訪問http://localhost:7000/histo/,大致可以看到一下的畫面,這里列出對象,對象實例數量、總占用內存大小。點擊進去之后可以看到“誰引用了這個對象,這個對象又引用了哪個”這些信息。不過因為展示的信息非常多,並沒有想象中那樣清晰可見。


————————————————
版權聲明:本文為CSDN博主「未名who」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_2300688967/article/details/84951123


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM