目录
1.8种基本数据类型
2.引用类型
强引用(Strong Reference)
- 定义:强引用是最常见的引用类型,也是默认的引用类型。当一个对象具有强引用时,垃圾回收器不会回收该对象,即使内存不足,垃圾回收器也不会回收具有强引用的对象。
- 特点:只要强引用存在,垃圾回收器就永远不会回收被引用的对象。
- 示例:
Object obj = new Object();
在这个例子中,obj
就是对new Object()
创建的对象的强引用。
软引用(Soft Reference)
- 定义:软引用用于描述还有用但并非必需的对象。在内存不足时,垃圾回收器会回收具有软引用的对象以释放内存。
- 特点:软引用是Java提供的一种较为灵活的引用方式,它允许对象在内存不足时被回收,但又不像弱引用那样在每次垃圾回收时都被回收。
- 应用场景:缓存的实现。
- 示例:
SoftReference<Object> softRef = new SoftReference<>(new Object());
弱引用(Weak Reference)
- 定义:弱引用也用于描述还有用但并非必需的对象。与软引用不同的是,垃圾回收器只要发现了就会回收具有弱引用的对象,而不管内存是否足够。
- 特点:弱引用的对象拥有更短暂的生命周期,比软引用更加容易被垃圾回收器回收。
- 应用场景:某些需要避免内存泄漏但又不想永久持有对象的场景。
- 示例:
WeakReference<Object> weakRef = new WeakReference<>(new Object());
虚引用(Phantom Reference)
- 定义:虚引用也被称为幽灵引用,它的存在主要是为了跟踪对象被垃圾回收器回收的活动。虚引用不能单独使用,必须和引用队列(ReferenceQueue)一起使用。
- 特点:虚引用无法通过
get()
方法获取到对象实例,它的主要作用是当对象被回收时,将这个虚引用加入到与之关联的引用队列中,以便收到对象被回收的通知。 - 应用场景:在NIO中,虚引用被用于管理堆外内存。
- 示例:
PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), referenceQueue);
自定义引用类型
虽然Java标准库中只明确提供了上述四种引用类型,但理论上,通过继承java.lang.ref.Reference
类,开发者可以创建自定义的引用类型。然而,在实际应用中,自定义引用类型并不常见,因为Java提供的四种引用类型已经能够满足大部分需求。