首页 >

Java引用类型包括哪些?

Java|java教程Java引用类型包括哪些?
Java,引用类型
Java-java教程
android 动态背景源码,vscode整行注释,ubuntu支持哪些设备,yum更新tomcat,sqlite支持并发吗,jq带搜索的下拉菜单插件,公司前端都用框架吗,python爬虫的应用,php 2014,kpi seo,动易2006网站模版,网页填表网站源代码,css div简单网页模板,手机淘宝自动不断刷新页面,php工单管理系统下载,遗传算法辨识 matlab程序lzw
Java的引用类型
免费 答题系统源码,Vscode类名警告,ubuntu 卸载ntp,tomcat自动启动设置,焦点爬虫,js传参给php,廊坊seo推广价格如何,在线答题网站系统源码,html带手机模板下载lzw
Java类型一般有两种,即基本数据类型与引用数据类型。其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点。
flash游戏全站源码,vscode不识别关键字,ubuntu云端管理,tomcat密码复杂度,彩票爬虫技术,php积分签到源码,珠海全网seo优化高效果公司lzw
从JDK1.2开始,Java中的引用类型分为四种,分别是:

①强引用(StrongReference)

②软引用(SoftRefernce)

③弱引用(WeakReference)

④虚引用(PhantomReference)

强引用-StrongReference

这种引用是平时开发中最常用的,例如Stringstrong=newString(“StrongReference”),当一个实例对象具有强引用时,垃圾回收器不会回收该对象,当内存不足时,宁愿抛出OutOfMemeryError异常也不会通过回收强引用的对象,因为JVM认为强引用的对象是用户正在使用的对象,它无法分辨出到底该回收哪个,强行回收有可能导致系统严重错误。

软引用-SoftReference

如果一个对象只有软引用,那么只有当内存不足时,JVM才会去回收该对象,其他情况不会回收。软引用可以结合ReferenceQueue来使用,当由于系统内存不足,导致软引用的对象被回收了,JVM会把这个软引用加入到与之相关联的ReferenceQueue中。

ReferenceQueuereferenceQueue=newReferenceQueue();SoftReferencesoftReference=newSoftReference(newBook(),referenceQueue);Bookbook=softReference.get();Referencereference=referenceQueue.poll();

当系统内存不足时,触发gc,这个Book就会被回收,reference将不为null。

弱引用-WeakReference

只有弱引用的对象,当JVM触发gc时,就会回收该对象。与软引用不同的是,不管是否内存不足,弱引用都会被回收。弱引用可以结合ReferenceQueue来使用,当由于系统触发gc,导致软引用的对象被回收了,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中,不过由于垃圾收集器线程的优先级很低,所以弱引用不一定会被很快回收。下面通过一个主动触发gc的例子来验证此结论。

ReferenceQueuereferenceQueue=newReferenceQueue();WeakReferenceweakReference=newWeakReference(newBook(),referenceQueue);Bookbook=softReference.get();System.gc();//Runtime.getRuntime().gc();Referencereference=referenceQueue.poll();

当然这不是每次都能复现,因为我们调用System.gc()只是告诉JVM该回收垃圾了,但是它什么时候做还是不一定的,但就我测试来看,只要多写几次System.gc(),复现的概率还是很高的。

虚引用-PhantomReference

如果一个对象只有虚引用在引用它,垃圾回收器是可以在任意时候对其进行回收的,虚引用主要用来跟踪对象被垃圾回收器回收的活动,当被回收时,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中。

与软引用和弱引用不同的是,虚引用必须有一个与之关联的ReferenceQueue,通过phantomReference.get()得到的值为null,试想一下,如果没有ReferenceQueue与之关联还有什么存在的价值呢?

PhantomReferencephantomReference=newPhantomReference(newBook(),referenceQueue);Bookbook=phantomReference.get();//此值为nullReferencereference=referenceQueue.poll();

推荐教学:《java教学》


Java引用类型包括哪些?
  • js类型转换与引用类型详解(Boolean_Number_String)【javascript】
  • js类型转换与引用类型详解(Boolean_Number_String)【javascript】 | js类型转换与引用类型详解(Boolean_Number_String)【javascript】 ...

    Java引用类型包括哪些?
  • 浅析JavaScript基本类型与引用类型
  • 浅析JavaScript基本类型与引用类型 | 浅析JavaScript基本类型与引用类型 ...

    Java引用类型包括哪些?
  • JavaScript数据类型之基本类型和引用类型的值
  • JavaScript数据类型之基本类型和引用类型的值 | JavaScript数据类型之基本类型和引用类型的值 ...