强引用
强引用是java代码中最常见的一种引用类型,实现方法例如:
Person person = new Person();
person.setName("张三");
System.gc();
System.out.println(person);
// 阻塞main线程,给GC垃圾回收器提供时间
System.in.read();
这就一个强引用类型。他的特点就是不会被GC回收,那怕jvm报出OOM异常.也不会被回收, 如果想要GC回收到这个强引用的话,需要在代码中将这个对象赋值为null,这样GC回收器进行垃圾回收时才会把这个强引用进行垃圾回收,例如
Person person = new Person();
person = null;
软引用
软引用是用SoftReference进行描述的,指的是有用但是非必要的对象,当jvm内存满的时候会直接把软引用对象进行回收
SoftReference<Person> softReference = new SoftReference<>(new Person("张三"));
System.out.println(softReference.get());
System.gc();
Thread.sleep(5000);
System.out.println(softReference.get());
可以使用软引用做缓存使用
弱引用
弱引用是用WeakReference进行描述.当gc回收器进行垃圾回收时,不管该引用有没有被使用,都会被直接回收
WeakReference<Person> weakReference = new WeakReference<>(new Person("张三"));
System.out.println(weakReference.get());
System.gc();
Thread.sleep(1000);
System.out.println(weakReference.get());
ThreadLocal 使用了弱引用
虚引用
虚引用是PhantomReference进行描述的,当gc回收器进行垃圾回收时被回收,