KOOM原理
一.解決GC卡頓
為什么LeakCanary需要主動觸發GC呢?LeakCanary監控泄漏利用了弱引用的特性,為Activity創建弱引用,當Activity對象變成弱可達時(沒有強引用),弱引用會被加入到引用隊列中,通過在Activity.onDestroy()后連續觸發兩次GC,并檢查引用隊列,可以判定Activity是否發生了泄漏。但頻繁的GC會造成用戶可感知的卡頓,為解決這一問題,我們設計了全新的監控模塊,通過無性能損耗的內存閾值監控來觸發鏡像采集,具體策略如下:
具體策略如下:
- Java堆內存突破閾值觸發采集 - 90%
- Java堆上漲速度突破閾值觸發采集 - 兩次檢測時間間隔內增加350M直接dump
- 如何獲取堆信息通過Runtime.getRuntime()獲取 javaHeap.max = Runtime.getRuntime().maxMemory() javaHeap.total = Runtime.getRuntime().totalMemory() javaHeap.free = Runtime.getRuntime().freeMemory() javaHeap.used = javaHeap.total - javaHeap.free javaHeap.rate = 1.0f * javaHeap.used / javaHeap.max
- 處于高位heapThreshold,并且一直處于高位降的不明顯heapThreshold取值如下maxMem >= 512 - 10 -> 0.8fmaxMem
總結
- 上一篇: 186Echarts - 日历坐标系(C
- 下一篇: icomoon字体图标显示