移动App性能测评与优化1.3 新问题的进一步挖掘

简介:

1.3 新问题的进一步挖掘

上一节介绍了内存测试的基本流程,讲述了如何发现并处理简单的内存问题。对于Dalvik Heap部分总结出了一些常见的问题模式,以及如何使用工具识别和处理这些常见的内存问题。

当简单问题不再是问题的时候,我们就会开始遇上一些奇怪问题了,类似于下面这些:

 

“我们这个版本引入了一个挺简单的库,内存就涨了2MB。”

“这些代码只是初始化了几个对象,还没有开始用呢。”

“我只是改了一行代码,没有创建新对象。”

“我一行代码都没改,怎么会涨呢?”

 

这次出现的问题就是这样一类问题,新版本的Dalvik Heap Pss内存出现了2MB左右的增长,但Dalvik Heap Alloc只增长了273KB,而从Dalvik Heap Free也能看出大部分增长的内存是处于空闲状态的。

对问题经过一段时间的观察,我们有以下几点发现:

经过较长时间待机后也没有被释放回系统。

有几处代码会导致内存增长,只要将这些代码屏蔽掉,内存使用情况就下降到正常水平。

这些代码分配的内存并不多,甚至有些地方是不需要分配内存的。

有些代码并不是这个版本新加入的,已经存在较长时间了。

使用裁剪功能的方法编译并分析内存后,基本可以确定是新加入代码消耗了内存,但并没有内存泄漏,代码经过审查也没有发现问题。

这个结果让我们陷入了困惑,常用的方法找不出问题,说明有更深层次的原因。接下来要从更底层的DVM虚拟机寻找问题。

相关文章
|
5月前
|
JSON Dart 安全
Flutter App混淆加固、保护与优化原理
Flutter App混淆加固、保护与优化原理
96 0
|
5月前
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
88 0
|
2月前
|
Web App开发 移动开发 前端开发
如何优化运行在webkit上的web app
如何优化运行在webkit上的web app
|
2月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
2月前
|
存储 开发框架 监控
【Azure Logic App】添加 Storage Account 来提升 Logic App 的性能
【Azure Logic App】添加 Storage Account 来提升 Logic App 的性能
|
4月前
|
ARouter IDE 开发工具
Android面试题之App的启动流程和启动速度优化
App启动流程概括: 当用户点击App图标,Launcher通过Binder IPC请求system_server启动Activity。system_server指示Zygote fork新进程,接着App进程向system_server申请启动Activity。经过Binder通信,Activity创建并回调生命周期方法。启动状态分为冷启动、温启动和热启动,其中冷启动耗时最长。优化技巧包括异步初始化、避免主线程I/O、类加载优化和简化布局。
63 3
Android面试题之App的启动流程和启动速度优化
|
4月前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
74 9
|
4月前
|
XML 监控 安全
Android App性能优化之卡顿监控和卡顿优化
本文探讨了Android应用的卡顿优化,重点在于布局优化。建议包括将耗时操作移到后台、使用ViewPager2实现懒加载、减少布局嵌套并利用merge标签、使用ViewStub减少资源消耗,以及通过Layout Inspector和GPU过度绘制检测来优化。推荐使用AsyncLayoutInflater异步加载布局,但需注意线程安全和不支持特性。卡顿监控方面,提到了通过Looper、ChoreographerHelper、adb命令及第三方工具如systrace和BlockCanary。总结了Choreographer基于掉帧计算和BlockCanary基于Looper监控的原理。
67 3
|
5月前
uni-app 171部分小细节优化
uni-app 171部分小细节优化
25 1
|
5月前
|
存储 缓存 算法
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
134 0
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
下一篇
无影云桌面