首页 > 编程语言 >java中的引用

java中的引用

时间:2023-04-08 14:23:54浏览次数:38  
标签:java 对象 SoftReference 回收 引用 new

引用分类

  • 强引用

    • 强引用是我们常见的普通对象引用,只有还有强引用指向一个对象,就表明这个对象还“存活”,垃圾收集器不会碰这个对象
    • 当一个对象被强引用对象引用时,它就处于 可达状态,它是不能被垃圾回收的,即使出现了OOM也不会对该对象回收
  • 软引用

    • 软引用是相对于强引用弱化了一些的引用
      • 当系统内存充足时, 它不会被回收
      • 当系统内存不足时, 会被回收
    • 借助java.lang.ref.SoftReference类来实现
      SoftReference<MyObject> softReference = new SoftReference<>(new MyObject());
      
  • 弱引用

    • 只要gc了,无论内存是否充足,都会被回收
    • 借助java.lang.ref.WeakReference类来实现
      WeakReference<MyObject> weakReference = new WeakReference<>(new MyObject());
      
  • 虚引用

    • 虚引用不会决定对象的生命周期, 如果一个对象仅仅持有虚引用,那么它和没有任何引用一样,在任何时候都可能被回收,他不能单独使用,虚引用必须搭配 引用队列—ReferenceQueue 联合使用
    • 主要作用是跟踪对象被垃圾回收的状态, 仅仅是提供了一种确保对象被finalize以后,做某些事情的通知机制
    • 借助java.lang.ref.PhantomReference类来实现

标签:java,对象,SoftReference,回收,引用,new
From: https://www.cnblogs.com/liyong888/p/17298464.html

相关文章

  • JAVA实现单链表修改和删除数据节点
    JAVA实现单链表修改和删除数据节点一、修改单链表中的一个节点①实现思路因为带头节点的链表中头节点的next域不能发生改变(始终指向单链表的头节点),否则将找不到该链表。所以我们需要先找一个辅助节点temp来进行节点代理操作。通过遍历链表,使辅助节点temp后移,找到要修改的节点......
  • Java-SPI机制详解
    Java之SPI机制详解1:SPI机制简介SPI全称是ServiceProviderInterface,是一种JDK内置的动态加载实现扩展点的机制,通过SPI技术我们可以动态获取接口的实现类,不用自己来创建。这个不是什么特别的技术,只是一种设计理念。2:SPI原理JavaSPI实际上是基于接口的编程+策略模......
  • JavaScript 有效的字符串方法
    目录获得字符串的长度用处在字符串中查找子字符串找到字符串的位置判断是否包含特定子字符串截取子字符串的方法转换大小写替换字符串的某部分本文内容部分截取自该网站,不同部分则为本人笔记。获得字符串的长度letbrowserType='mozilla';browserType.length;用处检......
  • 剑指offer66(Java)-构建乘积数组(中等)
    题目:给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中 B[i]的值是数组A中除了下标i以外的元素的积,即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 示例:输入:[1,2,3,4,5]输出:[120,60,40,30,24] 提示:所有元素乘积之和不会......
  • 【Java 并发】【九】【AQS】【八】ReentrantReadWriteLock之ReadLock读锁原理
    1 前言上节我们看了下ReentrantReadWriteLock读写锁的写锁的申请和释放过程,这节我们就来看下读锁的。2 线程读锁记录回顾一下之前的例子,在读写并发操作的时候,读取数据的时候加读锁:publicclassReentrantReadWriteLockTest{//声明一个读写锁privatestaticR......
  • 【JAVA树根白话二】——继承
    JAVA树根白话二继承Begin……[ABC]继承——面向对象的三个基本特征之一(另外两个是封装、多态) 应用场景:当封装两个类后,第一个类中有一个非常复杂的成员函数,第二个类也需要同样的一个成员函数。如果第二个类重新编写成员函数,会增加开发时间,并且可能会因为一些疏忽,造......
  • 剑指offer03(Java)-数组中重复的数字(简单)
    题目:找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例1:输入:[2,3,1,0,2,5,3]输出:2或3 限制:2<=n<=1000......
  • JavaScript遍历数组用splice方法删除元素,这样写可能有遗漏,你遇到过吗?
    在编写“圳品”信息系统中,有时需要对二维数组中的数据进行筛选并删除一些元素,比如删除二维数组中首个元素为0的行。开始是用for循环访问数组+splice方法删除元素来做:vara=newArray([0,0,0,0],[1,1,1,1],[0,2,2,2],[......
  • JavaScript的引入方式
    外部JS文件deno.jsalert('你好!JavaScript');JS引入方式.html<!--方式一:内部脚本--><!--标签不能自闭和--><script>alert('你好JS')</script><!--方式二:外部引入--><scriptsrc="demo.js"></script>......
  • Java方法
    Java方法方法是什么解决一类问题的步骤的有序组合System.out.print()-------------------System是一个类out是一个对象print()是一个方法方法是一个语句块集合,它们在一起执行一个功能设计原则:保持原子性,一个方法只完成一个功能方法的定义及调用Java只有值传递方法......