强引用 弱引用 软引用
时间: 2024-02-10 14:58:35 浏览: 37
强引用指的是一个对象被强引用指向(被一个引用直接指向),它就不会被垃圾回收器回收。只有在没有任何强引用指向该对象的时候,该对象才会被回收。
弱引用是一种指向对象的引用,但是不会阻止该对象被垃圾回收。如果一个对象只有弱引用指向它,那么垃圾回收器会在下一次垃圾回收的时候将该对象回收。
软引用是弱引用的一种扩展,通常用于实现缓存功能。在使用软引用指向一个对象时,当内存不足时,该对象可能会被回收;但如果内存充足,该对象不会被回收,可以通过软引用再次获取到该对象。
相关问题
什么是强引用弱引用软引用虚引用
强引用、弱引用、软引用、虚引用都是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中,根据对象是否被GC回收分为四种引用类型:强引用、软引用、弱引用和虚引用。其中,强引用是Java中最基本、默认的引用类型,而软引用和弱引用是JDK 1.2版本新增的引用类型。
强引用是指直接使用new关键字创建的对象所引用的变量,这种引用是无法被垃圾回收器回收的。只有当该对象没有任何强引用时,才会被回收。
软引用(SoftReference)是一种相对强一些的引用类型,在系统即将发生内存溢出异常之前,会把这些对象列入回收范围进行二次回收。当JVM进行垃圾回收时,如果这个对象是软可及的(即:软引用指向的对象还存在强引用或者其他软引用),那么这个对象就不会被回收。只有当该对象不存在任何强引用且没有其他软引用时,才会被回收。
弱引用(WeakReference)比软引用更加脆弱,这种引用类型所指向的对象只要没有被强引用或者软引用所指向,就会被JVM进行回收。如果一个对象仅仅被弱引用所指向,那么在JVM进行垃圾回收时,不管当前内存是否充足,都会将该对象进行回收。