java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?
在java语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握java对象生命周期和JVM内部相关机制非常有帮助。
今天问题:强引用、软引用、弱引用、幻想引用有什么区别?具体使用场景是什么?
经典回答:不同的引用类型,主要体现的是对象不同的可达性状态和对垃圾收集的影响。
强引用特点:我们平常典型编码Object obj=new Object()中obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM)使程序异常终止,也不会考随意回收具有强引用的“存活”对象来解决内存不足的问题。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显示的将相应(强)引用赋值为null,就可以被垃圾收集了,具体回收时机还要看收集策略。
软引用特点:软引用通过SoftReference类实现。软引用的生命周期比强引用短一些。只有JVM认为内存不足时,才会试图回收软引用指向的对象。软引用可以和一个引用队列联合使用。如果软引用所引用的对象被垃圾回收器回收,java虚拟机就会把这个软引用加到与之关联的引用队列中。后续可以调用poll()方法检查是否有他关心的对象被回收,空返回null,否则返回队列中前一个reference对象。
应用场景:软引用用来存储内存敏感的缓存。如果还有空闲内存,就可以暂时保存缓存,当内存不足时清理掉,这样就保证了使用缓存的同时不会耗尽内存。
弱引用特点:当垃圾回收器扫描他所管辖的内存区域时,一旦发现了弱引用的对象不管内存空间是否充足,都回收他的内存。
应用场景:弱引用同样适用于内存敏感的缓存。
虚引用、幻想引用特点;无法通过虚引用访问对象的任何属性或者函数
应用场景:用来跟踪对象被垃圾回收器回收的活动,当一个虚引用关联的对象被垃圾收集器回收之前会收到一条系统通知。
java面试题(杨晓峰)---第四讲强引用、软引用、弱引用、幻想引用有什么区别?的更多相关文章
- java面试题(杨晓峰)---第七讲谈谈int和integer有什么区别?
理解装箱和拆箱的过程. 对象由三部分组成:对象头,对象实例,对齐填充. 对象头:一般是十六个字节,分两部分,第一部分:哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等,第二部分是类型指针 ...
- java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?
我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...
- java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?
Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- Java对象的强、软、弱和虚引用+ReferenceQueue
Java对象的强.软.弱和虚引用+ReferenceQueue 一.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- Java:对象的强、软、弱、虚引用
转自: http://zhangjunhd.blog.51cto.com/113473/53092 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...
- Java:对象的强、软、弱和虚引用
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
随机推荐
- skb_store_bits() 和 skb_copy_bits()
int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len); int skb_store_bits(c ...
- CloseHandle()函数的使用
CloseHandle()函数的使用?? 很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHande ...
- CentOS7 环境下MySQL5.7 PHP7的安装
用的都是最新版的包 : php7 mysql5.7 nginx1.8 zabbix3.2.6 替换源为阿里云的源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/ ...
- 30个物联网传感器小实验:三行代码点亮LED灯
30个物联网传感器小实验:三行代码点亮LED灯 三行代码点亮LED灯 LED灯闪烁 LED灯调亮度 LED淡入淡出 不写一行代码点亮LED灯 全彩RGB灯 面包板 30个物联网传感器小实验:三行代码点 ...
- SQL中SUM函数和CASE WHEN联合使用
SELECT SUM(case WHEN sex=1 then 1 else 0 end )as '男生', SUM(case when sex =2 then 1 else 0 end )'女生'F ...
- MySQL查看版本号的五种方式介绍1111111
MySQL查看版本号的五种方式介绍 1 命令行模式登录MySQL [root@localhost ~]# mysql -uroot -p Enter password: Welcome to the ...
- python集合介绍
set原理 Python 还 包 含 了 一 个 数 据 类 型—— set ( 集 合 ) . 集 合 是 一 个 无 序 不 重 复 元素 的 集 . 基 本 功 能 包 括 关 系 测 试 和 ...
- duliu——思维+线段树
题目 [题目描述]小 `D` 喜欢出毒瘤题毒人.当然,他的毒瘤更多体现在若干个难题组合在同一场比赛时.小 `D` 脑中有 $n$ 个毒瘤题 idea,第 $i$ 个的毒值为$d_i$.当第 $i$ 个 ...
- 第九组 通信3班 063 OSPFv2与OSPFv3综合实验
实验目的 1. 掌握 OSPFv3(v2) 的配置方法 2. 掌握在帧中继环境下 OSPFv3 (v2)的配置方法 3. 掌握 OSPFv3(v2) NSSA 的配置方法 4. 掌握外部路由汇总的配置 ...
- 03.Jquery Mobile中的按钮
一. 基础按钮 1.设置链接的data-role,使其变成按钮. <a href="index.html" data-role="button">L ...