1、强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码:
  Person person = new Person();
其中的 person 就是一个强引用,只有当它不再被使用后才会被垃圾回收器回收掉。当内存不足时,但是其依然在被使用中,那么垃圾回收器也不会回收其引用的对象;JVM 宁愿报“内存泄漏错误    (OutofMemoryError)”,终止程序也不会回收此引用所关联的对象。

2、软引用(Soft Reference)是比强引用要弱一级的引用,当内存不足时即可被垃圾回收器(garbage collection)回收,内存充足是不被垃圾回收器(garbage collection)回收;通常用于实现高速缓存,顾名思义,高速缓存要求速度快,我们通常将数据放置到内存中来实现,出于成本的考虑,内存的大小终究是有限,这就要求我们提炼出访问高频,更新低频的数据放入到缓存中;随着放入的数据越来越多时,内存出现不足,JVM 通过 GC 回收一部分内存资源,并不影响客户端的访问,因为我们在数据库中有完整的数据,从而避免系统的宕机。下面是示例代码,用于创建一个软引用:
  Person person = new Person();
  SoftReference<Person> personSoftReference = new SoftReference(person);
其中的 personSoftReference 被称为软引用,引用的是 new Person() 这个对象;

3、弱引用(Weak Reference)是比软引用弱一级的引用,只要被垃圾回收器(garbage collection)扫描到就会被即刻回收,不管内存够不够。弱引用通常与引用队列(Reference Queue)一起使用,垃圾回收器在回收弱引用关联的对象之前会先将其放入到引用队列中,我们可以监听这个引用队列(Reference Queue),当引用队列中有了此对象,那么就可以在其被回收前做我们的操作。示例代码如下:
  Person person = new Person();
  WeakReference<Person> personWeakReference = new WeakReference(person);
其中的 personSoftReference 被称为弱引用,引用的是 new Person() 这个对象;

4、虚引用(Phantom Reference)是“最弱”的一种引用,可有可无的引用,也可以理解为几乎没有引用,随时可能被垃圾回收器(garbage collection)回收掉;事实上也是如此,一旦被垃圾回收器(garbage collection)扫描到就即刻被其回收。主要用于追踪垃圾回收器的行为。虚引用和弱引用一样,通常和引用队列(Reference Queue)一起使用,当垃圾回收器(garbage collection)回收弱引用关联的对象前将其放入到引用队列中,同样的我们可以监听这个队列,一旦有新的虚引用被放入就执行我们预定好的程序。示例代码如下
  Person person = new Person();
  PhantomReference<Person> personPhantomReference = new PhantomReference(person);
其中的 personSoftReference 被称为虚引用,引用的是 new Person() 这个对象;

Java 中的四种引用的更多相关文章

  1. JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

    简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...

  2. Java中的四种引用

    引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用.软引用.弱引用.虚引用.下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新 ...

  3. Java 中的四种引用及垃圾回收策略

    Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会 ...

  4. Java中的四种引用方式

      无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在Java语言中,将引用又分为强引用.软引用.弱引用 ...

  5. Java入门系列 Java 中的四种引用

    Why java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java对象的引用包括强引用,软引用,弱引用,虚引用 Java中提供这四种引用类型 ...

  6. java中的四种引用方式(强引用,软引用,弱引用,虚引用)

    java内存管理主要有内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java中对象的引用主要有四种:强引用,软引用,弱引用,虚引用. Java中提供这四种引 ...

  7. Java中的四种引用(强引用、软引用、弱引用、虚引用)

    以下内容摘自<深入理解Java虚拟机 JVM高级特性与最佳实践>第2版,强烈推荐没有看过的同学阅读,读完的感觉就是"原来学的都是些什么瘠薄东西(╯‵□′)╯︵┴─┴" ...

  8. Java中的四种引用和引用队列

    目录 强引用 软引用 弱引用 幻象引用 Reachability Fence 参考 强引用 正常的引用,生命周期最长,例如 Object obj = new Object(); 当JVM内存不足时,宁 ...

  9. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

随机推荐

  1. Pycharm新手教程,只需要看这篇就够了

    pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...

  2. cuda测试二维block的使用

    #include "cuda_runtime.h" #include <stdio.h> #include <stdlib.h> #include < ...

  3. 基本css拼图形

    关闭按钮: <em class="close"></em> .close { width: 16px; height: 16px; text-align: ...

  4. C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...

  5. luogu3312 [SDOI2014]数表 (莫比乌斯反演+树状数组)

    link \(\sum_{i=1}^n\sum_{j=1}^m[s(\gcd(i,j))\le a]s(\gcd(i,j))\) \(=\sum_{p=1}^ns(p)[s(p)\le a]\sum_ ...

  6. 序列终结者 BZOJ 1251 Splay

    题目背景 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...

  7. springcloud系列10 整合Hystrix遇到的坑:

    首先配置类: @Bean public ServletRegistrationBean getServlet(){ HystrixMetricsStreamServlet streamServlet ...

  8. maven 子父工程。。。

    子工程module 父工程 主要是注意路径问题..否则会报错---

  9. 在基于AngularJs架构的ABP项目中使用UEditor

    [前提须知] 读过此篇博客 了解angular-ueditor 了解ABP如何使用 会使用VS2017 [1.下载ABP模板] https://aspnetboilerplate.com/Templa ...

  10. 前端基础------jquer y学习

    一. jquery是什么 快速,简洁,轻量级的JavaScript库(JavaScript框架)使用户可以快速的操作HTML document,实现动画效果,并方便的地为网站提供AJAX交互.文档全面 ...