返回顶部
首页 > 资讯 > 精选 >怎么在Java中实现引用
  • 326
分享到

怎么在Java中实现引用

2023-06-15 04:06:23 326人浏览 独家记忆
摘要

本篇文章给大家分享的是有关怎么在Java中实现引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、引用的定义在jdk 1.2以前,Java中的引用定义很传统:如果refere

本篇文章给大家分享的是有关怎么在Java中实现引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、引用的定义

jdk 1.2以前,Java中的引用定义很传统:如果reference类型的数据存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。

二、问题

当描述这样的一类对象:当内存空间还足够时,则能保留在内存之中,如果内存空间在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。此时的引用就显得过于狭隘。因此在JDK 1.2之后,Java堆引用的概念进行了扩充。

三、引用的分类




回收时机
强引用Strong Reference类似Object obj = new Object()只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象
软引用Soft Reference描述一些还有用但并非必须的对象在系统将要发生内存溢出的异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常
弱引用Weak Reference用来描述非必须对象,强度比软引用更弱。被弱引用关联的对象只能生存到下一次垃圾收集发生之前当垃圾收集器工作时,无论当前内存是否足够,都会回收掉纸杯弱引用关联的对象
虚引用Phantom Reference又称为幽灵引用或幻影引用,最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的卫衣目的就是能在这个对象被收集器回收时收到一个系统通知

四、应用场景

1.强引用

最常用的,应用场景最多,everywhere

2.软引用

只有将要发生OOM的时候,才会主动回收,应用在一些内存限制比较大的应用内,避免发生OOM。

3.弱引用

不管是young GC 还是 full gc 都会回收弱引用的对象。当你想引用一个对象,但是这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候你就是用弱引用。

4.虚引用

在回收时可以检测到,虚引用主要用来跟踪对象被垃圾回收器回收的活动。

怎么在Java中实现引用

五、源码

package org.pdool.ref;import java.lang.ref.Reference;import java.lang.ref.ReferenceQueue;import java.lang.ref.WeakReference;import java.util.LinkedList;public class ReferenceTest {    private static ReferenceQueue<VeryBig> rq = new ReferenceQueue<VeryBig>();    public static void checkQueue() {        Reference<? extends VeryBig> ref = null;        while ((ref = rq.poll()) != null) {            //   只留有引用,没有对象            System.out.println("In queue: "    + ((VeryBigWeakReference) (ref)).id);        }    }    public static void main(String args[]) {        int size = 3;        LinkedList<WeakReference<VeryBig>> weakList = new LinkedList<WeakReference<VeryBig>>();        for (int i = 0; i < size; i++) {            weakList.add(new VeryBigWeakReference(new VeryBig("Weak " + i), rq));            System.out.println("Just created weak: " + weakList.getLast());        }        System.gc();        try {            // 暂停6s,让上面的垃圾回收线程运行完成            Thread.currentThread().sleep(6000);        } catch (InterruptedException e) {            e.printStackTrace();        }        checkQueue();    }}class VeryBig {    public String id;    // 占用空间,让线程进行回收    byte[] b = new byte[2 * 1024];    public VeryBig(String id) {        this.id = id;    }    protected void finalize() {        System.out.println("Finalizing VeryBig " + id);    }}class VeryBigWeakReference extends WeakReference<VeryBig> {    public String id;    public VeryBigWeakReference(VeryBig big, ReferenceQueue<VeryBig> rq) {        super(big, rq);        this.id = big.id;    }    protected void finalize() {        System.out.println("Finalizing VeryBigWeakReference " + id);    }}

Java的特点有哪些

Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。2.Java具有简单性、面向对象、分布式安全性、平台独立与可移植性、动态性等特点。3.使用Java可以编写桌面应用程序、WEB应用程序、分布式系统和嵌入式系统应用程序等。

以上就是怎么在Java中实现引用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么在Java中实现引用

本文链接: https://lsjlt.com/news/277544.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在Java中实现引用
    本篇文章给大家分享的是有关怎么在Java中实现引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、引用的定义在JDK 1.2以前,Java中的引用定义很传统:如果refere...
    99+
    2023-06-15
  • 怎么在Java中实现值传递和引用传递
    怎么在Java中实现值传递和引用传递?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了...
    99+
    2023-06-14
  • 怎么在java中回收弱引用
    本篇文章给大家分享的是有关怎么在java中回收弱引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Androi...
    99+
    2023-06-14
  • 怎么在java中引用数组元素
    本篇文章为大家展示了怎么在java中引用数组元素,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义并用运算符new为之分配空间后,才可以引用数组中的每个元素,数组元素的引用方式为:(1)arrayN...
    99+
    2023-06-06
  • 怎么在MySQL中实现全文索引
    这期内容当中小编将会给大家带来有关怎么在MySQL中实现全文索引,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用用MATCH() ... AGAINST 方式来进行搜索...
    99+
    2024-04-02
  • 怎么在java队列中使用软引用
    本篇文章给大家分享的是有关怎么在java队列中使用软引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情...
    99+
    2023-06-14
  • 在Android项目中使用Studio怎么实现引用Library
    本篇文章为大家展示了在Android项目中使用Studio怎么实现引用Library,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、引用Library选择你的项目,点击导航栏File -->...
    99+
    2023-05-31
    android studio library
  • 怎么在java中使用Arrays实现排序
    这篇文章给大家介绍怎么在java中使用Arrays实现排序,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布...
    99+
    2023-06-14
  • 怎么在java中使用Filter实现过滤
    今天就跟大家聊聊有关怎么在java中使用Filter实现过滤,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应...
    99+
    2023-06-14
  • 怎么在JAVA中使用ReentrantLock实现并发
    这期内容当中小编将会给大家带来有关怎么在JAVA中使用ReentrantLock实现并发,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 介绍结合上面的ReentrantLock类图,Reentrant...
    99+
    2023-06-15
  • JavaScript中怎么实现值引用和地址引用
    这篇文章将为大家详细讲解有关JavaScript中怎么实现值引用和地址引用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。js中任何事务都是对象。包括基本数据...
    99+
    2024-04-02
  • NodeJS中怎么实现循环引用
    这篇文章将为大家详细讲解有关NodeJS中怎么实现循环引用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。场景复现出现问题场景比较简单,一共四个类:paren...
    99+
    2024-04-02
  • 怎么在java中实现浅拷贝
    这篇文章给大家介绍怎么在java中实现浅拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企...
    99+
    2023-06-14
  • 怎么在java中实现Reduce重载
    本篇文章给大家分享的是有关怎么在java中实现Reduce重载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. A...
    99+
    2023-06-14
  • 怎么在Java中实现哈希表
    本篇文章为大家展示了怎么在Java中实现哈希表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、哈希表头插法放入元素public class HashBuck {&nb...
    99+
    2023-06-15
  • 怎么在java中实现TreeMap排序
    怎么在java中实现TreeMap排序?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 定义TreeMap的排序方法使用Comparator对象作为参数需要注意的是:排序...
    99+
    2023-05-30
    java treemap
  • 怎么在Java中实现懒加载
    这篇文章主要介绍“怎么在Java中实现懒加载”,在日常操作中,相信很多人在怎么在Java中实现懒加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Java中实现懒加载”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-05
  • 索引同步在Java中是如何实现的?
    随着互联网的不断发展,搜索引擎已经成为人们获取信息的主要渠道之一。而搜索引擎的核心技术就是索引,通过索引可以快速地找到所需的信息。然而,由于数据的不断更新和扩充,索引的同步也变得越来越重要。本文将介绍在Java中实现索引同步的方法。 一、...
    99+
    2023-10-11
    shell 索引 同步
  • 怎么在mysql中实现一个联合索引
    这篇文章将为大家详细讲解有关怎么在mysql中实现一个联合索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。联合索引联合索引的定义为(MySQL):ALTER TABLE ...
    99+
    2023-06-14
  • 怎么在Java中使用ReentrantReadWriteLock实现多线程
    本篇文章给大家分享的是有关怎么在Java中使用ReentrantReadWriteLock实现多线程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java有哪些集合类Java中...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作