- 强引用
内存不足时,垃圾回收器也绝不会回收具有强引用的对象,然后内存溢出并报错OOM
经典的强引用
Object oj=new Object();
这时不管Object对象是否被使用,垃圾回收器永远都不会回收这个强引用所指向在堆中的Object对象,以防内存不足时造成的困扰,我们可以将它设置为null
oj=null;//变成弱引用
方便GC算法查找未被使用的对象
- 软引用
内存不足时,垃圾回收器就会回收只具有软引用的对象,反之内存足够的话,就不会回收
SoftReference st=new SoftReference(Object);
if(st.get()!=null){
//对象没被回收
}else{
//对象已经被回收了
}
内存被回收的时候,就是以下过程
if(JVM内存不足){
ob=null;
System.gc();
}
- 弱引用
内存不管是否充足,垃圾回收器一定会回收只具有弱引用的对象
WeakReference wk=new WeakReference(Object);
跟软引用一样,但是触发回收的条件不同,弱引用被垃圾回收器扫描到就会回收
- 虚引用
此类引用正如其名,很虚,很没用,只是在垃圾回收器准备回收具有虚引用的对象时,会象征性的把该对象也加入到引用队列当中
当垃圾回收器准备回收一个具有引用的对象时,就会先将对象关联的引用添加到ReferenceQueue引用队列中,因此可以通过判断引用是否在引用队列来判断对象是否正在被GC回收