GC
采用分代的方式回收内存,关于对垃圾进行回收,被引用的对象是存活的对象,而不被引用的对象是死亡的对象也就是垃圾,GC要区分出存活的对象和死亡的对象,也就是垃圾标记,并对垃圾进行回收
4个引用:
1)强引用:指在程序代码中国普遍存在的,类似于“Object object=new Object()”这类的引用,只要强引用还存在,GC就永远不会回收掉被引用的对象;
(2)软引用:用来描述一些有用但是非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会跑出内存溢出异常,在JDK1.2后有SoftReference 实现软引用。
(3)弱引用:用来描述非必须对象,但是其强度比软引用更弱一些,被弱引用关联的对象只能生存岛下一次垃圾收集发生之前。当GC工作时,无论当前内存是否足够,都会回收掉只被软引用关联的对象。JDK1.2之后提供了WeakReference类来实现弱引用。
(4)虚引用:也称幽灵引用或者幻影引用,他是最弱的一种引用关系。一个对象是否有虚引用的存在我拿全部会对其生存时间构成影响,也无法通过虚引用来取得一个度喜爱你那个的实例。兑一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。 在JDK1.2后提供了PhantomReference 类来实现虚引用。
垃圾标记算法
1垃圾标记算法:引用
2根搜索算法:GC-roots
Java栈中的引用的对象。
本地方法栈中JNI引用的对象。
方法区中运行时常量池引用的对象。
方法区中静态属性引用的对象。
运行中的线程
由引导类加载器加载的对象
GC控制的对象
3分代回收
http://liuwangshu.cn/java/jvm/3-garbage-mark.html