Android内存相关补充

Linux OOM 基本原理解析 Linux内存管理是一门庞大的学问,内存回收作为其中的一部分也是十分复杂的,我们今天给大家大概介绍了内核的内存回收概览,并详细的介绍了OOM Killer机制,也算是抛砖引玉让大家对内存回收有个初步的认识。 阅读详情

内存泄露和内存溢出

内存泄露

程序在申请内存后,被某个对象一直持有,无法释放已申请的内存。一次内存泄露危害可以忽略,但堆积起来的后果很严重,无论多少内存,都会被耗光。
一般发生在方法区、堆内存、虚拟机栈

典型:长生命周期对象持有短生命周期对象的引用,导致短生命周期对象无法销毁。
单例持有Activity的引用
静态变量持有Activity的引用
非静态内部类默认持有外部引用,当非静态内部类生命周期更长时会发生内存泄露(handler、thread、asyncTask等)
资源未释放导致内存泄露

内存溢出

指程序在申请内存时,没有足够的内存空间供其使用
一般发生在堆内存、虚拟机栈

堆内存溢出典型:生产者与消费者,消费速度跟不上生产速度。类结构没有控制好,出现循环引用。
栈内存溢出典型:

内存抖动

指在短时间内有大量的对象被创建或者被回收的现象,主要原因是频繁创建对象。

典型:
在draw方法中创建对象,例如paint、path等
在onTouchEvent中创建对象
频繁创建message对象

危害:
内存抖动频繁,会导致GC频繁,影响性能

解决办法:
避免循环体内或者被频繁调用的方法中创建对象
对于能够复用的对象,尽量用对象池将他们缓存起来

垃圾回收机制

栈内存、堆内存、方法区

方法区

类信息、常量信息、静态变量

栈内存

对象引用、方法内的局部变量(静态方法内的也是)

堆内存

对象实例

新开线程

新开线程会创建新的栈内存,不同栈内存之间完全独立,不能相互调用

final

使用final修饰后,相当于将变量提到方法区中存放,所以可以在不同线程间调用

GC方式

引用计数法和GCRoot引用链

GC回收步骤

标记清除法

首先标记所有可回收的对象,在标记完成后统一回收所有被标记的对象,同时会产生不连续的碎片。

碎片过多导致以后程序运行时需要分配较大对象时,无法找到足够的内存,而不得以再次出发GC。

标记整理法
  1. 标记所有可回收的对象
  2. 将存活的对象都向一端移动,然后清理掉边界以外的内存

需要开辟专门的空间存放存活的对象,可用内存会减少。

内存划分

在这里插入图片描述

  1. 内存划分为堆内存和非堆内存,堆内存分为年轻代、老年代,非堆内存就一个永久代(方法区)
  2. 年轻的又分为Eden(生成区)和Survivor(幸存区)区,Survivor区由FromSpace和ToSpace区,生成区栈大容量,幸存区两个区占小容量,默认比例是8:1:1
  3. 堆内存用途,存放的事对象,垃圾收集器就是收集这些对象,然后根据GC算法回收。
  4. 非堆内存用途:永久代,也称为方法区,存储程序运行时长期存活的对象,比如类的元数据、方法、常量、属性等。
  5. 对象在生成代生成,经过多次GC后依然存活,会放到幸存区,继续经过多次GC后依然存活,会放到老年代。
  6. 栈内存存在于高速缓冲区中
移动平台相关(安卓) 调用Android中的方法,就会得到字符串,然后字符串回调给这个方法↑这个方法再映射到Unity中。int类型会默认被当成是索引的重载,所以数组本身是int,那就只能通过指定索引来删了。只要别人提供的不是Unity的SDK,而是安卓的SDK,就都需要进行这一步交互项目的创建。再打开其中的com文件夹,复制其中的unity3d文件 粘贴到对应路径下的com中。接下来,根据文档中的说明改写配置,但要注意不要全部复制,官方的写法版本可能较老。如果记不住优先级,那么就直接用括号把你想优先运算的部分给括起来。 阅读详情

相关推荐

【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 **数据驱动**的**坐标发现与方程发现算法**。想回答的问题很简单,就是根据数据写方程。 想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有从牛顿视角,完全去思考牛顿所想。而是利用现有的**深度学习技术** 和 **动力学重构的方法** 。提出了一种框架,基于现有的计算机技术,去发现物质运动背后的物理规律。 这里直接给出这篇方法的核心思路图,我们后面会逐个讲解。

qq5q13638的博客 2454

如何应对 Android 面试官 -> 手写 APM 核心实现

本文介绍了如何手写一个APM(应用性能监控)框架,重点关注稳定性、网络、电量、内存等核心指标。首先补充了SO动态加载的常见问题及解决方案ReLinker框架,然后详细阐述了APM框架的设计思路。通过定义ITracker接口和ActivityLifecycleCallbacks抽象类规范各模块采集逻辑,并以电量检测为例,展示了具体实现方式:利用BroadcastReceiver获取电量信息,在Activity生命周期回调中采集数据并回调。整体架构参考了ArgusAPM和Matrix等开源项目,为开发高性能应用

IT_Android的博客 512

TCN实战:用Python手把手搭建时序预测模型(附完整代码)

本文详细介绍了如何使用Python搭建TCN(Temporal Convolutional Network)时序预测模型,包括数据预处理、模型架构实现、训练调优及预测评估。通过完整的代码示例和实用技巧,帮助开发者快速掌握TCN在时间序列预测中的应用,特别适合处理长期依赖问题。

weixin_29041195的博客 372

ActivityManagerService解读之进程管理(相关信息持续补充)

在介绍updateOomAdjLocked方法之前,我们先补充一些进程相关的信息,便于后续更好的理解。 进程/轻量级进程状态 S:Suspended 可中断的睡眠,可能是由于输出 Trace、GC 或 debug 被暂停 R:Running/Runnable 运行或就绪状态 D:Disk Sleep 不可中断的睡眠,通常是在等待 I/O,比如磁盘 I/O、网络 I/O...

为码消得人憔悴 930

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

本文详细介绍了如何使用VSCode搭配Keil进行STM32开发,从环境配置到代码跳转的全流程指南。通过安装必备插件和正确配置项目文件,开发者可以在VSCode中享受现代编辑器的便捷功能,同时保留Keil的编译调试能力,提升嵌入式开发效率。

weixin_28832121的博客 253

如何制作Mike21溢油模型围油栏文件

这段时间群友在做海洋环评的做了一个MIKE21的溢油模型,溢油模型其实也是ECOLAB模块的应用,而在海上发生溢油事件的时候,为防止溢油对海洋生态的破坏,经常使用的一种手段就是使用围油栏技术将溢油控制在一定范围并进行处理。今天小编就给大家说说在MIKE21里怎么实现围油栏文件的制作

zhuzhujiayoua的博客 1329

Android学习之路之数据存储(三)

Android有五种主要存储方式的用法,下面,我们将要讲解一下Application与内容提供器ContentProvider

捌椒的博客 1058

AI Agent在智能腰带中的姿势矫正与提醒

随着人们生活方式的改变,长时间不正确的坐姿、站姿等不良姿势问题日益普遍,这不仅会导致身体疲劳,还可能引发颈椎病、腰椎病等多种健康问题。智能腰带作为一种可穿戴设备,具有实时监测人体姿势的潜力。本研究的目的是将AI Agent引入智能腰带,实现对人体姿势的准确识别、矫正与提醒功能。本研究的范围涵盖了从AI Agent的核心算法原理到智能腰带的实际开发与应用。包括传感器数据的采集与处理、机器学习算法的选择与训练、智能腰带的硬件设计与软件开发,以及在不同场景下的实际应用测试。本文共分为十个部分。

AI 原生应用开发的博客 343

android突然断电丢失程序,android 设备写入文件,立即断电重启后,文件丢失

在android开发的过程中碰到写入文件后,立即断电重启,发现写入的文件丢失了写入时检查了,写入是没有失败的,经过查找资料可能是如下问题引起:Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。可能是因为断电时,文件没有写入的物理介质中导致,解决办法如下:在write/fwrite写入后,添加fsync(), 这样可以将缓存中的...

weixin_39785081的博客 1065

【Windows Server 2019】活动目录 (Active Directory) ——理论

博文介绍了活动目录 (Active Directory) 的定义,作用以及与 DNS 的关系。同时也介绍了AD的组织结构,包括域控制器,子域,对象,属性,容器,组织单位,域间信任等术语的解释,实验拓扑图。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 7746

【unity实战】Unity手搓脚本工具实现合并网格功能

本文介绍了在Unity中优化网格性能的方法,通过合并重复网格减少绘制调用。主要使用Mesh.CombineMeshes方法实现网格合并,支持统一材质和多材质处理。核心内容包括:1)基础合并脚本实现,将子网格合并到父对象并禁用原网格;2)统一材质设置,支持自定义或默认材质;3)多材质合并方案,通过设置mergeSubMeshes=false保留子网格材质索引。文章还提供了完整代码示例和操作演示,适用于实际项目中的网格优化需求。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 557

App客户端性能测试点总结

一、内存 测试范围1. 空闲状态下的应用内存消耗情况2. 中等规格状态下的应用内存消耗情况3. 满规格状态下的应用内存消耗情况4. 应用内存峰值情况5. 应用内存泄露情况6. 应用是否常驻内存7. 压力测试后的内存使用情况 测试方法1. 第三方工具emmage,GT,itest,wetest2. 使用 android 提供的 adb shell dumpsys meminfo |gr...

weixin_30600197的博客 3212

交货单冲销发货过账的正确姿势:用 VL09 与 ABAP 批量反冲 Goods Issue

摘要 本文详细解析了SAP系统中VL09事务码的技术实现与业务应用。VL09用于反冲发货的货物移动,通过标准冲销路径(移动类型602冲销601)确保单据链路一致、状态机正确回退和业务规则生效。文章对比了经典VL09与Fiori应用在不同SAP产品形态中的位置,并针对STO场景提供了ME23N验证方法。核心内容包括WS_REVERSE_GOODS_ISSUE函数模块的调用要点、必须COMMIT的原因(SAP LUW机制),以及处理Handling Unit等限制条件的注意事项。最后给出了将VL09工程化的项目

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 588

Android面试题目及其答案

From http://blog.youkuaiyun.com/wwj_748/article/details/8868640 1、Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念     DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux中的一个进程,所

yuxiaohui78的专栏 2768

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

工作常用命令以及备忘

用于更改 机器横竖屏的文件 --2024.0417前言:SkgSystemUI ,MenuUi之类的一直存活的应用,好像是可以动态调用Service,其他静态类都是打包调用AIDL学习总结:1.先声明aidl文件,文件名与对应Service文件名前加一个I相同,aidl中的'文件同名'接口声明所有对应Service的方法。

qq_45698981的博客 633

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

安卓逆向系列补充(三)

dex文件被转换为.oat文件后,其中的类定义以本地代码的形式存在,这使得类加载器可以更快速地加载并执行这些类。如果禁用了dex2oat,类编译解释执行的地方,那么interprter编译/解释执行,存在有海量的脱壳点。本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。2.找到一个跟login相关的activity,如果还原完成的话,那么就能看到完整的函数,不再是看到一些接口。”,原创技术文章第一时间推送。

qq_41256010的博客 1902

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

安卓资源网站整理/工具推荐

提示:可以使用 ctrl+F 进行页面内搜索. 一、网站 1. 安卓/Kotlin 官方网站 安卓开发者网站 Kotlin 官网 2. 学习类网站/博客 玩安卓 wanandroid henCoder 码上开学 优快云 掘金 GitHub 郭霖的博客 鸿洋的博客 陈小缘的博客 究极逮虾户的博客 以上部分网站也包括一些很有用的资源,之后不再列出。 3. 资源类网站(不含学习类网站) Maven 仓库,可以下载各种 jar 包等资源。 Gradle 二、工具推荐 部分资源有链接(下载链接,或使用方式介绍链接)

czadev的博客 2186

Android内存泄漏详解

先说GCRoot根,GCRoot根有以下几种引用类型的静态变量常量引用的对象虚拟机栈(本地变量表)中引用的对象存活的线程对象本地方法栈JNI中引用的对象class对象GCRoot根的特点就是被GCRoot根引用的对象会虚拟机判定为不可回收对象,也就是GC时不做回收处理而GCRoot树就是被这些GCRoot根引用的一系列引用的集合,比如一个存活的线程中如果调用了Activity,那么这个Activity就无法被Thread回收。

行知致简的专栏 1758

豁然开朗篇:安卓开发中关于内存那些事

你有没有想象过你所写的每一句代码,在内存里是怎么分布的,搞清楚这个问题,你对编程的理解又上升到一个高度了 首先,如果对于java虚拟机的内存划分不清楚的同学,可以先去了解一下java虚拟机把java程序加载到内存以及内存的分布是怎样的,因为接下来一些知识点比如堆、方法区、虚拟机栈等是需要你对java虚拟机对于java程序运行时的内存划分区域有一定的认识,因此等理解之后再来看本文会有更好的效果。

qq_39867049的博客 1528

Window下QtForAndroid Qt5.12.12 安卓开发环境搭建超详细步骤

Qt安卓开发环境搭建

weixin_44111250的博客 4292

Android 内存泄漏检测开源库LeakCanary 研究

1. Android 内存现状 Facebook 有一个叫 device-year-class 的开源库,它会用年份来区分设备的性能 2. Android 内存空间会引发的问题 PSS : Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)PSS相对于RSS计算共享库内存大小是按比例的。N个进程共享,该库对PSS大小的贡献只有1/N。 VSS : Virtual Set Size 虚拟耗用内存(包含共享库占用的内存),即单个进程全部可访问的地址空间,其大小

怪咖先森的博客 5522

【转】android 内存泄漏相关收藏博客。

关于android内存泄漏的研究 博客建了几个月,都没有去写,一是因为当时换工作,然后又是新入职(你懂的,好好表现),比较忙;二是也因为自己没有写博客的习惯了。现在还算是比较稳定了,加上这个迭代基本也快结束了,有点时间来写写博客。好了,废话少说,下面进入正题,关于android内存泄漏的研究: 最近参与公司项目的迭代,发现这个几百万用户量的项目经过这么多的迭代了,还是一直存在严重...

weixin_30361641的博客 80

Android系统获取内存状态

Android系统提供了很多方法来获取当前系统以及指定进程的内存状态。在此进行说明。 1.使用相关工具获取 1)DDMS。System Information->Memory usage 2)APT 插件,监视内存及CPU使用。 3)adb dumpsys 命令: adb shell dumpsys meminfo <package_name> 其中,package_name 也可以换成程序的pid,pid可以通过adb she...

王温暖的博客 1758

安卓 Android方向就业 保姆级最全准备攻略

求职规划 学习规划(todo:自主化//要求 可改正 ) 时间点 ​ 时间 内容 大二下 实习准备 暑假 中小厂实习 大三上 脱产实习(1.询问先例 正规性 /非正规性 ) 大三下学期 春招实习 暑假 暑假正式实习 大四上学期 秋招(9月-11月)(正式秋招,实习转正) 大四下学期 春招补录(3月-5月) 需要 学习基础–>写项目—>找实习—>找工作 写简历(技术栈 写项目 比赛获奖) -->准备笔试 -->准备面试 -->

m0_54562681的博客 3038

Android6运行所需内存大小,Android手机的运行内存要多少才合适

Android手机的内存发展非常快,从最早的192MB已经飙升到了6G乃至8G,似乎在Android手机上,对于内存的需求就像无底洞,现在的iPhoneX也不过才3G内存,那么为什么Android手机需要这么多的内存呢?是Android系统优化不好吗?原因Android系统需要这么多的内存主要是因为Linux内核,因为是从Linux改进而来的,因此内存管理机制与Linux很相似。每次打开Andro...

weixin_39684495的博客 1076
上一篇: JVM虚拟机与Android虚拟机
下一篇: 从synchronized入手看锁
gitzzp
博客等级 码龄11年 307粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值