Java对象的四种引用方式实例分析

 更新时间:2019年08月01日 09:34:11   作者:cakincqm  
这篇文章主要介绍了Java对象的四种引用方式,简单描述了四种引用方式的概念、应用场景并结合实例形式分析了弱引用所引用对象的垃圾回收过程,需要的朋友可以参考下

本文实例讲述了Java对象的四种引用方式。分享给大家供大家参考,具体如下:

一 点睛

Java语言对对象的引用有如下四种方式

  • 强引用:我们平时一般都是这种引用,当一个对象被一个或一个以上的引用变量所引用时,它处于可达状态,不可能被系统垃圾回收机制回收。
  • 软引用:软引用需要通过SoftReference类来实现,当一个对象只具有软引用时,它有可能被垃圾回收机制回收。对于只有软引用的对象而言,当系统内存空间足够时,它不会被系统回收,程序也可以使用该对象,当系统内存空间不够时,系统可能回收它。软引用通常用于对内存敏感的程序中。 
  • 弱引用:弱引用通过WeakReference类实现,弱引用和软引用很像,但弱引用的引用级别更低。对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统内存是否足够,总会回收该对象所占用的内存。当然,并不是说当一个对象只有弱引用时,它就会被立即回收,而是必须等到系统垃圾回收机制运行时才会被回收。
  • 虚引用:虚引用通过PhantomReference类实现,虚应用完全类似于没有引用。虚引用对对象本身没有太大影响,对象甚至感觉不到虚引用的存在。

二 实战——若弱引用所引用对象的垃圾回收过程

1 代码

import java.lang.ref.*;
public class ReferenceTest {
  public static void main( String[] args )
      throws Exception {
    // 创建一个字符串对象
    String str = new String("疯狂Java讲义");
    // 创建一个弱引用,让此弱引用引用到"疯狂Java讲义"字符串
    WeakReference wr = new WeakReference(str); //①
    // 切断str引用和"疯狂Java讲义"字符串之间的引用
    str = null;  //②
    // 取出弱引用所引用的对象
    System.out.println(wr.get()); //③
    // 强制垃圾回收
    System.gc();
    System.runFinalization();
    // 再次取出弱引用所引用的对象
    System.out.println(wr.get()); //④
  }
}

2 图解

3 运行

疯狂Java讲义
null

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Spring整合TimerTask实现定时任务调度

    Spring整合TimerTask实现定时任务调度

    这篇文章主要介绍了Spring整合TimerTask实现定时任务调度的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • mybatis创建项目报Invalid bound statement (not found)错误解决方法

    mybatis创建项目报Invalid bound statement (not found)错误解决方法

    使用MyBatis能够帮助我们将SQL语句和Java代码分离,这篇文章主要给大家介绍了关于mybatis创建项目报Invalid bound statement (not found)错误的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • java Random.nextInt()方法的具体使用

    java Random.nextInt()方法的具体使用

    这篇文章主要介绍了java Random.nextInt()方法的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 使用Maven将springboot工程打包成docker镜像

    使用Maven将springboot工程打包成docker镜像

    这篇文章主要介绍了使用Maven将springboot工程打包成docker镜像,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    这篇文章主要介绍了 java 利用反射机制,获取实体所有属性和方法,并对属性赋值的相关资料,需要的朋友可以参考下
    2017-01-01
  • JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    这篇文章主要介绍了JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数 ,本文通过一段代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Springboot整合JwtHelper实现非对称加密

    Springboot整合JwtHelper实现非对称加密

    本文主要介绍了Springboot整合JwtHelper实现非对称加密,主要介绍两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • SpringMVC自定义参数绑定实现详解

    SpringMVC自定义参数绑定实现详解

    这篇文章主要介绍了SpringMVC自定义参数绑定实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java基础入门篇之逻辑控制练习题与猜数字游戏

    Java基础入门篇之逻辑控制练习题与猜数字游戏

    猜数字游戏是一款经典的游戏,该游戏说简单也很简单,说不简单确实也很难,这篇文章主要给大家介绍了关于Java基础入门篇之逻辑控制练习题与猜数字游戏的相关资料,需要的朋友可以参考下
    2023-06-06
  • Java类初始化顺序详解

    Java类初始化顺序详解

    这篇文章主要介绍了Java类初始化顺序详解,java语言在使用过程中最先开始就是初始化,在工作中如果遇到什么问题需 要定位往往到最后也可能是初始化的问题,因此掌握初始化的顺序很重要,需要的朋友可以参考下
    2023-08-08

最新评论