在Java中,引用类型主要有四种,分别是:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。这些类型通常与垃圾回收机制有关,用来描述对象的生命周期和可达性。下面详细介绍每一种引用类型:
-
强引用(Strong Reference)
强引用是最常见的引用类型,当在代码中创建一个对象并赋值给一个引用变量时,这个引用就是强引用。例如:String str = new String("Java");
只要强引用还存在,垃圾回收器永远不会回收被引用的对象。强引用可能导致内存泄漏,因为即使对象已经不再需要了,只要强引用还在,对象就不会被回收。
-
软引用(Soft Reference)
软引用是为了解决内存敏感的缓存问题而设计的。通过java.lang.ref.SoftReference
类可以创建软引用。垃圾回收器在系统内存不足时会回收这些对象。软引用通常用于实现内存敏感的高速缓存,例如,图片缓存。软引用可以让缓存的对象在内存充足时被保留,而在内存不足时被回收。SoftReference<String> softReference = new SoftReference<>(new String("Java"));
-
弱引用(Weak Reference)
弱引用通过java.lang.ref.WeakReference
类实现。弱引用不阻止它的对象被垃圾回收器回收。垃圾回收器一旦发现只有弱引用指向的对象,不管当前内存空间足够与否,都会回收它。弱引用比软引用更弱,它主要用于实现没有阻止垃圾收集的引用链,例如,常见于元数据、查找大型结构的关键等。WeakReference<String> weakReference = new WeakReference<>(new String("Java"));
-
虚引用(Phantom Reference)
虚引用是最弱的一种引用类型,通过java.lang.ref.PhantomReference
类实现。一个具有虚引用的对象,跟没有引用一样,在任何时候都可能被垃圾回收器回收。设置虚引用的唯一目的是在这个对象被回收时收到一个系统通知。虚引用必须和引用队列(ReferenceQueue)联合使用。虚引用主要用于跟踪对象被垃圾回收的活动,例如,确保对象完全销毁后进行某些特定资源的清理。PhantomReference<String> phantomReference = new PhantomReference<>(new String("Java"), new ReferenceQueue<>());
强引用、软引用、弱引用和虚引用每种类型都有各自特定的使用场景和目的,开发者可以根据不同的需求选用不同的引用类型来管理内存使用和优化应用性能。在处理大对象或缓存时,合理运用不同的引用类型可以有效预防内存泄露和过早回收。
标签:Java,Reference,对象,回收,例子,引用,new From: https://www.cnblogs.com/megumi-miyabi/p/18133042