- 博客(19)
- 收藏
- 关注
原创 KOOM原理
1.解决GC卡顿为什么LeakCanary需要主动触发GC呢?LeakCanary监控泄漏利用了弱引用的特性,为Activity创建弱引用,当Activity对象变成弱可达时(没有强引用),弱引用会被加入到引用队列中,通过在Activity.onDestroy()后连续触发两次GC,并检查引用队列,可以判定Activity是否发生了泄漏。但频繁的GC会造成用户可感知的卡顿,为解决这一问题,我们设计了全新的监控模块,通过无性能损耗的内存阈值监控来触发镜像采集,具体策略如下:具体策略如下:Java
2021-11-20 19:44:49
2089
转载 Koom 解决hprof文件过大-源码解析
解决hprof文件过大Hprof文件通常比较大,分析OOM时遇到500M以上的hprof文件并不稀奇,文件的大小,与dump成功率、dump速度、上传成功率负相关,且大文件额外浪费用户大量的磁盘空间和流量。我们因此想到了对hprof进行裁剪,只保留分析OOM必须的数据,另外,裁剪还有数据脱敏的好处,只上传内存中类与对象的组织结构,并不上传真实的业务数据(诸如字符串、byte数组等含有具体数据的内容),保护用户隐私。开发镜像裁剪,有两个衡量指标:一是裁剪率,即在不影响问题分析的前提下,裁剪掉的内容要足够
2021-11-18 17:22:56
2997
转载 KOOM 解决Dump hprof冻结app原理
解决Dump hprof冻结appDump hprof是通过虚拟机提供的API dumpHprofData实现的,这个过程会**“冻结”**整个应用进程,造成数秒甚至数十秒内用户无法操作,这也是LeakCanary无法线上部署的最主要原因,如果能将这一过程优化至用户无感知,将会给OOM治理带来很大的想象空间。面对这样一个问题,我们将其拆解,自然而然产生2个疑问:1.为什么dumpHprofData会冻结app,虚拟机的实现原理是什么?2.这个过程能异步吗?我们来看dumpHprofData的虚拟
2021-11-18 16:42:44
1284
原创 koom koom-java-leak 源码分析
1.AnalysisExtraData.kt 包含原因,分析时间,当前页面信息class AnalysisExtraData { var reason: String? = null //reason原因 var usageSeconds: String? = null //时间 var currentPage: String? = null //当前页面}2.HeapReport上报的信息public class HeapReport { p
2021-11-07 17:34:05
665
原创 koom 源码分析之 koom-monitor-base
1.LoopMonitor开启单独线程每隔1s监听一次abstract class LoopMonitor<C> : Monitor<C>(), Callable<LoopMonitor.LoopState> { companion object { private const val DEFAULT_LOOP_INTERVAL = 1000L } //是否停止了 //https://www.jianshu.com/
2021-11-06 12:57:52
488
原创 matrix-gradle-plugin 方法前后插桩实现代码分析
1.gradle文件配置apply plugin: 'com.tencent.matrix-plugin'matrix { logLevel "D" trace { enable = true baseMethodMapFile = "${project.projectDir}/matrixTrace/methodMapping.txt" blackListFile = "${project.projectDir}/matrixTr
2021-10-29 12:07:24
1782
原创 Eventbus注解解析器源码分析
一.注解解析器配置1.annotationProcessor project(':eventbus-annotation-processor')2.annotationProcessorOptions { arguments = [eventBusIndex: 'org.greenrobot.eventbusperf.MyEventBusIndex'] }buildscript { repositories { ...
2021-10-19 23:38:17
1036
原创 Leakcanary - hprof分析库shark 源码分析
1.LeakNodeStatus 三个状态,没用到internal enum class LeakNodeStatus { NOT_LEAKING, LEAKING, UNKNOWN;}2.HeapAnalysisException 封装throwableclass HeapAnalysisException(cause: Throwable) : RuntimeException(cause) { override fun toString(): String {
2021-10-08 09:57:05
1921
原创 微信Android客户端的ANR监控方案
https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=2649288031&idx=1&sn=91c94e16460a4685a9c0c8e1b9c362a6&chksm=8334c9ddb44340cb66e6ce512ca41592fb483c148419737dbe21f9bbc2bfc2f872d1e54d1641&scene=178&cur_album_id=1884394569690103815
2021-08-06 23:00:03
3075
1
转载 微信Android客户端的卡顿监控方案
https://mp.weixin.qq.com/s/3dubi2GVW_rVFZZztCpsKg卡顿 UI线程不能够及时的进行渲染,导致UI的反馈不能按照用户的预期,连续、一致的呈现。ANR ANR是Google人为规定的概念,产生ANR的原因最多也只有四个。二、Looper Printer而大部分的主线程的操作最终都会执行到这个dispatchMessage方法中。为什么说是大部分?因为有些情况的卡顿,这种方案从原理上就无法监控到。下图是next方法简...
2021-08-05 23:18:54
498
原创 Android Matrix Resource-Canary 源码解析
1.ResourcePlugin init方法里创建执行activity泄漏检测的类ActivityRefWatcher,start方法里启动检测mWatcher.start();public class ResourcePlugin extends Plugin { private static final String TAG = "Matrix.ResourcePlugin"; //配置类 private final ResourceConfig mConfig;
2021-07-23 16:30:32
811
3
原创 Android Matrix之TraceCanary Wiki
一.怎么衡量流程性1.帧率 FPS游戏60FPS ,电影 FPS 25FPS ~ 30FPS,人眼 12FPSFPS 低并不意味着卡顿发生,而卡顿发生 FPS 一定不高。2.掉帧程度可以更直观地衡量卡顿16ms,如果一帧的准备时间超出这个值,则认为发生掉帧,假设每帧准备时间约 32ms,每次只掉一帧,那么 1 秒内实际只刷新 30 帧,即平均帧率只有 30FPS,但这时往往不会觉得是卡顿。反而如果出现某次严重掉帧(>300ms),那么这一次的变化,通常很容易感知到。所以界面的...
2021-07-15 16:42:19
561
原创 微信Android客户端的卡顿监控方案
1.TracePlugin 启动创建UIThreadMonitor,AppMethodBeat,AnrTracer,FrameTracer,EvilMethodTracer,StartupTracer //构造函数传入TraceConfig public TracePlugin(TraceConfig config) { this.traceConfig = config; } @Override public void init(Ap...
2021-07-14 22:05:57
1638
原创 PRIVACY POLICY of screenrecorder
PRIVACY POLICY of screenrecorderINTRODUCTIONWelcome!We values your privacy.CameraWe use Camera get picture when you want screenrecorder with other firend video.
2021-06-24 01:02:06
96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人