android GC内存回收小析

由于时间问题,简单的谈谈自己的理解。

大家都知道,在android开发中,不需要自己去管理,有垃圾回收机制会自动帮我们去回收

没有被引用到的对象。

那垃圾回收机制到底是怎样的呢?下面列出本人的一些理解。

垃圾回收的线程:

之前是在主线程做的,后面移到优先级比较低的线程中进行。

之前是单一线程,后面是多线程。

垃圾回收的时机:

app空闲的时候

内存紧张的时候

分配大的内存块不够用的时候。

回收的方式:

不采用分代技术:会一次性gc会遍历所有的对象,这样很费时

采用分代技术:分为年轻代,老年代,持久代。这样可以把生命周期短的,大小小的对象放到年轻代去

一次gc可以只遍历年轻代,只要释放的内存足够就可以不去遍历老年代等。

回收起点:

垃圾回收线程会从“根集(Root Set)”开始进行对象引用的遍历。

所谓的“根集”,就是正在运行的线程中,可以访问的引用变量 的 集合(比如所有线程当前函数的参数和局部变量、当前类的成员变量等等)。

垃圾回收线程先找出被根集直接引用的所有对象(不妨叫集合1),

然后再找出被集合 1直接引用的所有对象(不妨叫集合2),

然后再找出被集合2直接引用的所有对象......如此循环往复,直到把能遍历到的对象都遍历完。

凡是从根集通过上述遍历可以到达的对象,都称为可达对象或有效对象;反之,则是不可达对象或失效对象(也就是垃圾)。

回收的算法:

引用计数

标记法

对象树

回收的监控

可以重写Object finalize()函数。这个函数会在Object回收之前被调用

详细信息可以查阅下面地址:

http://hulefei29.iteye.com/blog/658546

时间: 2024-10-10 08:38:36

android GC内存回收小析的相关文章

Android gc垃圾回收研究学习

尊重个人劳动成果,转载请注明出处:http://blog.csdn.net/hnulwt/article/details/44903331 文中很多内容说到了JVM,我想通过研究学习JVM来达到认识DVM的目的.为了严谨,查询了一下 JVM和DVM的不同点 1.Dalvik 和标准 Java 虚拟机(JVM)的首要差别 Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短. 2.Dalvik 和 Java 字节码的区别 Dalvik

Android 操作系统的内存回收机制(转载)

http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/index.html Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化, 使得其进程调度与资源管理与其他平台的 Linux 有明显的区别.主要包含下面几个层次: Application FrameworkApplication

Android 操作系统的内存回收机制

转自:http://android.jobbole.com/25169/ 简介:Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使应用程序关闭但不退出,并由操作系统进行进程的回收管理.本文在 Application Framework 与 Linux 内核两个层次上,以进程为粒度,对 Android 操作系统的进程资源回收机制进行了剖析.读者可以从本文获得对 Android 应用程序的生存周期的进一步理解

Android 操作系统的内存回收机制[转]

转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/ Android APP 的运行环境 Android 是一款基于 Linux 内核,面向移动终端的操作系统.为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使得其进程调度与资源管理与其他平台的 Linux 有明显的区别.主要包含下面几个层次: Application Framework Application Framewo

gc内存回收机制

判断哪些对象可回收 GC是通过对象是否存活来决定是否进行回收,判断对象是否存活主要有两种算法:引用计数算法.可达性分析算法 引用计数算法 引用计数的算法原理是给对象添加一个引用计数器,每被引用一次计数器加1,引用失效时减1,当计数器0后表示对象不在被引用,可以被回收了,引用计数法简单高效,但是存在对象之间循环引用问题,可能导致无法被GC回收,需要花很大精力去解决循环引用问题 可达性分析算法 可达性分析的算法原理是从对象根引用(堆栈.方法表的静态引用和常量引用区.本地方法栈)开始遍历搜索所有可到达

Android Hook Dexposed原理小析

dexposed是阿里巴巴在xposed框架上面开发的hotpatch一套框架 当然hotpatch的方式有很多,这里先介绍下dexposed原理 Demo中有个test函数, 在调用hook之前正常返回”11111”; 调用hook之后, 却返回”newTestMethod”, 被我们给修改了 public class Demo { String TAG = "===[hookdemo]==="; public static String staticTest(String para

Unity游戏内存回收的优化(译)

原文Optimizing garbage collection in Unity games.这里是对这篇文章的粗略翻译,当作自己的笔记. Garbage Collector在这里被翻译成名词GC.对于Garbage Collection这里翻译成动词内存回收. 内存垃圾: 代码中销毁了(disposed)但是GC还没有清理的内存. Unity的托管内存的简单介绍 为了理解GC(本文GC指代Garbage Collector)在内存分配和回收时是怎样工作的,我们必须首先了解Unity的引擎代码和

2 - JVM随笔分类(JVM堆的内存回收)

JVM常用的回收算法是: 标记/清除算法 标记/复制算法 标记/整理算法 其中上诉三种算法都先具备,标记阶段,通过标记阶段,得到当前存活的对象,然后再将非标记的对象进行清除,而对象内存中对象的标记过程,则是使用的  “根搜索算法”,通过遍历整个堆中的GC ROOTS,将所有可到达的对象标记为存活的对象的一种方式,则是 “根搜索算法”,其中根是指的“GC ROOTS”,在JAVA中,充当GC ROOTS的对象分别有:“虚拟机栈中的引用对象”,“方法区中的类静态属性引用的对象”,“方法区中的常量引用

Android内存优化1 了解java GC 垃圾回收机制3

引言 接App优化之内存优化(序), 作为App优化系列中内存优化的一个小部分. 由于内存相关知识比较生涩, 内存优化中使用到的相关工具, 也有很多专有名词. 对Java内存管理, GC, Android内存管理, Dalvik/ART等知识有一个理论的认识, 可以让我们更好的使用这些工具, 分析内存问题. 据此, 我们就先从理论入手, 聊聊GC那些事儿. 1, 何为GC GC 是 garbage collection 的缩写, 垃圾回收的意思. 也可以是 Garbage Collector,