7.1
深览指数
科技少数派··AI 生成

具透 Plus:Android 17 的应用内存限制;谈谈 macOS 和 Linux 如何运行可执行文件

本文包含两篇独立的技术文章,分别探讨 Android 17 为单个应用设置内存上限的机制,以及 macOS 和 Linux 根据文件内容而非扩展名判断可执行文件的原理。前者用「书桌和抽屉」的类比解释了 LMKD 与进程优先级的协作,并指出新机制旨在防止单个应用过度占用内存而导致整个系统进程频繁被清理;后者则深入介绍了 shebang、ELF 格式、Magic number,以及 binfmt_misc 和 Rosetta 2 这类兼容层的工作方式。适合对底层操作系统原理有好奇心、或想理解移动设备流畅度为何因人而异的开发者与资深用户阅读。原文 ↗

核心观点
  • Android 17 为单个应用设置基于设备总内存容量的内存上限,旨在解决单个前台应用过度占用内存导致其他进程频繁被清理的系统性问题。
  • 在 macOS 和 Linux 中,系统核心主要通过分析文件内容(如 shebang 和 Magic number)而非文件名扩展名来决定如何执行一个文件,这比 Windows 的做法更安全、更可靠。
  1. 01Android 核心内存管理组件 LMKD 根据进程优先级(前台/可见/后台/已缓存)决定哪些进程可以被优先清理。
  2. 02Android 17 引入的 MemoryLimiter 和 ApplicationExitInfo 标记可以帮助开发者判断应用进程被杀的具体原因。
  3. 03Android 17 同时改进了 ART 运行时的 GC 垃圾回收,根据对象存活时间分层(年轻对象更频繁轻量清理,稳定对象谨慎处理)。
  4. 04Linux ELF 文件以特征字节 `7f 45 4c 46`(对应 ASCII 'ELF')开头,内核通过 Magic number 识别其格式。
  5. 05Apple 的 Universal Binary (Fat Binary) 可同时包含多种架构的 Mach-O 切片,系统自动选择匹配切片,否则调用 Rosetta 2 进行二进制转译。
  6. 06Linux 的 `binfmt_misc` 机制允许内核根据文件开头的特征字节,将文件自动交给注册的解释器或模拟器(如 QEMU)处理。
  7. 07macOS 27 将是最后一个全面支持 Rosetta 2 的版本,macOS 28 起 Rosetta 仅保留有限功能用于运行少数旧游戏。
反方 / 局限
  • Android 内存上限机制的效果高度依赖开发者是否遵守规范;对于行为恶劣的应用,系统仍然需要通过终止进程来应对,无法彻底根除滥用问题。
11 分钟 · 4 卡片 · 10 资料
读原文 →

前置背景

平行视角

未来推演

延伸追问