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

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

软件运行内存限制,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运行阶段内存占用情况,为应用内存优化提供关键指标数据。

软件性能优化之内存优化相关推荐

  1. Android 系统性能优化(55)---Android 性能优化之内存优化

    Android 性能优化之内存优化 前言 Android App优化这个问题,我相信是Android开发者一个永恒的话题.本篇文章也不例外,也是来讲解一下Android内存优化.那么本篇文章有什么不同 ...

  2. App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)

    Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...

  3. Lua性能优化—Lua内存优化

    原文链接https://blog.uwa4d.com/archives/usparkle_luaperformance.html 这是侑虎科技第236篇原创文章,感谢作者舒航供稿,欢迎转发分享,未经作 ...

  4. Android优化之内存优化倒计时篇

    本文来自网易云社区 作者:聂雷震 本篇文章介绍的内容是如何在安卓手机上实现高效的倒计时效果,这个高效有两个标准:1.刷新频率足够高,让用户觉得这个倒计时的确是倒计时,而不是幻灯片:2.不能占用太多的内 ...

  5. MySQL高级 - 内存优化 - InnoDB内存优化

    InnoDB 内存优化 innodb用一块内存区做IO缓存池,该缓存池不仅用来缓存innodb的索引块,而且也用来缓存innodb的数据块. innodb_buffer_pool_size 该变量决定 ...

  6. MySQL高级 - 内存优化 - MyISAM内存优化

    MyISAM 内存优化 myisam存储引擎使用 key_buffer 缓存索引块,加速myisam索引的读写速度.对于myisam表的数据块,mysql没有特别的缓存机制,完全依赖于操作系统的IO缓 ...

  7. App性能优化之内存优化

    2019独角兽企业重金招聘Python工程师标准>>> 为什么要进行内存优化呢?其实我们可以反过来想.如果不进行内存优化会产生什么样的问题? App的运行是有内存限制的,超过限制会产 ...

  8. mysql 内存 优化_MySQL核心参数优化(内存优化)

    配置内存 内存组件介绍 Innodb缓冲池(占用物理内存80%) # 控制缓冲池的大小(10G) Innodb_buffer_pool_size # 划分缓冲池几个区域,如果是10G的话划分5个区域, ...

  9. 第八章 性能优化 之 内存优化(一)

    文章目录 (一)Android内存泄露 1.Java内存基础知识 1.1)JVM(java虚拟机:java程序运行环境)内存--栈.堆.方法区 1.2)垃圾回收机制 (1)什么是垃圾回收机制? (2) ...

  10. android—性能优化2—内存优化

    文章目录 性能优化: 工具: memory profiler LeakCanary arthook epic 库 java内存管理机制 java 内存回收机制 Android内存管理机制 Dalvik ...

最新文章

  1. 独家 | 手把手教你用Python的Prophet库进行时间序列预测
  2. [离散时间信号处理学习笔记] 8. z逆变换
  3. iOS基础-高级视图-UITableView--实例:app管理
  4. java设计模式(六)--观察者模式
  5. socket 编程入门教程(一)TCP server 端:7、接收与发送
  6. 使用预训练模型进行句对分类(Paddle、PyTorch)
  7. Percona XtraDB cluster--第一部分:XtraDB cluster安装 (Centos7)
  8. 世界公认的第一商人——成就犹太商人的15个信条
  9. 检测子字符串是否存在于字符串或者变量是否存在于数组中
  10. 多看系统下载_制冷系统压力检测有多重要?看了你就知道了
  11. Hive启动报错: Found class jline.Terminal, but interfac
  12. vm虚拟机开启蓝屏问题
  13. 关于actel FPGA下载的学习报告
  14. VSCode Markdown 插件
  15. Tools-06 WinDbg快速入门使用——查找蓝屏原因,解决蓝屏!
  16. 帆软报表更新到服务器控件展示不出来_报表工具软件FineReport常见问题与解答总结...
  17. 如何官方的发布通知(互亿无线)?
  18. vmware虚拟机安装win7_VMware虚拟机安装教程
  19. stm32 设置systick中断抢先式优先级
  20. 华为服务器pe安装系统教程视频教程,华为电脑重装windows7系统的方法

热门文章

  1. 小猫钓鱼游戏java实现
  2. 2021年如何有效地准备PMP考试?
  3. 假设检验一小些知识(单个正态总体均值的假设检验)
  4. 六、假设检验:使用Python进行两个正态总体均值的假设检验
  5. 中国全电动注塑机行业发展趋势及未来需求前景预测报告(2022-2027年)
  6. 阿里巴巴正式宣布5.4亿现金战略投资中国万网
  7. 利用微信JSSDK调用微信扫一扫功能
  8. 安全模式没有计算机图标不见了怎么办,退出安全模式后桌面图标不见了怎么办...
  9. 【考试】二阶段2201班考试答案(做错一概不负责)
  10. 计算机指令集类型,指令集分类 (CISC,RISC和VLIW等)