不要通过终止进程的方式清理内存

本文讨论了为何通过终止进程来清理Android内存是不合适的,指出Android系统自身有内存管理机制,保证程序快速启动并保留数据。内存占用并不直接导致耗电,反而是反复清理内存更耗电。谷歌工程师也建议不要手动终止进程,应让系统自动管理。

通过终止进程来清理内存的方案是不合适的,理由如下:

1、 android 有自身的进程和内存管理机制,其设计规范是要保证程序尽可能快地启动,这就要求程序退出后仍然占用内存保存数据;

2、 android 的内存管理策略保证在新程序载入时有足够的内存,当内存不足时会自行关闭优先级低的进程来释放内存;

3、 进程数据长期缓存在内存,对于 android 来说不是缺陷,而是优势,它尽可能地确保程序的启动质量以提升用户体验,人们长期被强迫症困扰,一直误以为大量占用内存是低效的表现,这与人们长期使用桌面系统不无关系;

4、 我们的另一个误区是,占用内存耗电,其实不然!真正耗电的幕后推手是 CPU,反复清理内存需要CPU反复地工作,所以清理内存反而耗电;

 

网上一个形象的比喻:你在图书馆查资料,一种方案是把可能需要的资料全部从书架上取下来放到桌上,可能会有冗余,但不必经常去书架取书;另一种方案,书桌上只放当前正在查阅的资料,查完马上放回书架,这样虽然书桌上很干净,但你需要反复从书架上取书放书。这里书就好比内存,取书放书的动作好比 CPU 的工作。显然第一种方案更加高效和轻松。

 

一些靠谱的资料:

阐述为什么不需要终止进程来释放内存的原因http://android.nextapp.com/site/fx/doc/exit

 

两位谷歌工程师的建议:

Romain Guy :用户不要去做终止进程来释放内存的事,这与 android 的应用设计框架相悖,应该交由系统去做(这里的用户既是指使用 APP的用户,也是指APP本身或APP开发人员)https://groups.google.com/forum/#!topic/android-developers/G_D3pKnGLt0    http://stackoverflow.com/questions/2042222/close-application-and-launch-home-screen-on-android

 

Dianne Hackborn : 强烈反对使用 System.exit() 来终止程序,请不要如此设计你的 Android 应用 https://groups.google.com/forum/#!topic/android-developers/Y96KnN_6RqM

在Ubuntu系统中,当需要释放内存但又希望终止运行中的进程时,可以采取多种策略来优化内存使用并回收可用资源。以下是一些可行的方法: 1. **利用内核机制自动清理缓存** Linux 内核会根据当前系统的内存压力动态地回收用于文件系统缓存(cache)的内存[^1]。这意味着如果系统检测到内存紧张,它将优先释放那些最近未被访问的缓存页以供其他进程使用。这种行为是透明且自动发生的,并需要手动干预。 2. **手动清除特定类型的缓存** 如果希望主动减少缓存占用以腾出更多空闲内存,可以通过向 `/proc/sys/vm/drop_caches` 接口写入同的值来实现: - 写入 `1` 表示清空页面缓存(PageCache)。 - 写入 `2` 表示删除所有可回收的 inode 和 dentry 缓存。 - 写入 `3` 则表示同时执行上述两种操作。 示例命令如下: ```bash sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' ``` 此操作会影响正在运行的应用程序或其分配的私有内存区域,因此能够保证进程继续正常执行[^3]。 3. **调整 swappiness 参数** `swappiness` 是一个控制内核交换行为倾向性的参数,范围为 0 到 100,默认通常设为 60。数值越低,表明系统倾向于尽量保留物理内存中的数据而轻易换出至磁盘;反之则更积极地使用 swap 空间。通过降低该值可以帮助延迟或避免必要的内存交换过程,从而减轻对性能的影响。修改方法为: ```bash sysctl vm.swappiness=10 ``` 要使更改永久生效,请编辑 `/etc/sysctl.conf` 文件添加或更新相应行: ``` vm.swappiness = 10 ``` 4. **监控与分析内存使用情况** 使用工具如 `top`, `htop`, `free`, 或者 `vmstat` 等可以帮助识别哪些进程消耗了大量内存资源。对于发现的问题程序,应考虑优化代码逻辑、修复潜在泄漏点或者适当增加服务器硬件配置等方式从根本上解决问题而是仅仅依赖于临时性措施[^2]。 5. **优化应用程序设计** 对于长期存在的服务来说,确保它们正确管理自己的内存分配非常重要。例如,采用高效的算法结构、及时释放再使用的对象以及合理设置最大连接数限制等做法都有助于维持较低水平的内存占用率。 综上所述,在保持现有进程持续运作的前提下有效释放 Ubuntu 系统上的内存资源,既可以依靠操作系统自身提供的自动化机制,也可以结合具体场景灵活运用各种辅助手段进行精细化调控。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值