一、jmap找出占用記憶體較大的執行個體
先給個示例代碼:
List中放了1w個Person對象的執行個體,先把這段程式跑起來
javac OOMTest.java
java OOMTest
然後再開一個視窗,jps -l 找出該程式的pid

然後執行 jmap -histo:live 7320 (注:如果輸出内容太多,隻想看排名前10的,可以加 | head -10)
輸出結果,會按記憶體使用量,從大到小依次把對象的實際個數,占用記憶體數量(位元組數)列印出來,最後還會輸出彙總資訊
以上面的示例來說,OOMTest$Person這個類的執行個體數為10000個,總共占用240000位元組(注:即每個執行個體24位元組),這個程式總占用記憶體數為725464位元組,約:0.69M。
另外還有一些[C,[B這類class name,大概意思為:
[C is a char[]
[S is a short[]
[I is a int[]
[B is a byte[]
[[I is a int[][]
[C對象往往跟String有關,String其内部使用final char[]數組來儲存資料的
constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass
與Classloader相關,常駐與Perm區。
二、