软件性能优化之内存优化

一些外行人会问“软件为什么要进行内存优化?”。其实这个问题是很尴尬的。如果是内行人问这个问题,老板估计会让你搬砖“自行了断”。当然这个问题是没有一个准确的答案的,与其追问为什么要进行内存优化,不如我们换位思考。如果软件不进行内存优化会导致哪些问题的出现。这样想是不是更符合程序员的逻辑思维能力。

软件不进行内存优化会产生的问题

软件运行内存限制,OOM导致软件奔溃

这个应该都不能叫做问题了,软件奔溃对于程序员来讲称之为"事故"是不是一点都不过分,我们都知道Android中软件的运行是有内存限制的,不同的手机对于软件的运行内存有这不同的大小限制,有的是256M,有的是512M,所以说如果不进行内存控制和优化,一旦超出手机的运行内存限制就会产生OOM导致软件奔溃。

软件运行性能:流畅性、响应速度和用户体验会受到影响

这个其实很好理解了,如果说不进行内存优化,我们的软件在运行效率,事件响应速度,以及用户体验很方面会大打折扣,可能我们的软件最终就被我们的终端用户定义为“垃圾”,然后毫不犹豫的uninstall,然后就没有然后了。

如何查看手机对于软件运行内存大小的限制

每部手机对于软件的运行都是有内存限制的,可以通过一些命令和工具来具体查看每台手机对于软件的具体运行内存限制是多少,方便我们进行内存优化参考,安卓系统服务提供了响应的API可以获取到当前手机对于软件运行的内存限制。例如我们可以通过如下的方式获取当前手机对于软件运行内存的大小限制:

ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);int memoryClasss =  manager.getMemoryClass(); // 以M为单位int largeMemoryClass = manager.getLargeMemoryClass(); // 以M为单位,通过AndroidMainifest中进行配置,不建议使用

三、Android的内存管理方式

Android系统内存分配与回收方式

一个软件通常就是一个进程对应一个虚拟机,大家都知道Android系统底层是Linux系统,开发应用的框架是Java的。如下图所示,进入Linux系统中我们可以通过ps命令获取每个软件对应到Linux的进程ID。

可以通过dumpsys meminfo

的命令查看内存的heap分配情况,关注其中的一些重要信息有利于我们做内存优化分析。

Native Heap:主要是jni开发方式下的,C空间里的堆;

Dalvik Heap:虚拟机的堆;

Dalvik Other:虚拟机其他的使用情况;

Stack:堆栈的大小;

Ashmem:共享内存的大小;

Java Heap:Java堆的使用情况;

Native Heap:Native堆的使用情况;

如果觉得软件可能存在内存泄漏情况,主要是指软件在运行过程中有些对象总是释放不了而且越来越多,运行的时候可以观察一下Total占用会越来越多,这样的话就说明软件可能存在内存泄漏的情况。

GC只在Heap剩余空间不够时才发出垃圾回收,GC在Java里面是垃圾收集器的缩写,我们大家都知道在C或者C++开发中如果内存空间不够的话,需要手动去释放;但是Java里用的是懒人策略,所谓懒人策略就是指你不用的内存,不用的变量放在哪里就好了,系统有个GC专门收集这部分内存,到时候统一进行释放,关于Java的GC策略有好处也有不好处,好处比如说:在开发过程中不用特别关注内存释放情况,不好处就像上面说的GC只在Heap剩余空间不够时才发出垃圾回收机制。

GC触发时,所有的线程都是会被暂停,如果剩余空间不够,存在过多的内存垃圾,GC在处理时候会需要大量的时间,而且在处理的过程中所有的线程都会被暂停,极端的情况会产生内存抖动等现象影响用户使用。

四、软件内存监测工具友盟+U-APM

各位程序员的福音来了,友盟+U-APM具有内存分析功能,内存分析提供内线上OOM异常的监控与分析,帮助开发者及时发现与定位线上OOM问题。同时,提供APP运行阶段内存占用情况,为应用内存优化提供关键指标数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值