016. 垃圾回收机制
1. 自动垃圾收集 自动垃圾收集是查看堆内存,识别正在使用哪些对象以及哪些对象未被使用以及删除未使用对象的过程。 使用中的对象或引用的对象意味着程序的某些部分仍然维护指向该对象的指针。 程序的任何部分都不再使用的对象或未引用的对象,可以回收未引用对象使用的内存。 2. 如何确定内存需要被回收 该过程的第一步称为标记。这是垃圾收集器识别哪些内存正在使用而哪些不再使用的地方。 不同类型内存的判断方式 对象回收-引用计数 对象回收-可达性分析 方法区回收 可达性分析算法 简单来说,将对象及其引用关系看作一个图,选定活动的对象作为 GC Roots; 然后跟踪引用链条,如果一个对象和 GC Roots 之间不可达,也就是不存在引用,那么即可认为是可回收对象。 引用类型和可达性级别 引用类型 强引用(StrongReference):最常见的普通对象引用,只要还有一个强引用指向一个对象,就不会回收。 软引用(SoftReference):JVM 认为内存不足时,才会去试图回收软引用指向的对象(缓存场景)。 弱引用(WeakReference):虽然是引用,但随时可能被回收掉。 虚引用(PhantomReference):不能通过它访问对象。用于对象被 finalize 以后,执行指定逻辑的机制(Cleaner)。 可达性级别 强可达(Strongly Reachable)