今天没什么心情,随便做下笔记吧,后面慢慢添加.
package code_test;
import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
/**
* 4种引用方式示例
*
*/
public class Quote {
public static void main(String[] args) {
// 1.强引用,java由new产生的对象都属于强引用,只要某个对象有与之相关的引用,jvm比对不会回收该对象,即使内存不足,也只会抛出OOM,不会回收
String st = new String("as");
System.gc();// 由于内存足够,所以GC之后,对象仍然存在
System.out.println(st);
// 软引用,当JVM进行回收时,如果内存不足就会进行回收,如果内存充足,不会回收
// 弱引用,当JVM进行内存回收时,无论内存是否充足,都会回收被弱引用关联的对象
User user = new User();
user.name = "lilin";
WeakReference<User> list = new WeakReference<User>(user);
System.gc();
System.out.println(list.get());
// 虚引用,虚引用需要合引用对联关联使用,虚引用在任何时候都可能被JVM回收.
ReferenceQueue<String> queue = new ReferenceQueue<String>();
PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
System.out.println(pr.get());
}
}
4种引用方式,在开发中可以适当的规避部分内存泄露问题,以免某些对象无法被GC回收,面试经常会问到。