Java 1.2加入的四种引用:强引用,软引用,弱引用,虚引用

强引用

传统理解上的引用,Obeject obj = new ArrayList();类似的引用,只要存在强引用关系,这个对象就不可能被gc

注意:不会被gc是说持有引用的对象 与 被引用的对象直接的可达性是绝对的,不会被虚拟机干涉;如果持有引用的对象与GC root不可达的话,依然有可能会被GC

软引用

被软引用关联的对象,会在系统将要发生内存溢出异常之前会被纳入可被回收的对象之列,回收之后内存还不足,就会抛出内存溢出异常,不到万不得已,jvm不会动他

弱引用

若用的对象只能生存到下一次垃圾收集之前,弱引用不会干扰gc的判断,只要弱引用的对象愿意死亡被收集,这条弱引用就不会对gc有任何影响

使用场景很多,比如内部类可以维持外部类的弱引用,访问外部类的数据,而不会影响外部类的生存时间,对于防止内存泄漏很有效

虚引用

严格来说不能称之为引用,这个引用不能访问对象的数据,也不能找到他,唯一的作用就是:当弱引用对象死亡时,持有引用方可以获得系统通知。

意义

在实践场景中:关注弱引用即可
四种引用是为了让程序员可以以代码的方式控制 对象在gc时的部分行为

发布了28 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/TowerOs/article/details/104361570