android 内存
进程内存组成Android 每个 App 通常运行在独立进程里进程内存大致分为几块区域说明Java HeapJava/Kotlin 对象new、数组、String、集合等由 ART/Dalvik 管理Native HeapC/C、malloc、newnative、JNI、相机、WebView、各类 Native SDKStack各线程栈空间Code映射进内存的 so、jar、dex、apk 等Graphics图形缓冲Bitmap、Surface 等其它mmap、Ashmem 等系统起来后每个app 的总内存占有都是动态的不是固定的根据使用情况而改变过大或系统内存紧张时可能被LMKLow Memory Killer杀掉而每个app都是一个独立的虚拟机VM系统会给这个进程的VM分配 相对固定的配置上限进程总内存和 VM 内存上限 是两个概念进程总内存包含 Java heapVM 管的那块也包含 Native 等总内存一般不是系统预先固定分配的一个数字而是各部分加起来、再受系统整体约束而java Heap 的内存就是在这个VM的内存上超过了这个指定的VM的内存 就会java oom但是Navtiv层 的内存就不受VM管了所以会出现Java heap 还不高App 已经被杀 —— 多半是 Native / 图形内存高了不是 Java OOM。设备物理内存 8GB│├── 系统 / 其它 App│└── 你的 App 进程│├── Java Heap ← 上限例如 512MBVM/ART 管├── Native Heap ← 不受 Java 512MB 限制├── Graphics└── 其它│└── 合起来 进程总内存可能 800MB、1.5GB…│└── 太大或系统紧张 → 可能被 LMK 杀掉不一定是 Java OOMadb shell dumpsys meminfo 包名 可以查看当前对应的进程 内存区域 java heapnative heap栈stack等内存分配情况这里是上面关键的字段分析关键行行含义Native HeapNative 内存Dalvik HeapJava 内存ART 管理Stack线程栈.so / .jar / .apk mmap代码与资源映射TOTAL汇总TOTAL PSS ≈ 进程总占用关键列列含义Pss Total该类内存在进程 PSS 中的贡献Heap Size / Alloc / Freeheap 内部统计排查 OOM / 被杀进程时Java OOM 看 Dalvik莫名被杀看 TOTAL PSS 和 Native/Graphics。adb shell getprop | grep -i heap 这个命令查看 查看当前设备的 VM的设置情况heapgrowthlimit (192m) 代表默认的每个app VM层的上限heapsize (512m) 当你的应用在android Manifest 中设置了 android:largeHeap“true” 能给到的最大内存heapstartsize (8m)刚启动时先给的 每个app VM层的内存VM虚拟机的创建new的对象有生命周期包括新声代和老年代等Android vm 会根据可达性分析算法对这些对象进行gc root 不是引用计数所以优化方向是断开不必要的引用置 null、从集合 remove、取消监听、关流等让对象变成不可达。系统会对每个进程分等级其中有空进程后台进程服务进程可见进程前台进程一层比一层等级变高前台进程是最高的当系统需要回收的时候会先回收空进程整个系统的ActivityManagerService 会对每个进程进行评分是哪个等级存在变量adj中.内存紧张时LMK按优先级从低到高回收进程。被杀不一定是 OOM常常是系统主动回收可以尝试吧进程等级调高来进行保活OOM 不只有 Java OOM还要关注.Native OOM大图、相机、FFmpeg等).进程总内存过大被 LMK 杀meminfo 里 TOTAL PSS 高但 Java heap 还不满出问题是要分析是 泄漏内存只涨不降还是 峰值过高某操作瞬间很大是 Java 还是 Native / Graphics峰值对应什么操作进页面、切图、列表滑动、测量、WebView…谁占最大Bitmap、byte[]、String、自定义大数组…为何还被引用从 GC Root 跟引用链分析的工具使用命令 adb shell dumpsys meminfo 包名 看 PSS、Java/Native/Graphics 内存使用情况Android Studio Memory Profiler 实时 Java/Native 曲线、分配记录、Heap Dump每个对象引用链路LeakCanary 开发期泄漏查看内存泄漏Perfetto / Systrace 和 GC、卡顿一起看总结 内存过高会导致 GC 频繁、卡顿、发热严重时 Java OOM 或进程因总内存过大被系统杀掉。内存管理要点是合理分配、避免泄漏、及时释放不再需要的引用与资源。排查上用 Memory Profiler 看内存随时间变化峰值时对照业务 Heap Dump每个对象引用链路用 LeakCanary 开发期泄漏查看内存泄漏优化上依据 可达性GC Roots 根搜索断开多余强引用、取消监听、关闭流、清理缓存让对象可被回收同时关注 Native/Graphics不只看 Java heap堆。Android Studio Memory Profiler 的使用当点击profile 的时候会出现如图下面的画面右边红色区域 就是看内存我们主要是 看 View Live Telemetry 和 Analyze Memory Usage Heap Dump 快照 点击Start anyway 就会开启Past Recordings 是你对Home 每个模块点击区域操作的记录我们先来使用 View Live Telemetry 如何使用如图因为我们只是分析内存所以我们只需要看 MEMORY 下面部分就是对应的当前进程内存的波动形式 以及具体每个部分占用多少内存最底下的蓝色模块趋势就是我们着重会看的java 内存使用部分而左脚的删除垃圾按钮就是 点击可以进行 人为 手动 gc一旦gc 包括人为手动gc或者进程被gc操作了那么下吗就会有个对应时间的的垃圾图标Live Telemetry 能做什么、不能做什么Live Telemetry 是用来看内存总趋势每个操作每个时间点每个场景对应的内存趋势波动如果你手动强制gc 内存能大幅度下降还好如果gc 不能下降一直占用着那么怀疑是有泄漏或者对象持有了大内存那么这个时候你想分析具体当前对应指定的场景和时间点每个对象对象占用对谁内存每个对象对应的引用链路是如何那么就需要使用工具 Analyze Memory Usage Heap Dump 快照Analyze Memory Usage Heap Dump 快照 快照的意思就是对某个时间点进行拍照记录当下场景 所有对象的内存占用情况现在我们来学习如何在快照中看对所有对象象内存占用情况和每个对象的引用链路现在我们进行模拟下泄漏场景手动代码制造泄漏我们创建了一个单例对象MemoryScenarioManager然后单例对象 里面有个 leakedByteArrays 然后他添加了字节而由于是静态的所有你gc的时候是不会回收的然后我们开下快照如图最上面显示着当前进程下每个类占用的内存大小Shallow Size 对象本身自己多大Retained Size删掉这个对象能释放多少内存其实你可以粗略理解为 Shallow Size是这个对象本身的大小而Retained Size是这个对象携带的对象占用的大小虽然不大准Retained Size正确理解是 删掉这个对象能释放多少内存因为删掉他他携带的对象也自然会被删掉。当我们点击对应的类后会 出现下面的对应当前对象链路情况References 就是 显示 这个对象整条链路状态Thread (GC Root)└── contextClassLoader└── PathClassLoader└── Object[]└── Class└── static INSTANCE└── MemoryScenarioManager ← 你选中的对象而 Fields 则是当前这个对象里面的变量对象是什么有哪些如图我们点击Fields 就能看到 MemoryScenarioManager 里面有着 leakedByteArrays 这个对象并且占用多少内存

相关新闻

C++ string深度解析:从内存管理到性能优化的核心机制与实践

C++ string深度解析:从内存管理到性能优化的核心机制与实践

1. 项目概述:为什么C的string值得你花时间深究? 在C的世界里, string 这个类大概是每个开发者从入门到进阶都绕不开的一个存在。乍一看,它不就是用来存文本的吗?有什么好“详解”的?但如果你真这么想&…

2026/10/9 0:53:38 阅读更多 →
YOLO训练中数据增强的顺序为什么重要?Mosaic、MixUp、Copy-Paste的最佳排列组合

YOLO训练中数据增强的顺序为什么重要?Mosaic、MixUp、Copy-Paste的最佳排列组合

训练集上mAP 0.95,验证集直接腰斩——这不是模型的问题,是你的增强顺序错了。 写在前面:一次让我重新审视增强顺序的“翻车”经历 上周调试一个工地安全帽检测项目,模型在训练集上表现得近乎完美,mAP一路飙升到0.95以上,验证集上却始终在0.55左右徘徊。换了Mosaic、调了…

2026/10/12 10:38:52 阅读更多 →
YOLO训练中的NMS参数调优:Confidence Threshold与IoU Threshold的协同优化

YOLO训练中的NMS参数调优:Confidence Threshold与IoU Threshold的协同优化

前言:为什么你换了YOLOv11,效果还是不行? 90%的检测质量差异,来自三个基础参数的合理设置:置信度阈值、交并比阈值和非极大值抑制策略。它们不改变模型结构,却直接决定你看到的结果是“满屏噪点”还是“干净精准”。 很多开发者都有这样的经历:花了几周时间训练YOLO模型…

2026/10/11 12:23:59 阅读更多 →

最新新闻

GitHub热门项目分析方法论:从真实数据看技术趋势

GitHub热门项目分析方法论:从真实数据看技术趋势

我无法基于“🚀 2026 年 9 月 GitHub 十大热门项目排行榜 🔥”这一标题生成符合要求的高质量博文。原因如下:时间悖论:当前真实时间为2024年,标题中明确指向“2026年9月”,属于尚未发生的未来时间点。GitHu…

2026/10/12 10:45:45 阅读更多 →
Python报错ModuleNotFoundError: No module named ‘twine‘的彻底解决指南

Python报错ModuleNotFoundError: No module named ‘twine‘的彻底解决指南

1. 报错背后的真相:先弄明白twine是什么1.1 为什么pip安装过程中会报这个错先说结论:这个报错翻译成人话就是,你当前Python环境里根本找不到一个叫twine的模块,或者找错了环境。twine这个工具在Python生态里的定位很特殊。如果用生…

2026/10/12 10:45:44 阅读更多 →
医疗SPD供应链管理:从缘起到四方协作的落地实践与避坑指南

医疗SPD供应链管理:从缘起到四方协作的落地实践与避坑指南

1. 从“缘起”说起:SPD到底是个什么局第一次听到SPD这个词,很多人的反应是“这不是医院里那个耗材管理的东西吗”,也有人会想到供应链里的某个缩写。没错,SPD在不同行业里有不同的含义,但今天我要聊的,是它…

2026/10/12 10:45:44 阅读更多 →
纯NumPy手写数字识别毕设系统:含SQL登录与全流程工程实践

纯NumPy手写数字识别毕设系统:含SQL登录与全流程工程实践

简介:本资源是一套基于Python与深度神经网络实现的手写数字识别系统,面向计算机专业本科生及人工智能初学者,适用于毕业设计、课程设计等实践场景,解决手写数字图像自动识别这一经典机器学习任务。压缩包共18个文件,包…

2026/10/12 10:45:44 阅读更多 →
真实案例:requests抓不到JS渲染页面?Selenium高级爬虫实战指南

真实案例:requests抓不到JS渲染页面?Selenium高级爬虫实战指南

一次真实案例引发的思考&#xff1a;requests 正常返回&#xff0c;页面却啥都没有去年我做新闻舆情监控&#xff0c;目标站点的文章列表页用 requests 抓回来&#xff0c;HTML 里干干净净&#xff0c;只有一堆<script src"/assets/index.js?v20240312">。可浏…

2026/10/12 10:45:44 阅读更多 →
【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:44:39 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →