【Android Linux内存及性能优化】(十) 进程冷启动和热启动的区别

【Android Linux内存及性能优化】十 进程冷启动和热启动的区别

本文接着
【Android Linux内存及性能优化】(一) 进程内存的优化 - 堆段
【Android Linux内存及性能优化】(二) 进程内存的优化 - 栈段 - 环境变量 - ELF
【Android Linux内存及性能优化】(三) 进程内存的优化 - ELF执行文件的 数据段-代码段
【Android Linux内存及性能优化】(四) 进程内存的优化 - 动态库- 静态库
【Android Linux内存及性能优化】(五) 进程内存的优化 - 线程
【Android Linux内存及性能优化】(六) 系统内存的优化
【Android Linux内存及性能优化】(七) 程序内存泄漏检查工具
【Android Linux内存及性能优化】(八) 系统性能分析工具
【Android Linux内存及性能优化】(九) 进程启动速度优化篇

四、进程冷启动和热启动的区别

很多个会发现,在程序第一次启动(冷启动)退出后,接下来程序启动(热启动)速度明显要比第一次启动快,这是为什么呢?

其实这和Linux 操作系统的内存 Cache 机制有关。

在程序第一次启动、退学出后,进程虽然被销毁了,但是进程代码段所占用的物理内存并没有被销毁,
而是被 LINUX 缓存起来了,保存在Cache 中。

这样当程序再次被启动时,在进程运行过程中,指令不必再从Flash 中读取到内存中,而是直接使用LInux 内核Cache 缓存的代码,
这样减少了在程序启动过程中所产生的page fault ,从而加快了进程的启动速度。

因此,进程冷启动和热启动速度上的差别,主要在于启动进程中其所动行到的进程和动态库的代码段所产生的page-fault 的多少,这与代码段的大小有关,也与该动态库是否被其他进程加载并使用有关。


在进程启动过程中:

  • (1)进程冷启动时,如果运行的指令相对较多,则出现的page fault 会较多,影响进程的启动速度。
    这时,要高度关注代码中所用到的只读的大数组,他们在代码段的.rodata 节,如果启动过程中要用这些数据较多,
    则会产生较多的page fault 而降低进程的启动速度。

  • (2)进程所依赖的某些动态库可能已经被 一些守护进程所加载,其代码段已经在内存中,故这种动态库对进程的冷启和热起的影响不大。

  • (3)某些动态库只是被该进程所加载,那么在冷启动之前,这个动态库的代码不会被 加载到内存,故这些动态库的代码如果在进程启动过程中用到,则会产生page fault 影响进程的启动速度。 对于这类动态库,可以考虑将其改为静态库,减少加载动态库的数量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"小夜猫&小懒虫&小财迷"的男人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值