Java內存模型是描述Java程序中各變量(實例域、靜態域和數組元素)之間的關系,以及在實際計算機系統中將變量存儲到內存和從內存取出變量這樣的低層細節。
在Java虛擬機中,內存分為三個代:新生代(New)、老生代(Old)、永久代(Perm);
- 新生代New:新建的對象都存放這里
- 老生代Old:存放從新生代New中遷移過來的生命周期較久的對象。新生代New和老生代Old共同組成了堆內存。
- 永久代Perm:是非堆內存的組成部分。主要存放加載的Class類級對象如class本身,method,field等等。
【jvm內存占用過高分析】
1.top >> 觀察占用CPU或者MEN(內存)使用情況最高的進程,記錄PID;
2.top -p PID >> 觀察該PID對應進程的占用情況,
shift + h >> 開啟線程顯示,觀察CPU/Men占用較高的線程有哪些,記錄對應TID;
3.jstack PID > jstack.txt >> 查看該線程的堆棧信息
4.printf "%x\n" TID >> 將線程對應PID轉為 16進制數(TID16);
5.cat jstack.txt | grep TID16 >> 查看當前占用內存高的線程具體在做什么操作,分析原因
6.jmap -histo:live PID >> 查看當前堆內存中存在哪些存活對象
7. jstat -gcutil PID 1000 3 >> 查看gc情況