用简单通俗的话来记录自己对架构的理解
1.内存监控
经常有线上用户反馈应用卡顿,而为了判断是否是内存超过了85%的最大限制,GC变得更加频繁,容易造成OOM和卡顿,所以,做了内存快照,也就是每5分钟进行内存快照一次。
(1).方案
用户在前台时,每5分钟采集一次PSS等进行内存快照。
(2).计算指标
(a)触顶率:可以反映 Java 内存的使用情况,如果超过 85% 最大堆限制,GC 会变得更加频繁,容易造成 OOM 和卡顿。
Rumtime类:
//其中是否触顶可以通过下面的方法计算得到
long javaMax = runtime.maxMemory();l
ong javaTotal = runtime.totalMemory();
long javaUsed = javaTotal‐runtime.freeMemory();
// Java 内存使用超过最大限制的 85%
float proportion = (float) javaUsed/javaMax
(b)GC监控
Debug类
android6.0之前:
//内存分配的次数和大小,以及 GC 发起次数等信息
long allocCount = Debug.getGlobalAllocCount();
long allocSize = Debug.getGlobalAllocSize();
long gcCount = Debug.getGlobalGcInvocationCount();
android6.0之后:
// 运行的 GC 次数
Debug.getRuntimeStat("art.gc.gc‐count");
// GC 使用的总耗时,单位是毫秒
Debug.getRuntimeStat("art.gc.gc‐time");
// 阻塞式 GC 的次数
Debug.getRuntimeStat("art.gc.blocking‐gc‐count");
// 阻塞式 GC 的总耗时
Debug.getRuntimeStat("art.gc.blocking‐gc‐time");
2.内存优化
(1).设备分级
if (year >= 2013) {
// Do advanced animation
} elseif (year>=2010){
// Do simple animation
} else {
// Phone too simple,don't do any animations
}
5.站在巨人肩膀
(1)android内存优化经典
https://www.androidperformance.com/2015/04/11/AndroidMemory-Open-Bitmap-Object-In-MAT/
(2)内存优化
https://blog.youkuaiyun.com/qq_38366777/article/details/109842583