Java的java.lang.ref包下面有7个类,这7个类与Java的垃圾回收有关系。这7个类可以分为三部分。
Java的引用类型
第一部分可以归结为Java的引用类型。Java的引用分为四种,分别是:强引用,软引用,弱引用和虚引用。
-
强引用:只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收
这种对象。
String s = "wang";
- 软引用:软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。
SoftReference<String> s = new SoftReference<>("wang");
- 弱引用: 弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。在java中,用java.lang.ref.WeakReference类来表示。
WeakReference<String> s = new WeakReference<>("wang");
- 虚引用:虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。
PhantomReference<String> s = new PhantomReference<>("wang",new ReferenceQueue<>());
网友评论