Java引用类型有哪些
动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习Java编程哦!
Java类型一般有两种,即基本数据类型与引用数据类型。其中,引用数据类型在存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧:
1、Java中有哪几种引用?它们的含义和区别是什么?
从JDK1.2开始,Java中的引用类型分为四种,分别是:
①强引用(StrongReference)
②软引用(SoftRefernce)
③弱引用(WeakReference)
④虚引用(PhantomReference)
强引用-StrongReference
这种引用是平时开发中最常用的,例如Stringstrong=newString("StrongReference"),当一个实例对象具有强引用时,垃圾回收器不会回收该对象,当内存不足时,宁愿抛出OutOfMemeryError异常也不会通过回收强引用的对象,因为JVM认为强引用的对象是用户正在使用的对象,它无法分辨出到底该回收哪个,强行回收有可能导致系统严重错误。
软引用-SoftReference
如果一个对象只有软引用,那么只有当内存不足时,JVM才会去回收该对象,其他情况不会回收。软引用可以结合ReferenceQueue来使用,当由于系统内存不足,导致软引用的对象被回收了,JVM会把这个软引用加入到与之相关联的ReferenceQueue中。
ReferenceQueuereferenceQueue=newReferenceQueue();
SoftReference<Book>softReference=newSoftReference<>(newBook(),referenceQueue);
Bookbook=softReference.get();
Referencereference=referenceQueue.poll();
当系统内存不足时,触发gc,这个Book就会被回收,reference将不为null。
弱引用-WeakReference
只有弱引用的对象,当JVM触发gc时,就会回收该对象。与软引用不同的是,不管是否内存不足,弱引用都会被回收。弱引用可以结合ReferenceQueue来使用,当由于系统触发gc,导致软引用的对象被回收了,JVM会把这个弱引用加入到与之相关联的ReferenceQueue中,不过由于垃圾收集器线程的优先级很低,所以弱引用不一定会被很快回收。下面通过一个主动触发gc的例子来验证此结论。
ReferenceQueuereferenceQueue=newReferenceQueue();
WeakReference<Book>weakReference=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与之关联还有什么存在的价值呢?
PhantomReference<Book>phantomReference=newPhantomReference<>(newBook(),referenceQueue);
Bookbook=phantomReference.get();//此值为null
Referencereference=referenceQueue.poll();
Java引用类型有哪些相关推荐
- 【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )
文章目录 一.静态变量 二. Java 引用类型 ( 强.软.弱.虚 ) 一.静态变量 GC Root 对象 : 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ; 方法区 中的 静态引用对象 ...
- 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )
文章目录 一. Java 引用类型 ( 强.软.弱.虚 ) 二. 软引用代码示例 三. 弱引用代码示例 强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必 ...
- Java引用类型与常量
Java引用类型与常量 引用数据类型 Java中,引用类型的变量非常类似于C/C++的指针. 引用类型指向一个对象,指向对象的变量是引用变量,这些变量在声明时被指定为一个特定的类型,比如Employe ...
- 深入理解Java引用类型
深入理解Java引用类型 在Java中类型可分为两大类:值类型与引用类型.值类型就是基本数据类型(如int ,double 等),而引用类型,是指除了基本的变量类型之外的所有类型(如通过 class ...
- Java引用类型分类以及详解
Java引用类型分类以及详解 - Java引用类型概述 在JVM之中再好的算法,也敌不过一个好烂的程序员.一个程序要想写好有两点:按照开发标准进行.请写有用代码. 而对于垃圾的产生与回收的处理之中,要 ...
- Java引用类型用法总结(重点)
Java引用类型 引用数据类型:数组,类(String),接口. class作为成员变量 类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象. Role.java package r ...
- java的虚引用_你不可不知的Java引用类型之——虚引用
定义 虚引用是使用PhantomReference创建的引用,虚引用也称为幽灵引用或者幻影引用,是所有引用类型中最弱的一个.一个对象是否有虚引用的存在,完全不会对其生命周期构成影响,也无法通过虚引用获 ...
- java引用类型使用场景_下面有关java的引用类型,说法正确的有?
发现这道题完全没头绪,就去查了一下,感觉说的比较清楚了. 四种引用类型 JDK1.2 之前,一个对象只有"已被引用"和"未被引用"两种状态,这将无法描述某些特殊 ...
- java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别
[Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...
最新文章
- python哪些是可变对象_python的不可变对象与可变对象及其妙用与坑
- groupby多个字段性能_MySQL今天我们说下分组(group by)
- HDU2089——不要62 (数位DP)
- 产品经理必懂技术术语(后台类)
- SpringBoot + MyBaties 实现其XML方式
- python win32api messagebox_如何在Python中使用Win32 API?
- 声音均衡器怎么调好听_调音师必备:如何调出最佳人声?
- c语言延时时间计算器,rc延时电路延时时间计算公式
- eclipse安卓插件ADT下载地址
- CRC冗余校验的真正原理之模2除法
- 服务器被攻击了怎么办?海外服务器有什么有特点?网址或者APP被攻击了怎么办?
- springboot项目Banner配置
- DataStream API【1】
- Vue常用的内置指令的底层细节分析
- 【Java并发编程的艺术】读书笔记——Java并发编程基础
- 纽约州立大学环境与林业学院计算机科学专业,纽约州立大学环境科学与林业学院...
- stranded 和 non-stranded RNA-seq
- wxX11移植到arm板上(序)
- 运维标准化与流程化建设
- 读《小强升职记》有感 时间管理