专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
郭霖  ·  Android Resource资源管理 ·  2 天前  
郭霖  ·  一文了解 Gradle 插件 ·  5 天前  
今天看啥  ›  专栏  ›  鸿洋

不同版本上 Bitmap 内存分配与回收对比

鸿洋  · 公众号  · android  · 2024-08-09 08:35
    

主要观点总结

Bitmap 是 Android 应用中内存占用大户,容易造成 OOM。Google 不断尝试优化 Bitmap 的内存分配和回收策略。深入理解 Bitmap 的内存模型是优化基础。文章深入 Android 6.0 和 8.0 系统源码,总结 Bitmap 运行时内存模型及 Native 内存回收策略。关键点包括 Bitmap 内存模型、不同版本分配策略、Native 内存回收兜底策略、Bitmap 创建过程、回收过程等。

关键观点总结

关键观点1: Bitmap 内存模型

Bitmap 由 Java Bitmap 对象、Native Bitmap 对象和图片像素数据三部分组成,像素数据在不同系统版本采用不同分配策略。

关键观点2: 不同版本分配策略

Android 3.0 前像素数据存 Native 堆,3.0 到 7.1 存 Java 堆,8.0 后存 Native 堆,并新增 Hardware Bitmap。

关键观点3: Native 内存回收兜底策略

Java Bitmap 对象提供 recycle() 方法释放内存,但 Native 内存需依赖 Finalizer 机制或引用机制辅助回收。

关键观点4: Bitmap 创建过程

Bitmap 创建涉及创建解码器、内存分配器、预分配像素数据内存、解码和返回 Java Bitmap 对象等步骤。

关键观点5: 回收过程

Bitmap 提供 recycle() 方法主动回收,Finalizer 机制或引用机制作为兜底策略确保 Java Bitmap 被回收时同时回收 Native 内存。


文章预览

前言 Bitmap 是 Android 应用的内存占用大户,是最容易造成 OOM 的场景。为此,Google 也在不断尝试优化 Bitmap 的内存分配和回收策略,涉及:Java 堆、Native 堆、硬件等多种分配方案,未来会不会有新的方案呢? 深入理解 Bitmap 的内存模型是有效开展图片内存优化的基础,在这篇文章里,我将深入 Android 6.0 和 Android 8.0 系统源码,为你总结出不同系统版本上的 Bitmap 运行时内存模型,以及 Bitmap 使用的 Native 内存回收兜底策略。知其然,知其所以然,开干! 学习路线图 1 认识 Bitmap 的内存模型 1. 不同版本的 Bitmap 内存分配策略 先说一下 Bitmap 在内存中的组成部分,在任何系统版本中都会存在以下 3 个部分: 1、Java Bitmap 对象:位于 Java 堆,即我们熟悉的 android.graphics.Bitmap.java ; 2、Native Bitmap 对象:位于 Native 堆,以 Bitmap.cpp 为代表,除此之外还包括与 Ski ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览