今天就跟大家聊聊有关Java中有哪些引用方式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
强引用>软引用>弱引用>虚引用
1.强引用
强引用,强在哪里?强在“JVM即使内存溢出,也不会让GC去随便的回收强引用对象所占用的内存空间”。其原因也容易理解,如果GC将上述的ref回收了,那么new Object()这个对象将毫无意义,后续所有使用ref的代码也将出错。
强引用,什么时候会失效?只有当强引用的值被置为 null 或作用域失效后,GC才会将强引用对象纳入被回收的范围。
2.软引用
当JVM的内存足够时,GC对待软引用和强引用的方式是一样,即不会主动回收软引用对象;但当JVM的内存不足时,GC就会去主动回收软引用对象。
也可以这么理解:JVM只会在抛出OutOfMemory之前回收软引用对象。
强引用可以直接通过关键字new产生,而软引用需要借助JDK提供的java.lang.ref.SoftReference<T>。
在软引用、弱引用和后面要讲的虚引用中都有一个get()方法(实际都是继承父类Reference而来),此方法用于获取引用所指向的引用对象。如下,就是通过get()方法获取了软引用所指向的ObjectDemo对象。
class ObjectDemo {
public void method(){}
}
public class ReferenceDemo {
public static void main(String[] args) throws Exception {
SoftReference<ObjectDemo> softReference = new SoftReference<>(new ObjectDemo());
ObjectDemo obj = softReference.get();
}
}
3.弱引用
弱引用在JDK中是指java.lang.ref.WeakReference<T>类。当GC进行垃圾回收时,无论是否当时JVM的内存是否充足,都会去主动回收弱引用对象。
4.虚引用
看完上述内容,你们对Java中有哪些引用方式有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。