当前位置: 首页 > news >正文

Java-关于Java的四种引用类型的理解

java 中的四种引用类型:强引用、软引用、弱引用、虚引用
强引用
A a = new A();
a = null;
这种引用就是强引用,只要a还指向A对象,哪怕内存不足(引用计数法,只要有引用指向就不是垃圾),JVM也会抛出oom而不会去回收。如果想中断强引用与对象之间的关系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了。
软引用
在内存足够的时候,不会回收,当内存不够的时候会回收软引用,如果此时还是不够就会抛出oom。
可以手动通知GC回收:System.gc();—>只是通知GC,但是具体回不回收何时回收还是GC决定。
弱引用
弱引用比软引用要更低一级,当垃圾回收开始时,不管内存是否足够都会将弱引用进行回收。
ThreadLocalMap中的Entry就继承了WeakReference<ThreadLocal<?>>,我们一般在使用ThreadLocal时:ThreadLocal userInfo = new ThreadLocal;在使用完成后虽然可以显示userInfo = null来断开强引用,此时ThreadLocal只剩下map->Entry->key这一个弱引用,就会被GC回收,但是其中的User的强引用还在CurrentThread中,而且永远访问不到了,只有当前线程结束才会结束。但是如果是线程池,那么该线程就会一直在线程池中等待下一个线程,这个线程中的map没有删除(User作为value就存储在map中),会造成oom。
所以一般建议使用userInfo.remove();
虚引用
虚引用是最低一级的,一般来说这个引用形同虚设,必须配合引用队列(ReferenceQueue)使用。当垃圾回收器在回收一个对象时,如果这个对象还有引用,那么就会将这个引用放入到与之关联的引用队列中。程序可以通过判断引用队列汇总是否已经加入了引用,来判断被引用的对象是否将要被垃圾回收。这样可以在回收前采取一些必要措施。


http://www.mrgr.cn/news/52855.html

相关文章:

  • 大数据-178 Elasticsearch Query - Java API 索引操作 文档操作
  • 互联网摸鱼日报(2024-10-18)
  • Kafka 启用 JMX
  • arm64系统不支持32位的解决armel armhf
  • 数学对象常用方法,进制转换
  • 简记一段数据清洗项目经历
  • 二叉树算法之二叉树遍历(前序、中序、后序、层次遍历)
  • 线性可分支持向量机的原理推导 线性分隔超平面关于任意样本点 (x_i,y_i)的函数间隔 公式解析
  • 手写Spring IOC-简易版
  • 如何构建企业架构蓝图:从设计到落地,驱动数字化转型的核心路径
  • 深入探讨:人工智能大模型的分类与多样化发展
  • 07. 容器控件(一) - NSCollectionView 网格、NSTabView 卡片、NSPopover 弹出层
  • 一分钟学会MATLAB-数值计算
  • JavaWeb 22.Node.js_简介和安装
  • React Native 项目中使用 Expo Application Services (EAS) 进行多渠道打包
  • 黑盒测试 | 挖掘.NET程序中的反序列化漏洞
  • 进化吧!原始人
  • JVM详解
  • vllm技术详解
  • Kinect Fusion介绍