强引用:只要引用存在,垃圾回收器永远不会回收
Object obj = new Object();
//可直接通过obj取得对应的对象 如obj.equels(new Object());
而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用:非必须引用,内存溢出之前进行回收,可以通过以下代码实现
Object obj = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj);
obj = null;
sf.get();//有时候会返回null
这时候sf是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null;
软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。弱引用:第二次垃圾回收时回收,可以通过如下代码实现
Object obj = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj);
obj = null;
wf.get();//有时候会返回null
wf.isEnQueued();//返回是否被垃圾回收器标记为即将回收的垃圾
弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。
弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。虚引用:垃圾回收时回收,无法通过引用取到对象值,可以通过如下代码实现
Object obj = new Object();
PhantomReference<Object> pf = new PhantomReference<Object>(obj);
obj=null;
pf.get();//永远返回null
pf.isEnQueued();//返回是否从内存中已经删除
虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。
虚引用主要用于检测对象是否已经从内存中删除。

引至:https://www.cnblogs.com/yw-ah/p/5830458.html

Java四大引用类型相关推荐

  1. GuavaCache学习笔记二:Java四大引用类型回顾

    前言 上一篇已经讲了,如何自己实现一个LRU算法.但是那种只是最基本的实现了LRU的剔除策略,并不能在生产中去使用.因为Guava Cache中使用的是SoftReference去做的value实现, ...

  2. 知识回顾(一):Java八大基础类型、四大引用类型

    一.Java一共有八大基础类型 分为三类:整型(byte,int,short,long,float,double),字符型(char),布尔型(boolean).      注意:字符串String不 ...

  3. Java的引用类型(附图说明)

    本章的主要内容来自:javaconceptoftheday 一小部分是自己整理的,英文OK的可以直接读原文 Java的一个优点是程序员不需要关心内存是如何被分配的,Java有一套自己的机制去管理它,程 ...

  4. 什么是java四大引用?

    相信现在有很多人正在学习java编程语言,其中java的四大引用相信很多同学都不是非常熟悉,那么什么是java四大引用?来看看下面的详细介绍. 什么是java四大引用?是JDK1.2版本开始引入,把对 ...

  5. Java面试题19 牛客下面有关java的引用类型,说法正确的有?

    Java面试题19下面有关java的引用类型,说法正确的有? A:对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中 B:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可 ...

  6. JAVA 【引用类型】和【对象类型】在【继承】中的异同

    介绍 JAVA [引用类型]和[对象类型]在[继承]中的异同.这个问题自己整理过N次.也被人当菜鸟问过N次.所以,在此简单整理一下.以供大家分享. 在继承关系中.一般成员变量是依据引用类型 在继承关系 ...

  7. Java 只有引用类型(reference type)

    学过java的朋友一定听过这个概念,java设计者将java的类型分为基本类型(int.string.double.long等)和引用类型(对象),基本类型使用时,是值传递,而对象类型使用时,是引用传 ...

  8. java中引用类型和基本类型的区别

    java中引用类型和基本类型的区别 一.数据类型 1.基本类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long.int.short.byte ②浮点类型:float.double ③字符类 ...

  9. Java 中引用类型都有哪些

    Java 中引用类型都有哪些 Java中对象的引用分为四种级别,这四种级别由高到低依次为:强引用.软引用.弱引用和虚 引用. 强引用( StrongReference) 如果一个对象被被人拥有强引用, ...

最新文章

  1. 清除图片下默认的小间隙_密封间隙对迷宫密封性能影响的三维数值分析
  2. Python的优点?
  3. CentOS7上配置ELK
  4. 策划文档html,html代码整理.doc
  5. MAC卸载java 12.0.2
  6. epon matlab仿真,一种新型的EPON保护结构
  7. php记录登录时间,php记录 用户当前页面停留时间
  8. 使用uiautomator2进行webview页面的测试
  9. 【Vue】自定义指令(全局定义 局部定义)
  10. [MySQL]SQL
  11. c++ python混合编程 restful_How to use Python to build a RESTful Web Service
  12. mysql5.7zib配置_mysql-5.7.13 解压版安装教程
  13. Android中的隐藏API和Internal包的使用之获取应用电量排行
  14. firefox的dl dt dd布局Hack
  15. Fullscreen API
  16. 内存操作函数:memcmp、memcpy、memmove、memset 的使用与模拟。
  17. photoshop教程:替换颜色
  18. 虚幻4引擎源码学习笔记(一):整体文件结构
  19. Java常见面试题(181-200)
  20. openwrt软路由怎么中止执行/怎么向上翻屏/怎么清屏

热门文章

  1. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfo
  2. mac外接显示器有问题怎么办
  3. 高效MAC工作常用设置
  4. Html DOM元素的childNodes和children的区别
  5. 【SPIE独立出版 | Ei检索 】第二届物联网与机器学习国际学术会议征稿中!
  6. C++ 禁用USB移动存储设备而不禁用鼠标,键盘等输入设备
  7. 计算机基础知识教程截屏,最简单的学问:教你如何给电脑屏幕截图,别说你真的会了...
  8. Linux下PHP使用 PHP_ODBC 连接微软SQLSERVER数据库
  9. 卷积神经网络(Convolutional Neural Network,CNN)
  10. Java中的三种输出print、printf、println