当前位置: 首页 > 面试题库 >

Java:java 中都有哪些引用类型?

叶炜
2023-04-24

(1)强引用

Java中默认声明的就是强引用,比如:

Object obj = new Object();
obj = null;

只要强引用存在,垃圾回收器将永远不会回收被引用的对象。如果想被回收,可以将对象置为null; 

(2)软引用(SoftReference)

在内存足够的时候,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会跑出内存溢出异常。

byte[] buff = new byte[1024 * 1024];
SoftReference<byte[]> sr = new SoftReference<>(buff);

(3)弱引用(WeakReference)

进行垃圾回收时,弱引用就会被回收。

(4)虚引用(PhantomReference)

(5)引用队列(ReferenceQueue)

引用队列可以与软引用、弱引用、虚引用一起配合使用。

当垃圾回收器准备回收一个对象时,如果发现它还有引用,就会在回收对象之前,把这个引用加入到引用队列中。

程序可以通过判断引用队列中是否加入了引用,来判断被引用的对象是否将要被垃圾回收,这样可以在对象被回收之前采取一些必要的措施。

 类似资料:
  • (1)Collection ① set HashSet、TreeSet ② list ArrayList、LinkedList、Vector (2)Map HashMap、HashTable、TreeMap

  • 本文向大家介绍Java 中都有哪些引用类型?相关面试题,主要包含被问及Java 中都有哪些引用类型?时的应答技巧和注意事项,需要的朋友参考一下 强引用:发生 gc 的时候不会被回收。 软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。 弱引用:有用但不是必须的对象,在下一次GC时会被回收。 虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象,用 PhantomReference 现虚引用

  • (1)String String是不可变对象,每次对String类型的改变时都会生成一个新的对象。 (2)StringBuilder 线程不安全,效率高,多用于单线程。 (3)StringBuffer 线程安全,由于加锁的原因,效率不如StringBuilder,多用于多线程。 不频繁的字符串操作使用String,操作频繁的情况不建议使用String。 StringBuilder > String

  • Java JUC都有哪些类库? 需要掌握哪些并发类库?

  • Redis是基于内存的nosql数据库,可以通过新建线程的形式进行持久化,不影响Redis单线程的读写操作 通过list取最新的N条数据 模拟类似于token这种需要设置过期时间的场景 发布订阅消息系统 定时器、计数器

  • 本文向大家介绍Kafka 都有哪些特点?相关面试题,主要包含被问及Kafka 都有哪些特点?时的应答技巧和注意事项,需要的朋友参考一下 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。 可扩展性:kafka集群支持热扩展 持久性、可靠性:消息被持久化