/ 前言 /
性能优化是一个老生常谈的问题,也一直是Android中高级攻城狮进阶和深入的方向。
在性能优化的各种问题中,内存泄漏一直占有较重要的地位。
内存泄漏的积累会造成内存溢出,进而导致程序崩溃,出现OOM问题。
针对这个问题,我们需要在上线前进行检测同时也要能够实现线上的监控。
/ 上线前:线下性能监控 /
Android Studio自身提供的MAT等工具分析内存泄漏比较耗时,因而诞生了LeakCanary——这也是现在寻找内存泄漏问题最常用的工具。
LeakCanary 这个工具非常简单,依赖 LeakCanary 库,可自动检测内存泄漏并通过通知报警,不用初始化。但是经过对它的深入分析之后,不难发现,简单的API后面藏着许多复杂的逻辑处理原理。
面试的时候,面试官也不会问“使用”相关的没有技术含量的东西,一般只会问原理,比如:
说一下LeakCanary检测内存泄漏的原理与基本流程?
LeakCanary是如何初始化的?
说一下LeakCanary是如何查找内存泄露的?
下面简单说一下 LeakCanary 的原理(面试必问,建议收藏):
监听 Activity 生命周期;
在 onDestroy 的时候,创建相应的 Refrence 和 RefrenceQueue,并启动后台进程去检测;
一定时间后,从 RefrenceQueue 读取,若读取不到相应 activity 的 Refrence,就有可能是泄露了,这个时候再触发 gc。一段时间后,再去读取,若在从 RefrenceQueue 还是读取不到相应 activity 的 refrence,可以断定是发生内存泄露了;
判定发生内存泄露之后,dump,分析 hprof 文件,找到泄露路径(使用 haha 库分析);
存储结果并使用通知提醒用户存在泄漏。
这里用一张图片来直观的描述 LeakCannary 的执行流程。
其中,比较重要的是如何确定是否发生内存泄露,而如何确定发生内存泄露最主要的原理是通过 Refrence 和 RefrenceQueue。
这里只做一个总体的介绍,详细具体的流程可以往下看。
/ 上线后:线上性能监控 /
LeakCanary 是为线下内存泄漏 debug 而准备的,但是在实际的工作中,只知道线下性能监控是远远不够的。
如下图:
错误发生在 b.xf 第五行,导致OOM的原因,到底是此处申请了太大的内存,还是其他地方申请了太多内存导致可用内存不足亦或者程序存在内存抖动问题,导致连续内存不足,我们不得而知。
这时候线上应用性能监控的重要性就体现出来了。
如果我们能够对应用上线后的各项性能进行监控,在出现问题时能提取监控数据,从而定位到存在性能问题的地方快速解决,这不香吗?
我们通过与抖音内部专家进行沟通知道,字节内部正在使用JVMTI进行线上内存监控,内存优化上,高级的JVMTI监控对象分配,然后形成日志传送到服务器端,这正是我们需要的线上监控内存的技术方案!
/ 性能监控详解 /
本次特邀腾讯课堂的 Alvin老师 和 Lance老师 用两节课的时间给大家详细的讲解这两个知识点。
Alvin老师:
前三星高级研发经理,国内首批Android底层技术导航人
专精领域:精通Android FrameWork源码及性能优化;三星手机Rom核心架构设计,专注NDK底层设计与开发。
Lance老师:
前爱奇艺高级工程师,某游戏公司主程
专精领域:主要对NDK、架构与性能优化拥有深入的理解及开发经验。
课程排期(7月13日-7月14日每晚八点)
7月13日:面试必问必知的内存监控SDK LeakCanary原理解析
1、如何有效的分析OOM问题?收集有效log?
2、LeakCanary是如何发现 内存泄漏的?
3、泄漏引用链追踪你需要学习一下了
4、OOM的克星LeakCanary源码解析
7月14日:抖音Matrix卡顿监控方案,函数自动埋点实践
1、应用上线,Bugly采集的异常堆栈真的能定位OOM问题?
2、Java黑科技JVMTI实现动态内存分配监控方案
3、Android高性能日志记录方案
4、JVMTI无法应用于线.上环境,抖音是如何解决的?
大家通过学习可以掌握
1、线上Release发布的版本对内存实时监控系统(基于JVMTI)的技术方案原理
2、线下Debug版本在开发阶段和测试阶段内存监控LeakCanary的技术原理分析
我相信,只要大家认真听完 Alvin 和 Lance 老师的课,跟着走一遍,就有勇气在简历上写下熟悉 Android 性能监控,精通APP性能调优与项目实战这些点。从此吊打所有向你提问线上性能监控的面试官,成为一个名副其实的面霸!
公众号渠道报名福利
赠送《Android360°全方面性能调优》手册。该手册一共有722页,四个章节,25个小点,不仅仅有详细的底层原理的解析,还有大厂性能优化探索与实践!
目录:
1、设计思想与代码质量优化
2、程序性能优化
启动速度与执行效率优化
布局检测与优化
内存优化
耗电优化
网络传输与数据储存优化
APK大小优化
3、开发效率优化
分布式版本控制系统Git
自动化构建系统Gradle
4、项目实战
启动速度
流畅度
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践
限时0.1元报名获取
文中资料免费赠给参加训练营的学员
加薇薇老师微信报名训练营
立即领取
(如遇扫码频繁受限,点击左下角的阅读原文)