Java性能监控
目錄
- Jvm內存模型
- 程序計數器ProgramCounterRegister:
- 虛擬機:VMStack
- 本地方法:NativeStack
- 堆:Heap
- 堆
- 垃圾回收
- jconsole與jvisualvm
- jvisualvm能干什么
- 安裝插件方便查看gc
- 優化
- JVM分析&調優
Jvm內存模型
程序計數器ProgramCounterRegister:
記錄的是正在執行的虛擬機字節碼指令的地址,
此內存區域是唯一一個在JAVA虛擬機規范中沒有規定任何OutOfMemoryError的區
域
虛擬機:VMStack
描述的是JAVA方法執行的內存模型,每個方法在執行的時候都會創建一個棧幀,
用于存儲局部變量表,操作數棧,動態鏈接,方法接口等信息
局部變量表存儲了編譯期可知的各種基本數據類型、對象引用
線程請求的棧深度不夠會報StackOverflowError異常
棧動態擴展的容量不夠會報OutOfMemoryError異常
虛擬機棧是線程隔離的,即每個線程都有自己獨立的虛擬機棧
本地方法:NativeStack
本地方法棧類似于虛擬機棧,只不過本地方法棧使用的是本地方法
堆:Heap
幾乎所有的對象實例都在堆上分配內存
堆
所有的對象實例以及數組都要在堆上分配。堆是垃圾收集器管理的主要區域,也被稱為“GC
堆”;也是我們優化最多考慮的地方。
堆可以細分為:
- 新生代
- Eden空間
- FromSurvivor空間
- ToSurvivor空間
- 老年代
- 永久代/元空間
- Java8以前永久代,受jvm管理,java8以后元空間,直接使用物理內存。因此,
默認情況下,元空間的大小僅受本地內存限制。
- Java8以前永久代,受jvm管理,java8以后元空間,直接使用物理內存。因此,
垃圾回收
從Java8開始,HotSpot已經完全將永久代(PermanentGeneration)移除,取而代之的是一
個新的區域—元空間(MetaSpace)
jconsole與jvisualvm
Jdk的兩個小工具jconsole、jvisualvm(升級版的jconsole);通過命令行啟動,可監控本地和
遠程應用。遠程應用需要配置
jvisualvm能干什么
監控內存泄露,跟蹤垃圾回收,執行時內存、cpu分析,線程分析…
運行:正在運行的
休眠:sleep
等待:wait
駐留:線程池里面的空閑線程
監視:阻塞的線程,正在等待鎖
安裝插件方便查看gc
- Cmd啟動jvisualvm
- 工具->插件
優化
中間件越多,性能損失越大,大多都損失在網絡交互了;
業務:
- Db(MySQL優化)
- 模板的渲染速度(緩存)
- 靜態資源(動靜分離)
JVM分析&調優
jvm調優,調的是穩定,并不能帶給你性能的大幅提升。服務穩定的重要性就不用多說了,
保證服務的穩定,gc永遠會是Java程序員需要考慮的不穩定因素之一。復雜和高并發下的
服務,必須保證每次gc不會出現性能下降,各種性能指標不會出現波動,gc回收規律而且
干凈,找到合適的jvm設置。Fullgc最會影響性能,根據代碼問題,避免fullgc頻率。
可以適當調大年輕代容量,讓大對象可以在年輕代觸發yonggc,調整大對象在年輕代的回收頻
次,盡可能保證大對象在年輕代回收,減小老年代縮短回收時間;
總結
- 上一篇: 4个足球队打小组单循环
- 下一篇: 二叉树的前、中、后、层序遍历整理(Jav