首先GC是垃圾回收,和java类似,Android也有由GC来自动回收内存的。
虽然每一个应用启动,JVM都会为其分配dalivk虚拟机,但最大一般也只有20M,有限的。
Generally speaking,GC是在较低优先线程运行的。众所周知,GC是用来释放内存的,所以他的任务就是检测“无效”内存,并有可能地释放内存。
为什么这么说呢?
一般GC采用的办法是引用计数法来判断一个内存单元(一个变量)是否是无效的内存。引用计数法简单的说就是指一个变量或是一块内存当前被引用的次数,如果引用的次数等于0,则可以表示这个变量或是这块内存没有被引用了,那么GC“很可能”就会去释放他了。
这也就是上文所说的可能。
说了这么多,该进入正题了,那就是引用。
强引用 StrongReference:
一般我们常用到的引用就是强引用,比如上面提到的引用计数法里面的引用。
软引用 SoftReference:
对于GC来说, SoftReference的强度明显低于 SrongReference。SoftReference修饰的引用,其告诉GC:我是一个 软引用,当内存不足的时候,我指向的这个内存是可以给你释放掉的。
弱引用WeakReference:
对于GC来说, WeakReference 的强度又明显低于 SoftReference 。WeakReference 修饰的引用,其告诉GC:我是一个弱 引用,对于你的要求我没有话说,我指向的这个内存是可以给你释放掉的。
虚引用 PhantomReference:
虚引用其实和上面讲到的各种引用不是一回事的,他主要是为跟踪一个对象何时被GC回收。