网站专题页怎么做/软文发布平台

网站专题页怎么做,软文发布平台,文山网站建设联系电话,下面不属于网络推广方法目录 一、APP 内存限制 二、内存的三大问题 2.1、内存抖动(Memory Churn) 2.1.1 频繁创建短生命周期对象 2.1.2 系统API或第三方库的不合理使用 2.1.3 Handler使用不当 2.2、内存泄漏(Memory Leak) 2.2.1 静态变量持有Activity或Context引用 2.2.2 未取消的回调或…

目录

一、APP 内存限制

二、内存的三大问题

2.1、内存抖动(Memory Churn)

2.1.1 频繁创建短生命周期对象

2.1.2 系统API或第三方库的不合理使用

2.1.3 Handler使用不当

2.2、内存泄漏(Memory Leak)

2.2.1 静态变量持有Activity或Context引用

2.2.2 未取消的回调或监听器

2.2.3 非静态内部类持有外部类引用

2.2.4 Timer或Handler未正确取消

2.2.5 Bitmap未及时回收

2.2.6 资源文件未关闭

2.2.7 WebView

2.3、内存溢出(OutOfMemoryError)

2.3.1 为对象分配内存时达到进程的内存上限

2.3.2 没有足够大小的连续地址空间

2.3.3 创建线程失败

2.3.4 内存泄漏积累

2.3.5 集合类对象未及时清理

三、内存问题解决方案

3.1 选择合适的数据结构

3.2 避免使用枚举

3.3 谨慎使用多进程

3.4 谨慎使用 Large Head

3.5 使用NDK

四、 图片优化

4.1 如何对图片进行缓存?

4.2 计算图片占用内存的大小

4.3 如何计算图片占用内存的大小?

4.4 图片内存体积优化总结

五、内存优化5R法则

相关推荐


一、APP 内存限制

        Android 给每个 App 分配一个 VM ,让App运行在 dalvik 上,这样即使 App 崩溃也不会影响到系统。系统给 VM 分配了一定的内存大小,App 可以申请使用的内存大小不能超过此硬性逻辑限制,就算物理内存富余,如果应用超出 VM 最大内存,就会出现内存溢出 crash。

        由程序控制操作的内存空间在  heap 上,分 java heapsizenative heapsize

        Java申请的内存在 vm heap 上,所以如果 java 申请的内存大小超过 VM 的逻辑内存限制,就会出现内存溢出的异常。(如:-Xmx4096)

        native 层内存申请不受其限制,native 层受 native process 对内存大小的限制。

        Android 虚拟机申请内存最大内存是有限制的,不同设备申请的最大内存是不一样的。

二、内存的三大问题

        1、内存抖动:内存波动图形呈 锯齿张、GC导致卡顿。

        2、内存泄漏:在当前应用周期内不再使用的对象被GC Roots引用,导致不能回收,使实际可使用内存变小。

        3、内存溢出:即OOM,OOM时会导致程序异常。Android设备出厂以后,虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。

2.1、内存抖动(Memory Churn)

        内存抖动是指内存频繁分配和回收,导致内存曲线呈锯齿状波动,可能导致应用页面卡顿或响应缓慢常见的内存抖动场景及解决方案:

2.1.1 频繁创建短生命周期对象

        在循环或频繁调用的方法中创建大量短生命周期的对象,如字符串拼接、对象频繁创建等。

        在自定义控件的onMeasureonLayoutonDraw等方法中创建对象,由于这些方法会频繁调用,导致对象频繁创建和回收。

解决方案

  • 避免在循环或频繁调用的方法中创建对象。
  • 使用StringBuilder等高效字符串拼接方式替代加号拼接。
  • 在自定义控件的绘制方法中,尽量复用对象,避免频繁创建。
  • 对于需要频繁创建和销毁的对象,可以考虑使用对象池来复用对象。对象池能够减少对象的创建和销毁次数,从而降低内存抖动的发生概率。

2.1.2 系统API或第三方库的不合理使用

        调用系统API或第三方库时,没有合理使用其提供的对象复用机制,导致大量对象被创建。

解决方案

  • 深入了解系统API和第三方库的工作原理,合理使用其提供的对象复用机制。
  • 避免不必要的对象创建,如使用Message.obtain()方法获取Message对象,而不是直接创建新的Message对象。

2.1.3 Handler使用不当

        Handler发送大量消息,且消息处理不及时,导致消息对象堆积。

解决方案

  • 在Handler中处理消息时,确保及时处理并释放消息对象。
  • 对于延时消息,要确保在Activity或View生命周期结束前取消未处理的消息。
  • 队列优化=>重复消息过滤。
  • 队列优化=>互斥消息取消。
  • 复用消息,使用Message.obtain()方法获取Message对象。
  • 使用消息空闲ldleHandle

2.2、内存泄漏(Memory Leak)

        内存泄漏是指长生命周期的对象持有短生命周期对象的引用应用程序中的对象在不再需要时仍然被引用,导致垃圾回收器(Garbage Collector,GC)无法回收这些对象所占用的内存。内存泄漏会导致可用内存逐渐减少,最终可能导致应用程序崩溃(OOM)或系统变得非常缓慢。常见的内存泄露场景及解决方案:

2.2.1 静态变量持有Activity或Context引用

        在静态变量中持有Activity或Context的强引用,当Activity或Context不再需要时,由于静态变量的生命周期与应用程序相同,导致这些对象无法被回收。

解决方案

  • 避免在静态变量中持有Activity或Context的强引用。
  • 如果确实需要持有Context,考虑使用Application Context或弱引用(WeakReference)。

2.2.2 未取消的回调或监听器

        在Activity或Fragment中注册回调或监听器,但未在适当的生命周期方法中取消注册,导致Activity或Fragment被销毁后,回调或监听器仍持有其引用。

解决方案

  • 在Activity或Fragment的onDestroy或onDetach方法中取消所有回调和监听器注册。
  • 使用View的观察者模式时,确保在View不再需要时解除观察。

2.2.3 非静态内部类持有外部类引用

        非静态内部类默认持有其外部类的引用,如果非静态内部类被长期持有(如作为静态变量的成员),则外部类也无法被回收。

解决方案

  • 将内部类声明为静态内部类,并通过构造方法传递必要的Context或其他引用。
  • 如果内部类需要访问外部类的成员,考虑使用弱引用持有外部类的引用。

2.2.4 Timer或Handler未正确取消

        使用Timer或Handler时,如果未正确取消定时任务或消息,当Activity或Fragment销毁后,这些定时任务或消息仍可能持有其引用。

解决方案

  • 在Activity或Fragment的onDestroy或onDetach方法中取消所有Timer任务。
  • 对于Handler,确保在Activity或View生命周期结束前处理完所有消息,并调用handler.removeCallbacksAndMessages(null)来取消所有回调和消息。

2.2.5 Bitmap未及时回收

        在加载大图片或处理图片时,如果未及时回收Bitmap对象,可能导致内存泄露。

解决方案

  • 在不再需要Bitmap时,及时调用bitmap.recycle()方法回收Bitmap。
  • 使用图片加载库(如Glide、Picasso)时,这些库通常会自动管理Bitmap的回收,但仍需注意避免在Activity或Fragment销毁后继续加载图片。

2.2.6 资源文件未关闭

        在处理文件、数据库连接等资源时,如果未正确关闭这些资源,也可能导致内存泄露。

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

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

相关文章

ffmpeg源码编译支持cuda

1.安装cuda CUDA Toolkit 11.3 Downloads | NVIDIA Developer 在选择组件的时候,将CUDA中的Nsight VSE和Visual Studio Integration取消勾选 不然会安装失败 2.编译ffmpeg 把cuda编译宏定义开启,再编译avcodec 3.编译livavutil报错struct "Cuda…

【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发-第4章 UART基础知识

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

【计算机网络入门】初学计算机网络(十)(重要)

目录 1. 网络层的作用 2. IPV4 2.1 IP 数据报格式 2.2 IP地址分类方案 2.3 数据的转发 2.4 特殊用途的IP地址 3. 子网划分和子网掩码 3.1 子网划分 3.2 子网掩码 1. 网络层的作用 按照教学五层模型,应用层、传输层、网络层、数据链路层、物理层&#xff…

机器学习(五)

一,多类(Multiclass) 多类是指输出不止有两个输出标签,想要对多个种类进行分类。 Softmax回归算法: Softmax回归算法是Logistic回归在多类问题上的推广,和线性回归一样,将输入的特征与权重进行…

Windows安装nvm【超详细图解】

目录 前言 一、NVM下载 方式一:官网下载 方式二:GitHub 下载 二、NVM安装 镜像源配置 三、Node安装 四、环境变量配置 前言 NVM(Node Version Manager)是一个命令行工具,用于在一台计算机上轻松管理和切换多…

KVM虚拟机磁盘创建探究-2

使用 virt-install 命令自动创建磁盘镜像和使用 qemu-img 手动创建磁盘镜像,在磁盘镜像本身格式和基本功能上是一致的,但在一些特性如初始占用磁盘空间、创建时的可配置性等方面存在区别,下面以 QCOW2 格式磁盘镜像为例进行详细说明。 初始占…

京准电钟:NTP校时服务器于安防监控系统应用方案

京准电钟:NTP校时服务器于安防监控系统应用方案 京准电钟:NTP校时服务器于安防监控系统应用方案 NTP校时服务器在安防监控系统中的应用方案主要通过高精度时间同步技术,解决设备间时间差异问题,确保日志、录像等数据的时间一致性…

Linux网络_应用层自定义协议与序列化_守护进程

一.协议 协议是一种 "约定". socket api 的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接 收的. 如果我们要传输一些 "结构化的数据" 怎么办呢? 其实,协议就是双方约定好的结构化的数据 像下面,两端都知道数据结构…

SQL命令详解之多表查询(连接查询)

目录 1 简介 2 内连接查询 2.1 内连接语法 2.2 内连接练习 3 外连接查询 3.1 外连接语法 3.2 外连接练习 4 总结 1 简介 连接的本质就是把各个表中的记录都取出来依次匹配的组合加入结果集并返回给用户。我们把 t1 和 t2 两个表连接起来的过程如下图所示: …

001-码云操作

码云操作 一、配置公钥1.官网地址1.进入 git bash2.查看生成的公钥3.设置到 Gitee4.测试 二、初始化一个项目1.新建仓库 一、配置公钥 方便后续提交代码不用填写密码 1.官网地址 官网地址:https://gitee.com/Git码云教程:https://gitee.com/help/arti…

30.[前端开发-JavaScript基础]Day07-数组Array-高阶函数-日期Date-DOM

JavaScript的DOM操作 (一) 1 什么是DOM? 认识DOM和BOM 深入理解DOM 2 认识DOM Tree DOM Tree的理解 3 DOM的整体结构 DOM的学习顺序 DOM的继承关系图 document对象 4 节点、元素导航 节点(Node)之间的导航&…

嵌入式学习前要了解的基础知识

一、电压和电流 在嵌入式开发中,电压和电流是两个基本的电气概念,对于理解和设计电子电路至关重要。它们直接影响到嵌入式系统的性能、功耗、可靠性和安全性。 电压(Voltage) 电压是电场力推动电荷移动的能力,通常以…

机器学习:强化学习的epsilon贪心算法

强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错…

共轭梯度法笔记

一、梯度下降法 x k 1 x k − α ∇ f ( x k ) x_{k1} x_k - \alpha \nabla f(x_k) xk1​xk​−α∇f(xk​) 这是普通的梯度下降公式,有两个量是关键,步长 α \alpha α和方向 ∇ f ( x k ) \nabla f(x_k) ∇f(xk​)。这里的方向直接选择了梯度方向&…

我的世界1.20.1forge模组开发进阶物品(7)——具有动画、3D立体效果的物品

基础的物品大家都会做了对吧?包括武器的释放技能,这次来点难度,让物品的贴图呈现动画效果和扔出后显示3D立体效果,这个3D立体效果需要先学习blockbench,学习如何制作贴图。 Blockbench Blockbench是一个用于创建和编辑三维模型的免费软件,特别适用于Minecraft模型的设计…

SpringBoot接口自动化测试实战:从OpenAPI到压力测试全解析

引言:接口测试的必要性 在微服务架构盛行的今天,SpringBoot项目的接口质量直接影响着系统稳定性。本文将分享如何通过自动化工具链实现接口的功能验证与性能压测,使用OpenAPI规范打通测试全流程,让您的接口质量保障体系更加完备。…

微软具身智能感知交互多面手!Magma:基于基础模型的多模态AI智能体

作者: Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 单位:微软研究院,马里兰大学,威斯康星大学麦迪逊分校…

Baklib云内容中台的核心架构是什么?

云内容中台分层架构解析 现代企业内容管理系统的核心在于构建动态聚合与智能分发的云端中枢。以Baklib为代表的云内容中台采用三层架构设计,其基础层为数据汇聚工具集,通过标准化接口实现多源异构数据的实时采集与清洗,支持从CRM、ERP等业务…

华为 VRP 系统简介配置SSH,TELNET远程登录

华为 VRP 系统简介&配置TELNET远程登录 1.华为 VRP 系统概述 1.1 什么是 VRP VRP(Versatile Routing Platform 华为数通设备操作系统)是华为公司数据通信产品的通用操作系统平台,从低端到核心的全系列路由器、以太网交换机、业务网关等…

从新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防护框架构建

从新加坡《AI系统安全指南配套手册》看可信AI全生命周期防护框架构建 一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术以前所未有的速度蓬勃发展,已然成为推动各行业变革与创新的核心驱动力。从医疗领域辅助疾病诊断,到金融行业的风险预测与智能投顾,再到交通领…