• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java中引用的用法

java中引用的用法

作者:Kerer的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-30

Kerer的博客通过本文主要向大家介绍了java,jvm,内存等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

强引用:就是像Object obj = new Object()这种引用;

1、软引用:SoftReference类来实现

只有当内存快要溢出时才会回收这部分内存,经常应用在缓存技术中。

可以关联一个引用队列,当出现溢出时JVM回收这部分内存后,会将这个引用放入这个关联的引用队列。

   // 软引用
    public static void test() {

        SoftReference<String> sr = new SoftReference<String>(new String("hello"));
        System.out.println(sr.get());
        System.gc();  
        System.out.println(sr.get());
    }

运行结果如下

hello
hello

内存并很充足,所以不会回收

2、弱引用:WeakReference类来实现

描述非必须对象。强度比软引用更弱。被弱引用关联的对象只能生存到下一次垃圾回收器工作之前。垃圾回收器开始工作时,无论是否内存充足都会回收。

可以关联一个引用队列,当该引用对象被JVM回收时,会将该引用放入该队列中。

    // 弱引用
    public static void test2() {
       WeakReference<String> sr = new WeakReference<String>(new String("hello"));
        System.out.println(sr.get());
        System.gc();                //通知JVM的gc进行垃圾回收
        System.out.println(sr.get());
    }

运行结果

hello
null

gc运行时就会将内存收回

3、虚引用:PhantomReference类来实现

最弱的引用关系。这个引用存在不存在不影响其对象的生存,唯一的目的就是能在这个对象被垃圾回收器回收时收到一个系统通知。(就是放入引用队列中)

    // 虚引用
    public static void test3() throws InterruptedException {
        String str = new String("hello");

        ReferenceQueue<String> queue = new ReferenceQueue<String>();
        System.out.println("queue:"+queue.poll());

        // 建立一个虚引用,关联一个引用队列
        PhantomReference<String> pr = new PhantomReference<String>(str, queue);
        System.out.println("queue:"+queue.poll());
        System.out.println("pr:"+pr.get());

        str = null;
        // 启动垃圾回收器
        System.gc();
        Thread.sleep(2000);// 个垃圾回收器运行时间

        System.out.println(queue.poll());
    }

运行结果

queue:null
queue:null
pr:null
java.lang.ref.PhantomReference@15db9742

JVM回收了这部分内存,然后将虚引用放入引用队列。注意这些被回收的引用仅仅只是一个引用,引用值为null

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaThreadPoolExecutor线程池调度器
  • 全面掌握Java内部类
  • Java中的常用阻塞队列源码分析
  • Java虚拟机(四)垃圾收集算法
  • Java内存模型与线程
  • Java中如何优雅正确的终止线程
  • [译]深入字节码操作:使用ASM和Javassist创建审核日志
  • IntelliJIDEA平台下JNI编程(五)—本地C代码创建Java对象及引用
  • 【java总结】设计模式详解
  • Java代码中常见技术债务处理之Exception

相关文章

  • 2017-05-28java 爬虫详解及简单实例
  • 2017-05-28java Socket实现简单模拟HTTP服务器
  • 2017-05-28Java FileDescriptor总结_动力节点Java学院整理
  • 2017-05-28选择java的理由:java之父访谈实录
  • 2017-05-28java 中ThreadPoolExecutor原理分析
  • 2017-05-28Java内存各部分OOM出现原因及解决方法(必看)
  • 2017-05-28Java线程的生命周期和状态控制_动力节点Java学院整理
  • 2017-05-28Java中==运算符与equals方法的区别及intern方法详解
  • 2017-05-28MyBatis快速入门之环境搭建和单表映射
  • 2017-05-28深入讲解java线程与synchronized关键字

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • SpringMVC实现自定义类型转换器
    • 详解spring中使用solr的代码实现
    • 深入讲解Java 9中的九个新特性
    • Java微信公众平台开发(5) 文本及图文消息回复的实现
    • java数据结构与算法之桶排序实现方法详解
    • Java数据结构之队列(动力节点Java学院整理)
    • Spring实现一个简单的SpringIOC容器
    • java 中volatile和lock原理分析
    • Java中的对象流总结(必看篇)
    • Kotlin教程之函数和包的定义和流程控制

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有