一、GC 背景知识
副标题:《深入理解 Java 虚拟机》读书笔记(2)
推荐阅读:面试必问之JVM篇
1.1 GC 背景
GC:garbage collection。
程序计数器、虚拟机栈、本地方法栈这三个区域随线程生灭,所以不需要过多考虑内存的回收问题。而 Java 堆和方法区则不同,不同之处在于:
- 一个接口的多个实现类需要的内存可能不一样;
- 一个方法的多个分支需要的内存可能不一样。
只有程序运行期间时才能知道会创建哪些对象,这部分内存分配是动态的,是垃圾收集器所关注的部分。
1.2 四种引用类型
- 强引用,Strong Reference。类似
Dog dog = new Dog();。 - 软引用,Soft Reference。只有内存不足时,JVM 才会回收该对象。属于
java.lang.ref.SoftReference,一般用来实现缓存(如图片缓存、网页缓存,有用但非必须)。 - 弱引用,Weak Reference。当 JVM 进行 GC 时,无论内存充足与否,都会被回收的对象。属于
java.lang.ref.WeakReference,一般用来在回调函数中防止内存泄漏。 - 虚引用,Phantom Reference。仅用在,这个对象呗收集器回收时收到一个系统通知。
