Java 四种引用

java的引用分为四种,强引用,弱引用,软引用,虚引用。

强引用

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。
for example

Student stu=new Student();

这里的stu就是个强引用,就算内存溢出,jvm也不会回收它,如果我们想要回收它,那么就可以

stu=null;

这样,后面的new student()里的东西就会被JVM回收掉,当然stu这个变量还是存在的。

软引用

如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。

String s = new String("aa");    // 创建强引用与String对象关联,现在该String对象为强可达状态
SoftReference softRef = new SoftReference(s);     // 再创建一个软引用关联该对象
s = null;        // 消除强引用,现在只剩下软引用与其关联,该String对象为软可达状态
s = softRef.get();  // 重新关联上强引用

弱引用

在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

String str=new String("abc");    //强引用对象
WeakReference abcWeakRef = new WeakReference(str); //变为弱引用
str=null;	//去强引用对象
String  abc = abcWeakRef.get(); 		再次变为强引用对象

虚引用

与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
虚引用一般是用来监测gc垃圾回收机制的,根据虚引用来监测gc是否正常等。

你可能感兴趣的:(java,jvm,java,内存泄漏)