目录
引用计数算法
什么是引用
可达性分析算法(用的最多的)
引用计数算法
定义:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。
但是不能解决循环引用的问题,A引用B,B引用A,这个对象的引用计数就不可能为0.这两个对象不会被别的任何对象引用,却不会被回收
什么是引用
对象引用的四个等级:
为什么说要有这个设置:为了满足当内存空间还足够时,能保留在内存之中,如果内存空间在进行垃圾收集后仍然非常紧张,那就可以抛弃这些对象。
- 强引用:new Object(),只有当判断对象已经死的时候,才回收
- 软引用:在系统要发生oom,会回收所有的软引用对象,如果回收完,还是放不上这个对象,才溢出。,每次垃圾回收的时候,如果对象还没死,就不回收,但是在oom之前,不管有没有死,都会被回收。系统要发生oom,会回收所有的软引用对象,如果回收完,还是放不上这个对象,才溢出。
- 弱引用:在每次垃圾回收的时候,不管有没有引用,都会被回收。
- 虚引用:相当于什么时候回收都没问题,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的只是为了能在这个对象被收集器回收时收到一个系统通知
可达性分析算法(用的最多的)
当这个对象,与GCROOT对象没有关联的时候,就认为这个对象已经死亡了。GCROOT包括四类:两个栈两个方法区。(比如User对象在栈中有关联,或者说这个对象在方法区中有static用着他)