Android内存优化

news/2025/3/13 10:50:10/文章来源:https://www.cnblogs.com/baiyuas/p/18769479

频繁gc

在下载13000个图片时候,看logcat日志基本每个2、3s就会出发gc。频繁的gc就是频繁申请内存但是内存不足取回收又回收不了。

Background concurrent copying GC freed 37306(4643KB) AllocSpace objects, 63(5252KB) LOS objects, 49% free, 9633KB/18MB, paused 116us total 109.126ms

不太懂没关系,deepseek一下:

···
我来分析一下,我现在需要帮助用户理解他们提供的 GC 日志信息。用户给出的日志是:“Background concurrent copying GC freed 37306 (4643KB) AllocSpace objects, 63 (5252KB) LOS objects, 49% free, 9633KB/18MB, paused 116us total 109.126ms”。首先,我需要解析每一部分的含义,然后解释整个日志的意义,可能的原因以及解决方案。
首先,GC 日志中的 “Background concurrent copying GC” 表示这是一个后台并发复制的垃圾回收过程。Android 中的 ART 运行时使用的是并发标记 - 清除(CMS)或并发复制算法,这里的 “concurrent copying” 可能指的是在后台线程中进行的复制操作,以减少暂停时间。
接下来,“freed 37306 (4643KB) AllocSpace objects” 指的是在这次 GC 中,回收了 37306 个对象,总大小为 4643KB。AllocSpace 是 ART 中的一种内存分配区域,用于分配普通对象。而 “63 (5252KB) LOS objects” 中的 LOS 是 Large Object Space 的缩写,这里回收了 63 个大对象,总大小 5252KB。大对象通常是指超过一定阈值(比如 12KB)的对象,会被直接分配到 LOS 中。
然后,“49% free” 表示当前堆的空闲空间占 49%。“9633KB/18MB” 显示当前已使用的内存是 9633KB,总堆大小是 18MB。这里需要注意,总堆大小可能不是固定的,Android 会根据需要动态调整,但某些情况下可能会受到限制。
最后,“paused 116us total 109.126ms” 说明 GC 过程中应用暂停的时间,其中 116 微秒是用户线程暂停的时间,而总 GC 时间是 109.126 毫秒。这说明大部分时间 GC 是在后台并发进行的,对应用的影响较小。
接下来,我需要分析可能的原因。频繁的 GC 可能意味着内存分配过多,或者存在内存泄漏。特别是当 LOS 中有大量大对象被回收时,可能是因为应用频繁创建大对象,导致堆内存波动较大。此外,堆内存使用接近上限(当前使用了 9633KB,总 18MB,约 53%),但空闲率 49%,这似乎矛盾,可能需要进一步确认数据是否正确,或者是否有其他因素影响。
可能的解决方案包括:优化内存分配,减少不必要的对象创建,尤其是大对象;检查是否存在内存泄漏,使用工具如 Android Profiler 来分析堆内存;调整堆大小参数,不过这通常由系统管理,应用层可能无法直接修改;或者调整 GC 触发的阈值,但这也需要谨慎处理。
另外,需要考虑用户的应用场景。如果用户的应用是在处理大量数据,比如图像处理、视频编解码等,可能会导致频繁的大对象分配,这时候优化算法或使用对象池技术可能会有帮助。同时,确保及时释放不再使用的资源,避免引用链导致对象无法被回收。
总结来说,用户的日志显示 GC 回收了大量对象,尤其是 LOS 中的大对象,当前堆内存使用情况需要关注是否正常,是否存在潜在的内存问题。需要结合应用的具体情况进一步分析,可能需要使用内存分析工具来找出问题根源。
···

主要说下我在下载图片过程中程序的问题:

  1. 在循环中获取下载图片链接时候是拼接字符串API+stucode+.jpg类似这种处理

优化:将图片链接在创建对象时候处理好

  1. 日志频繁,在下载流程中写了很多日志记录流程,并且日志信息字符串拼接参数

优化:去掉一些非关键的日志

  1. 写文件使用的是通用的写入

优化:使用Channel方式写文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898066.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

引言 ❝ 小编是一名10年+的.NET Coder,期间也写过Java、Python,从中深刻的认识到了软件开发与语言的无关性。现在小编已经脱离了一线开发岗位,在带领团队的过程中,发现了很多的问题,究其原因,更多的是开发思维的问题。所以小编通过总结自己过去十多年的软件开发经验,为年…

ChromeOS 134 版本更新

Chrome OS 134 版本更新ChromeOS 134 版本更新 一、ChromeOS 134 更新内容 1. ChromeOS 自助终端(Kiosk)模式支持隔离 Web 应用(Isolated Web Apps) 从 ChromeOS 134 开始,自助终端(Kiosk)模式支持 隔离 Web 应用(Isolated Web Apps,IWA),提供 更安全、更强大 的应用…

ChromeOS 133 版本更新

ChromeOS 133 版本更新 1. 增强托管用户的 Office 文件处理功能 从 ChromeOS 133 开始,托管用户 现在可以 无缝打开和编辑 Microsoft Office 文件(Word、PowerPoint、Excel),无论他们使用的是 Microsoft 365(Office for the web) 还是 Google Workspace。 1.1. 对不同用户…

搭建扫码挪车功能及源码分享

实现效果如图:首先要到这里去申请一个微信通知应用,有了这个应用才能接收到微信的通知: https://wxpusher.zjiecode.com/admin扫码注册后新建一个应用,你会获得一个appToken 再扫码就能获得你的UID(https://wxpusher.zjiecode.com/admin/main/wxuser/list 这个用户列表里面…

氛围灯系统(VALS)

随着汽车智能化、个性化、舒适性的需求逐年提高,汽车已不再只是简单的交通工具,而是一个能够为人们带来舒适与惬意的场所。高品质的汽车内饰照明在其中扮演了重要的角色,已成为汽车内饰领域中不可忽视的设计元素。氛围灯是一种应用在汽车内部,用于烘托车内环境氛围的内饰灯…

嘎嘎好用!推荐三款开源的 Redis 桌面客户端!

三款开源的 Redis 桌面客户端工具,开箱即用!大家好,我是 Java陈序员。 在日常开发中,经常会使用到 Redis, 为了更好的查看和操作 Redis 中的数据,通常会借助可视化操作客户端工具。 今天,给大家介绍三款开源的 Redis 桌面客户端工具,开箱即用!关注微信公众号:【Java陈…

​政务信创实施宝典:从项目治理到交付的7种必备工具链

政务信创实施是推动政府数字化转型、提升政务服务效能的重要举措。在实施过程中,从项目治理到交付需要运用一系列的工具链,以确保项目的顺利进行和目标的实现。本文将详细介绍七种必备的工具链,帮助政务信创项目实现高效、高质量的实施。 需求管理工具链 需求管理是政务信创…

84. 柱状图中最大的矩形(难)

目录题目单调题解:递增栈 题目给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。单调题解:递增栈左边补0:让heights 数组的索引 0 入栈;右边补0:栈中的 bar 都比它高,能一一出栈。con…

[Welcome to my blog]

欢迎! \(\Large\text{My Blog}\)中学:济南天山高级实验中学 关于我的学校滚滚长江东逝水,浪花淘尽英雄 是非成败转头空 青山依旧在,几度夕阳红 白发渔樵江渚上,观看秋月春风 一壶浊酒喜相逢 古今多少事,都付笑谈中街喧闹,人过往 且记曾相识,莫为少年留 一落红,一枯叶,…

银河麒麟系统配置静态IP

查看网卡名称 ifconfig或 ip addr记住网卡名,下面要用 修改配置文件 vim /etc/network/interfaces 修改内容如下 source /etc/network/interfaces.d/auto enp4s3 iface enp4s3 inet static address 192.168.0.20 netmask 255.255.255.0 gateway 192.168.0.1修改DNS(可选) vi…

MinGW

上次安装,这次又忘了,还是记一下吧 MinGW(Minimalist GNU for Windows)是一个面向Windows操作系统的开发环境,包含了GNU编译器套装(GCC)和其他一些自由软件开发及应用工具。 使用MinGW,开发者可以在Windows平台上编译、构建和运行用C、C++等多种语言编写的应用程序。 下…

Markdown使用html实现折叠

一、文字 <details> <summary>效果</summary> 文本内容 </details>效果 文本内容二、代码块 <details> <summary>效果</summary> ``` 代码 ``` </details>效果 代码三、图片 <details> <summary>效果</summary…