前言

为了使程序更灵活的控制对象的生命周期,java设置了4种引用,分为强引用、软引用、弱引用、虚引用。

强引用

如果一个对象具有强引用,那么垃圾回收器一定不会回收它。例如:
Object o = new Object();
如果要回收它只能将o = null;

软引用

软引用的含义:当有一个对象(字节数组)被一个软引用所指向的时候,只有系统内存不够用的时候,才会回收它。
下面看一个例子,在跑这个程序时需要将堆大小设置到25m以下:

public class TestSoftReference {public static void main(String[] args) {SoftReference<byte[]> m = new SoftReference<>(new byte[1024*1024*10]);System.out.println(m.get());System.gc();try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(m.get());byte[] b = new byte[1024*1024*15];System.out.println(m.get());}
}

运行结果:

[B@4d7e1886
[B@4d7e1886
null

结论:软引用在作为缓存非常合适,例如将一些特别的图片存在缓存里,下次需要时就直接从缓存中那,内存不够时就将它干掉。

弱引用

弱引用的含义:只要遇到gc就会回收。

public static void main(String[] args) {WeakReference<Object> o = new WeakReference<>(new Object());System.out.println(o.get());System.gc();System.out.println(o.get());
}

运行结果

java.lang.Object@4d7e1886
null

弱引用一般用在容器里,一个强引用的对象指向弱引用时,强引用被回收后,弱引用也会被回收,例如ThreadLocal,ThreadLocalMap中的Entry对象就继承了WeakReference,所以我们不必担心new出来的ThreadLocal被回收时,ThreadLocal里的对象不会被回收。

虚引用

虚引用就是管理堆外内存的,是给写JVM的人用的,虚引用的构造方法至少都是两个参数的,第二个参数还必须是一个队列,当我们检测到虚引用被垃圾回收器回收的时候就会在回收对象的内存之前,把这个虚引用加入到引用队列中。

强引用、软引用、弱引用、虚引用介绍相关推荐

  1. java中四种引用类型(对象的强、软、弱和虚引用)

    2019独角兽企业重金招聘Python工程师标准>>> 对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...

  2. 对象的强、软、弱和虚引用

    本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...

  3. Java:对象的强、软、弱和虚引用

    见:http://zhangjunhd.blog.51cto.com/113473/53092 maven/Java/web/bootstrap/dataTable/app开发QQ群:56686262 ...

  4. 软引用和弱引用的区别_强、软、弱、虚引用的区别和使用

    原文阅读: 强.软.弱.虚引用的区别和使用​mp.weixin.qq.com Java提供了四种级别的应用类型:强引用.软引用.弱引用及虚引用.那么这四种引用类型有什么区别呢? 首先我们通过一张图来看 ...

  5. java-基础-强、软、弱、虚引用

    Java的四种引用,强弱软虚,用到的场景. JDK1.2之前只有强引用,其他几种引用都是在JDK1.2之后引入的. 强引用(Strong Reference) 最常用的引用类型,如Object obj ...

  6. jvm系列 (四) ---强、软、弱、虚引用

    java引用 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 为什么将引用分为不同的强度 因为我们需要实现这样一种情 ...

  7. JVM 学习(2)—简单理解Java 四大引用(强、软、弱、虚)

    一.Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期,以便在不同场景下灵活地处理对象的回收问题.不同类型的引用在垃圾回收时的处理方式不同,可以用来实现不同的垃圾回收策略. ...

  8. Java对象引用四个级别(强、软、弱、虚)

    转载自 Java对象引用四个级别(强.软.弱.虚) 最近,高级Java技术栈微信群中,有一些猿友在讨论JVM中对象的周期问题,有谈到引用的级别,现在为大家做个总结吧,虽然大多数公司并没有意识或者用到这 ...

  9. 【Java】Java对象引用四个级别(强、软、弱、虚)

    文章目录 1.概述 强引用(StrongReference) 软引用(SoftReference) 弱引用(WeakReference) 虚引用(PhantomReference) 2. 扩展阅读 1 ...

  10. Java的四大引用强、软、弱、虚

    一.什么是引用 首先要明白什么是一个引用呢?Object o = new Object()这就是一个引用了,一个变量指向new出来的对象,这个变量就叫一个引用,引用这个东西,在java里面分4种,普通 ...

最新文章

  1. java用毫秒数做日期计算的一个踩坑记录
  2. linux杀java线程,如何在Linux下找出大量占用CPU的java线程
  3. 【洛谷】【动态规划+单调队列】P1725 琪露诺
  4. 命令创建mysql数据库_怎么在命令行创建一个mysql数据库
  5. oracle的dbcp工具类,DBCP数据源的使用
  6. IT餐馆—第一回 前言
  7. JAX 是 Google 开发的计算机视觉研究
  8. WordPress: 使用 wp_insert_attachment 上传附件
  9. 2016年下半年软考网络工程师真题解析精编版
  10. 各国家 MCC 和 MNC 列表2
  11. 像图形一样思考以做出决策:彼得斯堡
  12. django 改端口_django更改默认的runserver端口
  13. 【C/C++】超大遥感影像读取和存储 GDAL
  14. 计算机英语软件系统介绍ppt,ppt软件电脑上显示英文
  15. 什么是RS485总线?怎么使用RS485总线?一文了解清楚
  16. 游戏中的数学与物理(一)
  17. 电热水器洗澡时注意(特别是需要拔插头)
  18. java 字体大小 像素_字体的大小(pt)和像素(px)如何转换?
  19. EOJ 3674.唐纳德先生与 .DOC
  20. 大数据各框架的原理与知识点

热门文章

  1. linux双系统内存分配,Linux和Windows硬盘分区设置(二)
  2. 根据html改为ftl模板生成pdf文件,支持中文及换行
  3. C#调用LabVIEW VI
  4. python可视化操作(二)爬取湖北省统计局数据绘制excel表格
  5. 我的服务器新手箱子无限,家庭影音之路 篇一:#原创新人#服务器安装Rutorrent(PT盒子)Seedbox教程...
  6. 素雅唯美古典中国风PPT模板
  7. python+django加载静态网页模板
  8. 如何在金山云上部署高可用Oracle数据库服务
  9. IDEA 中 使用 MyBatis 访问数据库时 报错 Table ‘xxx.t_xxx‘ doesn‘t exist
  10. Python ctypes 模块