首页 文章 精选 留言 我的

精选列表

搜索[移动app],共10006篇文章
优秀的个人博客,低调大师

移动App性能测评与优化1.6 本章小结

1.6 本章小结 在这一章里,我们通过对几个案例的分析,基本了解了Android应用的各种内存组成,以及这些成分是如何被消耗的,也总结出了一些节约和优化内存的经验。在这一小节里我们把经验都列出来供读者参考。 内存的主要组成索引: Native Heap:Native代码分配的内存,虚拟机和Android框架本身也会分配 Dalvik Heap:Java代码分配的对象 Dalvik Other:类的数据结构和索引 so mmap:Native代码和常量 dex mmap:Java代码和常量 内存工具: Android Studio/Memory Monitor:观察Dalvik内存 dumpsys meminfo:观察整体内存 smaps:观察整体内存的详细组成 Eclipse Memory Analyzer:详细分析Dalvik内存 测试经验: MAT是探索

优秀的个人博客,低调大师

移动App性能测评与优化1.1 新手入门

1.1 新手入门 当软件实现了新功能后,准备发布版本前,往往需要进行一轮性能测试以确定没有性能问题,这类测试通常包括功能的流畅度、电量消耗和内存使用情况等。 由于内存组成具有复杂性,实际上并没有简单通用的方法就能够发现所有的内存问题。下面,我们会围绕一组案例展开,通过对案例的分析讲解各种内存测试的工具和方法。这些例子都是从真实的测试案例中提取的,经过加工后使得问题表现得更加明显。 接下来我们从一个最常见的内存泄漏开始,作为最典型的内存问题,类似的情况可能在无数应用的无数版本中出现过,而且还会不断地在新版本里出现。对于这样的问题,我们必须要准确识别出来。 在大部分应用中,经常会有一类功能是需要加载附加资源的,比如显示从网络下载的文本或图片。这类功能往往需要在内存中存放要使用的资源对象,退出该功能后,就需要将这些资源对象清空。如果忘了清理,或

优秀的个人博客,低调大师

移动App性能测评与优化1.2.4 新的问题

1.2.4 新的问题 经过上一轮的优化,在内存监视器里新版本的Heap内存表现已经比较好了,新功能只消耗了几万字节到几十万字节内存。但是要注意的是,Heap内存并不是应用的全部,我们在设置或其他管理工具里看到的应用内存大小是应用整个进程的内存使用量。也有可能出现Heap部分完全没有增长而其他部分增长的情况。 要观察进程的内存使用情况,就需要用到其他的观测工具,Android里最常用于观察进程内存的方法就是dumpsys meminfo <package name|pid>命令。 对我们的新版应用执行该命令,能够得到以下的输出结果: ** MEMINFO in pid 17481 [com.example] ** Shared Private Heap Heap

优秀的个人博客,低调大师

移动App性能测评与优化1.4.4 多进程应用

1.4.4 多进程应用 根据上一节中的描述,当一个进程结束后,它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担,共享库消耗的物理内存并不会减少。实际上,对于所有共享使用了这个库的应用,Pss内存都会有所增加。对于一般的进程,只是共享着zygote进程的Android框架等基础部分,而通常手机使用时的应用进程数达到几十个至上百个,所以某个进程结束后,其他进程内存增加的情况并不明显。 但对于多进程的应用来说,由于多个进程之间会共享很多内容,包括代码、资源、so库等,因此单个进程结束造成的影响就会比较明显。以有两个进程的应用为例,进程共享着部分内存,因此当一个进程不再需要这些内存时,就会出现如图1-18所示的场景。表现为一个进程的内存下降了,另一个进程的内存就会明显上升。 图1-18 两个共享内存进程的内存变化 由此可见,我们在统计

优秀的个人博客,低调大师

移动App性能测评与优化1.3.1 Dalvik Heap内部机制

1.3.1 Dalvik Heap内部机制 为了弄清楚为什么DVM占着内存不释放,我们阅读了DVM分配内存部分的代码。位置在Android源码的dalvik/vm/alloc下,约255KB。分析的主要流程如下: 1)DVM使用mmap系统调用从系统分配大块内存作为Java Heap。根据系统机制,如果分类的内存尚未真正使用,就不计入PrivateDirty和Pss。例如图1-8所示,Heap Size/Alloc很多,但大部分是共享的,实际使用的较少。所以反映到PrivateDirty/Pss里的内存并不多。 图1-8 共享内存较多的进程 2)新建对象之后,由于要向对应的地址写入数据,内核开始真正分配该地址对应的4KB物理内存页面。 Alloc.cpp中,从第176行起的代码如图1-9所示。 图1-9 DVM虚拟机分配内存的代码 3)运行

优秀的个人博客,低调大师

移动App性能测评与优化1.4.3 zygote共享内存机制

1.4.3 zygote共享内存机制 上一小节介绍了应用各部分内存的含义,读者对dumpsys meminfo输出的大部分数据都能够有所理解。但dumpsys meminfo工具还会输出Heap Size/Alloc/Free部分的数值。我们知道这些数值是Dalvik虚拟机统计的内存堆的使用量,但这些数值是如何对应到Pss内存上的?比如Heap Alloc和Heap Pss往往相差不远,那是不是可将其看做基本等同的呢?下面我们试图解释这几项数值之间的关系。 由于虚拟机运行时并不区分某个对象实例是Android框架共享的还是应用独有的,Heap Alloc统计的是由虚拟机分配的所有应用实例的内存,所以会将应用从zygote共享的部分也算进去,于是Heap Alloc值总是比实际物理内存使用值要大。 Heap Alloc虽然反映了Java代

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册