美文网首页
四大引用

四大引用

作者: zzq_nene | 来源:发表于2020-07-17 16:27 被阅读0次

1.强引用(一般垃圾回收器不回收被强引用的对象)

在一般的Java程序中,见到最多的就是强引用(strong reference)。如Date date = new Date(),date就是一个对象的强引用。对象的强引用可以在程序中到处传递。很多情况下,会同时有多个引用指向同一个对象。强引用的存在限制了对象在内存中的存活时间。假如对象A中包含了一个对象B的强引用,那么一般情况下,对象B的存活时间就不会短于对象A。如果对象A没有显式的把对象B的引用设为null的话,就只有当对象A被垃圾回收之后,对象B才不再有引用指向它,才可能获得被垃圾回收的机会。比如:Object object = new Object();。这里的object就是强引用,如果是在方法中创建,那么只要局部变量表还存在,就不会被回收。

2.软引用 (内存不足的时候,对象被回收)SoftReference

软引用(soft reference)在强度上弱于强引用,通过类SoftReference来表示。它的作用是告诉垃圾回收器,程序中的哪些对象是不那么重要,当内存不足的时候是可以被暂时回收的。当JVM中的内存不足的时候,垃圾回收器会释放那些只被软引用所指向的对象。如果全部释放完这些对象之后,内存还不足,才会抛出OutOfMemory错误。软引用非常适合于创建缓存。当系统内存不足的时候,缓存中的内容是可以被释放的。但是并不是软引用的对象置null时就立马释放,是在内存不足时才释放,GC的时候并不会立马回收释放,因为GC并不一定代表内存不足。当垃圾回收器发现快要发生OOM的时候,软引用的对象就会被回收。即内存不足的时候,会回收软引用。

3.弱引用 (回收器只要发现一个对象的引用是全部是弱引用,就会回收此对象、释放内存)WeakReference

弱引用(weak reference)在强度上弱于软引用,通过类WeakReference来表示。它的作用是引用一个对象,但是并不阻止该对象被回收。如果使用一个强引用的话,只要该引用存在,那么被引用的对象是不能被回收的。弱引用则没有这个问题。在垃圾回收器运行的时候,如果一个对象的所有引用都是弱引用的话,该对象会被回收。就是在GC的时候就会立马回收
Handler中使用弱引用来保存Activity对象,就是因为Activity对象如果在Handler执行过程中被销毁回收,那么如果不使用弱引用,这时Activity在Handler中就是属于强引用,则不会被回收,这样就会造成了内存泄漏,而使用弱引用的话,就不会阻止Handler中的Activity对象被回收。

4.虚引用PhantomReference

用来记录GC回收的对象,可以用来统计哪些对象被GC回收了。随时会被回收,但是不知道什么时候会回收。

一般软引用做缓存,比如Glide中;弱引用防泄漏;虚引用测泄漏,在JVM内部做一个检查

纯属个人记录而已

相关文章

  • Java中的引用

    原文地址:LoveDev Java中有四大引用: 强引用(Reference) 软引用(SoftReference...

  • Java四大引用

    Java四大引用:强引用,软引用,弱引用,虚引用。 一、强引用: 1、= new出来的对象就是强引用,强引用在任何...

  • LeakCanary源码精简分析

    Java四大引用 强引用: 绝不回收 软引用: 内存不足才回收 弱引用: 碰到就回收 虚引用: 等价于没有引用,只...

  • LeakCanary的工作原理

    Java四大引用 强引用:绝不回收 软引用:内存不足才回收 弱引用:碰到就回收 虚引用:等价于没有引用,只是用来标...

  • 强引用、软引用、弱引用、虚引用的概念、区别、应用

    一、四大引用级别的概念 强引用:就是正常的引用,类似于下面:Object object = new Object(...

  • 四大引用

    1.强引用(一般垃圾回收器不回收被强引用的对象) 在一般的Java程序中,见到最多的就是强引用(strong re...

  • 四大引用

    一、 GC回收日志打印基本设置 启动设置: 日志各个字段含义简述: 二、了解其概念及其区别 我们在实际开发中,往往...

  • Android中的强引用、软引用、弱引用和虚引用你真的都懂了嘛?

    四大引用 Java提供了四种级别的应用类型:强引用、软引用、弱引用及虚引用。那么这四种引用类型分别有什么作用,又有...

  • JVM读书笔记-引用-05

    这里要谈的是Java的四大引用分别是:强引用、软引用、弱引用、虚引用 强引用引用中的铁头娃,头有多铁,给你见识一下...

  • JNI之路径初探---6

    本篇文章讲解JNI下属性的内存释放问题,众所周知,JAVA有四大引用,1,强引用2,弱引用3,软引用4,虚引用。J...

网友评论

      本文标题:四大引用

      本文链接:https://www.haomeiwen.com/subject/sapxhktx.html