什么是强引用弱引用软引用虚引用
时间: 2023-12-08 08:35:14 浏览: 45
强引用、弱引用、软引用、虚引用都是Java中用于垃圾回收的概念。
强引用:如果一个对象具有强引用,那么垃圾回收器就不会回收这个对象。即使内存不足,JVM也不会回收它,而是抛出OutOfMemoryError错误。例如:Object obj = new Object()。
弱引用:如果一个对象只具有弱引用,那么垃圾回收器可以在任何时候回收它。弱引用通过WeakReference类实现。例如:WeakReference<Object> weakRef = new WeakReference<>(new Object())。
软引用:如果一个对象只具有软引用,那么垃圾回收器只有在内存不足的情况下才会回收它。软引用通过SoftReference类实现。例如:SoftReference<Object> softRef = new SoftReference<>(new Object())。
虚引用:如果一个对象只具有虚引用,那么它就相当于没有引用。虚引用通过PhantomReference类实现。虚引用的作用是跟踪对象被垃圾回收的状态,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收之前把这个虚引用加入到与之关联的ReferenceQueue中。例如:PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), new ReferenceQueue<>())。
相关问题
java 强引用 软引用 弱引用 虚引用
Java中的引用是用来管理对象的内存分配和收的机制。Java中的引用可以分为四种类型:强引用、软引用、弱引用和虚引用。
1. 强引用(Strong Reference):
强引用是最常见的引用类型,也是默认的引用类型。当一个对象被强引用关联时,垃圾回收器不会回收该对象。只有当没有任何强引用指向一个对象时,该对象才会被回收。
2. 软引用(Soft Reference):
软引用是一种相对强引用弱化了一些的引用类型。当系统内存不足时,垃圾回收器会尝试回收软引用关联的对象。可以通过SoftReference类来创建软引用。
3. 弱引用(Weak Reference):
弱引用比软引用更弱化了一些。当垃圾回收器进行垃圾回收时,无论内存是否充足,都会回收弱引用关联的对象。可以通过WeakReference类来创建弱引用。
4. 虚引用(Phantom Reference):
虚引用是最弱化的一种引用类型。虚引用的存在主要是为了跟踪对象被垃圾回收器回收的活动。虚引用关联的对象在任何时候都可能被垃圾回收器回收,但无法通过虚引用来获取对象的引用。可以通过PhantomReference类来创建虚引用。
强引用、弱引用、软引用、虚引用
强引用(Strong Reference)是指直接引用一个对象,当一个对象存在强引用时,垃圾回收器不会回收该对象。只有当一个对象没有任何强引用时,垃圾回收器才会回收该对象。
弱引用(Weak Reference)是指对一个对象的引用,但不会阻止该对象被垃圾回收器回收。当一个对象只有弱引用时,垃圾回收器在下一次运行时可能会回收该对象。
软引用(Soft Reference)是一种比弱引用更强的引用类型。当内存不足时,垃圾回收器在对对象进行回收前,会先回收软引用。通过软引用可以实现对内存敏感的缓存。
虚引用(Phantom Reference)是最弱的一种引用类型。一个对象存在虚引用时,垃圾回收器无法通过它来获得该对象的引用,也无法通过虚引用来操作该对象。虚引用的主要作用是辅助对象被回收时的处理操作。