❒ 强引用: 只有所有GC Roots对象都不通过【强引用]引用该对象,该对象才能被垃圾回收
User user = new User();
GC Root -> User对象
❒ 软引用: 仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收
User user = new User();
SoftReference softReference = new SoftReference(user);
GC Root -> SoftReference对象 - -> User对象
❒ 弱引用: 仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象
User user = newUser();
WeakReference weakReference = new WeakReference(user);
GC Root -> WeakReference对象 - - -> User对象
❒ 虚引用:必须配合引用队列使用,被引用对象回收时,会将虚引用入队,由Reference Handler线程调用虚引用相关方法释放直接内存
User user = new User();
ReferenceQueue referenceQueue = new ReferenceQueue();
PhantomReference phantomReference = new PhantomReference(user,queue);
GC Root -> PhantomReference对象X - - -> User1对象
GC Root -> PhantomReference对象Y - - -> User2对象