巧妇能为少米之炊(1)——Android下小内存下的生存之道

安卓开发实战:用百度地图API实现GPS轨迹模拟骑行(附完整源码) 本文详细介绍了在安卓开发中,如何利用百度地图API实现GPS轨迹模拟骑行功能。内容涵盖从核心原理、轨迹数据获取与坐标系转换,到构建平滑模拟引擎及与百度地图SDK集成的完整实战流程,并提供了可复用的完整源码,帮助开发者快速为应用添加演示或测试用的模拟定位模块。 阅读详情

经常听到身边用安卓的朋友抱怨手机卡顿,内存动不动就快没了,而Google声称在512M的内存下也能流畅运行Android 4.4,到底它做了什么?

总结一下它主要做了四件事:

1.优化内核,使用ActivityManager来减少直接内存回收

2.优化LMK(low memory killer)的临界值

3.使能KSM(Kernel Samepage Merging)

4.使能ZRAM代替SWAP分区

这几个事情,个人只有第三和第四件事情看起来比较靠谱。


 优化内核的事情:

摘自Google官方网站的英文介绍,翻译过来的意思大概是: 修改临界值,减少直接内存回收,因为直接内存回收会需要额外的IO操作,耗时较大,利用空闲的时间增加后台回收。

众所周知,对EMMC读写的时候,是非常耗费时间的,因为内存的读写速度要高出EMMC读写速度几个量级,因此减少与EMMC交互的确可以节省很多时间,减少卡顿,但是每个人的使用习惯不同,怎么要修改算法使得减少直接内存回收呢?我不知道,但是我觉得这个优化等于说废话,到底咋样,使用过后才知道。


关于LMK:

Linux内核中,用OOM来回收内存,即当内存不够的时候,调用一种算法,把那些不用的,优先级别比较低的,都给释放掉,这样腾出一部分内存,于是内存就变大了,而Android中,对这个OOM机制做了一个优化,它就叫LMK。

它认为,如果等到OOM发生的时候,内存已经非常不足了,这个时候再去释放内存,系统的响应时间会变的非常长,造成非常差的用户体验,于是LMK做了一个改变,定时检查空闲内存,当少于某个伐值的时候,就杀掉一些进程,腾出一些空间,这样保证系统中一直有较大的空闲内存,可以减少卡顿。有道理,后面的章节中会仔细讲诉LMK。


KSM:

这个东西早在2009年的时候就出来了,但是反映比较平淡,原因是:KSM合并相同页面,即合并副本内存,可以节省不必要的内存,但而采用此方法,会增加耗电量,不得已的时候才会打开。


什么是ZRAM:

说的明白一点,ZRAM就是SWAP的一个改进,一般发生SWAP的时候,是把要置换出去的数据存到外部磁盘上(手机就是EMMC,电脑就是硬盘),这样会降低效率,于是聪明的开发者们相处一个方法,那就是把要置换出去的东西压缩还放在内存中,这样消耗的只是解压时间,而这个时间远远小于与外部磁盘交互所消耗的时间。是个比较靠谱的方式,下面的章节中,将详细讲诉它的调用过程以及如何打开。


于是LMK,KSM和ZRAM是笔者认为比较靠谱的方式,下面的几个章节,将分别讲诉他们如何被使能,以及具体的调用过程和原理。

安卓恶意软件检测:MH-1M百万级数据集构建、评估与应用实战 在网络安全与恶意软件检测领域,高质量数据集是模型性能的基石。其核心原理在于,通过大规模、多样化的样本和特征,机器学习模型能够学习到恶意软件的本质行为模式,而非特定数据集的噪声。这直接决定了检测系统的泛化能力和实际应用价值。在安卓生态中,静态分析通过提取APK文件的权限、API调用、意图和操作码等特征,为自动化检测提供了可量化的依据。MH-1M数据集正是这一理念的集大成者,它凭借超过134万个样本、14年时间跨度和VirusTotal多引擎聚合标注,解决了以往数据集规模小、特征单一、时效性差的痛点。该数据集不 阅读详情

相关推荐

组合导航、惯导、GNSS、INS、IMU的区别

‌:惯性导航系统(INS)是一种利用安装在运载体上的陀螺仪和加速度计来测定运载体位置的系统。它通过测量物体的加速度和角速度,结合算法计算出物体的位置、速度和姿态‌12。‌。

wynn1123的博客 8068

android底层之什么是Zram?

ZRAM的理解 ZRAM(压缩内存)的意思是说在内存中开辟一块区域压缩数据……就是说假设原来150MB的可用内存现在可以放下180MB的东西……本身不会提高内存容量和运行速度……只是让后台程序更少被系统砍掉罢了,为了能得到更多多任务运行……而且这个压缩动作会加重CPU负担…… ZRAM是linux的一种内存优化技术,基本工作原理是:通过划定一片区域,将压缩过后的硬盘数据放入该区域,以实现高速读...

一只攻城的柿子 2万+

手把手教你搭建自己的 API 中转站

本文介绍了如何通过开源工具CLIProxyAPI(CPA)搭建本地AI模型代理服务,解决多工具切换、海外API访问困难等问题。CPA可将OpenAI、Gemini等不同服务的API统一封装,用户只需配置一次账号信息,所有客户端即可通过标准接口访问。文章详细讲解了CPA的下载安装、配置修改、账号导入及客户端连接方法,并强调其经济性、可控性和集中管理优势。通过自建中转站,用户可避免第三方服务的质量风险,实现多账号负载均衡,构建个人AI资源池。最后提供了网络配置等实用建议,帮助开发者高效使用AI编程工具。

DongJiYong_20的博客 1855

Android 低内存优化配置

zram的确可以优化内存不足的问题,但是心病还需心药医,内存不足最根本还是要从内存入手,增大内存才是治标治本之法。

lojotee的博客 5897

易康eCognition9.0分类|规则集和机器学习的方法的面向对象的多尺度分割分类

基于易康eCognition9.0软件的规则集和机器学习的方法的面向对象的多尺度分割分类

weixin_46493028的博客 1万+

智能音箱麦克风阵列实战:Python实现宽带GSC波束形成(附完整代码)

本文从工程实战角度,详细介绍了如何在智能音箱中利用Python实现宽带GSC波束形成算法。文章深入解析了广义旁瓣消除器(GSC)的核心架构,包括固定波束形成、阻塞矩阵与自适应滤波路径,并提供了完整的仿真代码、关键参数(如LMS步长)调优方法,以及面向嵌入式部署的计算优化与移植考量,旨在帮助开发者构建在真实噪声环境下高效工作的语音增强系统。

opencv7vision的博客 343

Android内存管理基础

仅作为个人学习笔记,请小心求证。 欢迎访问:https://blog.youkuaiyun.com/weixin_55626853 内存管理概览:https://developer.android.com/topic/performance/memory-overview 内存分配:https://developer.android.com/topic/performance/memory-management Android Studio Profiler:https://developer.android.co..

BC工坊 6946

PaddleOCR实战:从零开始打造专属OCR模型的完整指南

本文提供了一份从零开始使用PaddleOCR打造专属OCR模型的完整实战指南。内容涵盖环境搭建、数据标注与准备、模型训练与调优,以及最终的模型转换与部署。重点介绍了如何利用PaddleOCR进行模型训练,并整合PPOCRLabel等工具高效准备数据集,帮助开发者快速构建适用于特定场景的高精度OCR识别能力。

rl6adventurer的博客 733

android zram 命令,Android 内存管理

概述虚拟内存2.1 分页2.2 内存映射内存不足时的处理3.1 kswapd3.2 LMK虚拟机4.1 堆空间划分4.2 回收算法在看这篇文章之前,需要Linux内存管理基础,推荐Linux 内存管理对于这篇文章的结构我也是思虑再三,为什么先讲LMK,后讲虚拟机回收,主要是因为,分页、内存映射、LMK是直接影响物理内存的,而虚拟机对应的更多的是硬件无关的。此外,本篇不涉及具体代码实现,详细实现以后...

weixin_42135773的博客 2647

嵌入式调光控制库:轻量级软启/渐变/记忆逻辑实现

调光控制是智能照明系统的核心基础功能,涉及亮度调节、人机交互与电气安全多重需求。其底层原理依赖于对相位角或PWM占空比的精确时序控制,并需融合软启动、渐变过渡、状态记忆等工程化逻辑。这类轻量级调光行为逻辑层,不直接操作硬件寄存器,而是以确定性、无动态内存、可配置的方式封装用户意图到目标亮度值(0–100%)的映射过程,显著提升产品鲁棒性与跨平台复用能力。广泛应用于TRIAC交流调光、LED直流PWM驱动及DALI/Matter等智能照明协议网关中,尤其适合资源受限的Cortex-M系列MCU和FreeRTO

weixin_28949937的博客 579

第3章: MMU Interval Notifier 区间通知器的核心原理⭐

摘要:区间级内存通知机制分析 本文分析了Linux内核中区间级内存通知机制(mmu_interval_notifier)的设计原理与实现。该机制针对传统全局通知(mmu_notifier)存在的性能开销大、无法精确控制等问题,通过引入区间树(Interval Tree)实现精确匹配,仅当内存变化与注册区间重叠时才触发回调。核心优势包括:1)O(log n + k)的高效查找性能;2)支持独立管理各内存区间;3)实现高并发处理不同区间的失效事件。

图形/计算GPU的驱动与虚拟化技术分享园地 2027

Android 虚拟内存:原理、应用与优化进阶

虚拟内存是一种将主存扩展到磁盘空间的技术。在 Android 系统中,每个应用都拥有独立的虚拟地址空间。这个空间看似连续,实则通过地址映射机制,映射到物理内存和磁盘交换空间。例如,一个 32 位的 Android 应用,其虚拟地址空间为 4GB,从 0x00000000 到 0xFFFFFFFF。应用在这个虚拟空间中分配和访问内存,无需关心实际物理内存的位置和使用情况。Android 虚拟内存技术为应用程序提供了强大的内存管理支持,通过合理利用虚拟内存,开发者可以优化应用性能,提升用户体验。

顾林海 3570

6.4 实战项目:基于Agent内核构建Code Review智能体

本文介绍了一个基于Agent内核构建的智能Code Review系统实战项目。系统采用多Agent协作架构,包含代码质量分析、安全漏洞识别、性能优化建议等核心功能模块。文章详细展示了系统架构设计,采用协调器Agent管理多个专业Agent协同工作,并提供了基础Agent框架和协调器Agent的TypeScript实现代码。项目结合了AI Agent核心原理和多Agent协作机制,实现了自动化的代码审查流程,能够生成详细的审查报告,帮助开发者提升代码质量和安全性。

yonggeit的博客 3114

巧妇能为少米之炊(2)——幽灵侩子手(LMK)

使用安卓的朋友可能会遇到过这样的问题,就是某个应用正在使用,突然它被关闭了,或者打开某个应用,然后它就退出了,其实这背后就是LMK(Low Memory Killer)在起作用,所有形象地称之为幽灵刽子手。 1.版本平台 2.概念 3.核心结构及调用 4.总结 版本平台 平台:高通MSM8974 安卓版本:4.4

Fybon的专栏 1812

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

巧妇能为少米之炊(3)——压缩饼干(ZRAM)

这个是我认为小内存处理中比较靠谱的方式——zram。它就像压缩饼干一样,虽然小小一块饼干看起来不大(zram的压缩页面占用内存),但是一喝水,感觉立马饱了(释放一个页面的内容)。 1.简介 2.如何使能 3.工作流程 4.还有什么能做的? 简介: zram就是在发生swap事件的时候,不把要置换的页面置换到外部存储中,手机中的外部存储就是EMMC,电脑中的外部存

memoryjs的专栏 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

3g安卓市场_属于HTC G1的情怀:安卓手机的鼻祖,最正宗的安卓手机!

看看现在的智能手机,清一色漂亮的设计外观、流畅的操作体验、丰富的应用等等。这是现在我们对智能手机的印象,那如果倒退12年,看见那时的智能手机,你会觉得陌生吗?那就让我们来看看世界上第一款安卓手机——HTC G1。HTC G1的实体按键区 HTC是2008年发布的第一款搭载安卓系统的手机。采用3.17英寸的触摸屏设计,整块屏幕的分辨率与现在的智能手机简直没有法比。看正面外观,按键元素还是非常多的,...

weixin_39620252的博客 466

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

安卓开发历险记

首先post上网址http://developer.android.com/training/index.html。 接下来就是翻译和理解,请各位看官品鉴! 创建第一个App 欢迎来到安卓应用开发。 本课教你如何创建安卓App。你将   1.学会如和创建安卓项目和运行app的调试版本。    2.学会安卓app设计的基础知识。包括如何创建简单的用户界面和处理用户输入。 在开始课程之前

mingyuesen的专栏 381

安卓面试之轻松战胜内存优化问题

熟悉如何内存优化,无疑是安卓工程师进阶的一个必要条件,同时也是面试的重点和难点。 面试常见问题:1、如何优化内存; 2、如何加载10M大小的图片; 3、如何线上监控内存 为什么要优化内存 目录 为什么要优化内存 内存检测 线上跟踪 移动设备中,内存是非常重要的资源;如果内存使用不当,轻则出现卡顿,重则出现程序崩溃: 如何发现内存问题 环境:Android Studio 4.1 工具:AS内部集成的Profiler 内存检测 1、打开Android Studio性能检测工具

大厂我来了 686

android adb查ip,adb通过TCP/IP来调试Android设备

对Android比较熟悉的开发人员,对adb通过USB(USB连接Android设备)调试Android设备应该不会陌生,因为大部分资料都是这样做的。但是假如你的Android设备没有USB口,只有网口,能不能调试呢?(比如移植过程中通过NFS启动的Android系统,再比如你的设备上面USB设备匮乏。)答案是肯定的。本文我将以我最近的经验,介绍一下adb怎样通过tcp/ip来调试Android设...

weixin_28686771的博客 1495

看我是如何快速学习android开发的(一)

因为项目需要,8月中旬开始决定做安卓的程序,所以马上就开始学习安卓方面的开发知识,把最近的学习实践经历和大家分享分享。不要一开始就下载一大堆资料,视频,然后就不知道做什么了,要给自己定个目标,我要做什么?我怎么达到目标?  我不懂java,但是懂C#和C++,所以我没主张去单独学习java语言,如果你是个最最初的新手,没啥语言基础,那你必须先看看java语言,不要很详细看,因为学习Android

binyao02123202的专栏 6984
上一篇: 闲聊ROOT权限——ROOT权限的前世今生
下一篇: 巧妇能为少米之炊(2)——幽灵侩子手(LMK)
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值