内存溢出 OOM
内存泄漏 OOM Android 的 Java 程序为什么容易出现 OOM Android 中一个进程对应着一个虚拟机,Android 系统对虚拟机的 vm heapsize 做了限制,当 Java 进程申请的 Java 堆空间超过阈值时,就会 OOM查看进程 headpsize 限制:adb shell getprop,查看 dalvik.vm.heapsize 值 h...
内存泄漏 OOM Android 的 Java 程序为什么容易出现 OOM Android 中一个进程对应着一个虚拟机,Android 系统对虚拟机的 vm heapsize 做了限制,当 Java 进程申请的 Java 堆空间超过阈值时,就会 OOM查看进程 headpsize 限制:adb shell getprop,查看 dalvik.vm.heapsize 值 h...
内存泄漏 Memory Leak 内存泄漏定义 本该被回收的对象,因为某些原因(有对象正在持有该应该回收对象的引用)而不能被回收,从继续停留在堆内存中。本质原因:对象 A(持有引用者)的生命周期 > 被引用者(对象 B)的生命周期,从而导致对象 B 需要在生命周期结束时,而无法正确被回收。 检测内存泄漏 检测内存泄漏非常简单,只需要拿到 hprof 文件进行分析就可以知道哪里产...
内存抖动 内存抖动 什么是内存抖动? 是内存抖动是由于短时间内有大量对象进出 Yong Generation 区导致的,它伴随着频繁的 GC。通常发生内存抖动时,在 AS 的 Monitors 可以看到,内存曲线短时间内波动很大。 如何避免内存抖动 尽量避免在循环体内部创建对象,应该把对象创建移到循环体外 注意自定义 View 的 onDraw() 方法会频繁被调用,所以...
内存优化基础 物理内存和虚拟内存 现代操作系统都不直接操作物理内存,而是虚拟内存。App 申请的内存也都是虚拟内存。对于每个 app 来说,在 32 位操作系统,都认为自己的进程独享 2^32 容量的虚拟内存,实际上占用多少物理内存,用的时候再去分配,64 位系统是 2^48,而不是 2^64,因为 256TB 足够大了,用 2^64 会有大量寻址空间浪费。 虚拟内存分为用户空间和内核...
hprof 基础 什么 hprof 文件? hprof 是由 JVM TI Agent HPROF 生成的一种二进制堆转储格式,hprof 文件保存了当前 Java 堆上所有的内存使用信息,能够完整的反映虚拟机当前的内存状态。保存的对象信息和依赖关系是静态分析内存泄漏的关键。 如何抓取 hprof 文件 1. Debug.dumpHprofData(path) 但这个 dump 过...
锁优化 目标:减少 CPU 空转 避免锁竞争 by lazy 使用 by lazy 时需要注意几个性能相关的点: 初始化成本:虽然延迟初始化可以推迟成本,但初始化时的开销仍然存在 内存占用:lazy 对象会持有初始化 lambda 的引用 多生成一个对象? 线程安全开销:默认的同步模式会有一定的性能开销 可以通过配置 lazy 的模式来优化性能: priva...
AndroidX AsyncLayoutInflater 见 [[AsyncLayoutInflater]] 异步加载,协程 OkLayoutInflater/oklayoutinflator/src/main/java/tech/okcredit/layout_inflator/OkLayoutInflater.kt at master · okcredit/OkLayoutInfl...
Maven 基础 POM 和 GAV 什么是 POM? POM(Project Object Model),项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,pom.xml 就是这个模型文件。 Pom. Xml 文件中声明了当前项目的坐标,引入的依赖,打包的方式,以及 maven 管理使用到的插件等配置信息,是 maven 项目的核心配置文件...
Gradle 插件之 maven-publish maven-publish 介绍 maven-publish 官方文档:publishing_maven.htmlmaven 插件已经过时,官方推荐使用 maven-publish 插件来实现将我们的代码发布到 Apache Maven 仓库的功能。 maven-publish 插件引入 groovy 脚本引入 // bui...
AAR https://developer.android.com/studio/projects/android-library?hl=zh-cn#aar-contents 什么是 AAR? AAR 文件(名字来源于 Android Archive,见名知义,是一个 Android 库项目的二进制归档文件),这个不仅可以把 Java 文件给打进去,还包含 AndroidManifes...